From 5f4f8de579a952a194b62f619336a6163551b1fb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 23 Oct 2023 00:10:18 +0000 Subject: [PATCH] Rebuild pages at 9ce3e5dd00892d72ac87c1d778b8b12abf295e26 --- .../authorship.json | 2 +- AY2324S1-CS2113-F11-1_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S1-CS2113-F11-3_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S1-CS2113-T17-1_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S1-CS2113-T17-2_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S1-CS2113-T18-1_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S1-CS2113-T18-2_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S1-CS2113-T18-4_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S1-CS2113-W12-1_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S1-CS2113-W12-3_tp_master/commits.json | 2 +- .../authorship.json | 2 +- AY2324S1-CS2113-W12-4_tp_master/commits.json | 2 +- archive.zip | Bin 529032 -> 546839 bytes reposense-logs/reposense.log.0 | 492 +++++++++--------- summary.json | 2 +- 23 files changed, 267 insertions(+), 267 deletions(-) diff --git a/AY2324S1-CS2113-F11-1_tp_master/authorship.json b/AY2324S1-CS2113-F11-1_tp_master/authorship.json index e5529de..828b079 100644 --- a/AY2324S1-CS2113-F11-1_tp_master/authorship.json +++ b/AY2324S1-CS2113-F11-1_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName.set(\"duke\")","lastModifiedDate":"2023-09-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"Remy9926"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-20"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Remy9926":1,"-":46}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Portfolio ","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":"--------|:-----------:|:--------------------------------------:|:---------:","lastModifiedDate":"2023-10-06"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Kevin Zhang | [Github](https://github.com/kevinz420) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":"![](https://picsum.photos/100) | Ethan Huang | [Github](https://github.com/remy9926) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"kevinz420":2,"Remy9926":1,"-":6}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# Duke","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"-"},"content":"{Give product intro here}","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"Useful links:","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"* [User Guide](UserGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"* [Developer Guide](DeveloperGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"* [About Us](AboutUs.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":10,"author":{"gitId":"MrOPPA1"},"content":"test","lastModifiedDate":"2023-10-06"}],"authorContributionMap":{"MrOPPA1":2,"-":8}},{"path":"src/main/java/seedu/duke/Duke.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.duke;","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.commands.Command;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.commands.CommandResult;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.commands.ExitCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"J-Y-Yan"},"content":"import seedu.duke.data.GoalList;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.parser.Parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.exerciselog.Log;","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.ui.TextUi;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":" * Entry point of the Address Book application.","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"kevinz420"},"content":" * Initializes the application and starts the interaction with the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-24"},{"lineNumber":18,"author":{"gitId":"kevinz420"},"content":" * Version info of the program.","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-24"},{"lineNumber":20,"author":{"gitId":"kevinz420"},"content":" public static final String VERSION \u003d \"AddressBook Level 2 - Version 1.0\";","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"J-Y-Yan"},"content":" public static GoalList goals \u003d new GoalList();","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" public static Log exerciseLog \u003d new Log();","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" private TextUi ui;","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"kevinz420"},"content":" // private StorageFile storage;","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"kevinz420"},"content":" public static void main(String... launchArgs) {","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"kevinz420"},"content":" new Duke().run(launchArgs);","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"J-Y-Yan"},"content":" * @param launchArgs","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"kevinz420"},"content":" * Runs the program until termination.","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"kevinz420"},"content":" public void run(String[] launchArgs) {","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"kevinz420"},"content":" start(launchArgs);","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"kevinz420"},"content":" runCommandLoopUntilExitCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"kevinz420"},"content":" exit();","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"MrOPPA1"},"content":" * Sets up the required objects, loads up the data from the storage file, and","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"MrOPPA1"},"content":" * prints the welcome message.","lastModifiedDate":"2023-10-20"},{"lineNumber":43,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"kevinz420"},"content":" * @param launchArgs arguments supplied by the user at program launch","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"kevinz420"},"content":" private void start(String[] launchArgs) {","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"kevinz420"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"kevinz420"},"content":" this.ui \u003d new TextUi();","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"kevinz420"},"content":" // this.storage \u003d initializeStorage(launchArgs);","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"kevinz420"},"content":" ui.showWelcomeMessage(VERSION, \"storage.getPath()\");","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"kevinz420"},"content":" } catch (Exception e) { // TODO: change to specific storage exceptions later","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"kevinz420"},"content":" ui.showInitFailedMessage();","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"kevinz420"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"kevinz420"},"content":" * Prints the Goodbye message and exits.","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"kevinz420"},"content":" private void exit() {","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"kevinz420"},"content":" ui.showGoodbyeMessage();","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"kevinz420"},"content":" System.exit(0);","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"MrOPPA1"},"content":" * Reads the user command and executes it, until the user issues the exit","lastModifiedDate":"2023-10-20"},{"lineNumber":68,"author":{"gitId":"MrOPPA1"},"content":" * command.","lastModifiedDate":"2023-10-20"},{"lineNumber":69,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"kevinz420"},"content":" private void runCommandLoopUntilExitCommand() {","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"kevinz420"},"content":" Command command;","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"kevinz420"},"content":" do {","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"kevinz420"},"content":" String userCommandText \u003d ui.getUserCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"kevinz420"},"content":" command \u003d new Parser().parseCommand(userCommandText);","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"kevinz420"},"content":" CommandResult result \u003d executeCommand(command);","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"kevinz420"},"content":" ui.showResultToUser(result);","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":78,"author":{"gitId":"kevinz420"},"content":" } while (!ExitCommand.isExit(command));","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":80,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"kevinz420"},"content":" * Executes the command and returns the result.","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"kevinz420"},"content":" * @param command user command","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"kevinz420"},"content":" * @return result of the command","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"kevinz420"},"content":" private CommandResult executeCommand(Command command) {","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"kevinz420"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"kevinz420"},"content":" CommandResult result \u003d command.execute();","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"kevinz420"},"content":" // storage.save(addressBook);","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"kevinz420"},"content":" return result;","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"kevinz420"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"kevinz420"},"content":" ui.showToUser(e.getMessage());","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"kevinz420"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"kevinz420"},"content":" // /**","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"MrOPPA1"},"content":" // * Creates the StorageFile object based on the user specified path (if any) or","lastModifiedDate":"2023-10-20"},{"lineNumber":100,"author":{"gitId":"MrOPPA1"},"content":" // the default storage path.","lastModifiedDate":"2023-10-20"},{"lineNumber":101,"author":{"gitId":"kevinz420"},"content":" // * @param launchArgs arguments supplied by the user at program launch","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"MrOPPA1"},"content":" // * @throws InvalidStorageFilePathException if the target file path is","lastModifiedDate":"2023-10-20"},{"lineNumber":103,"author":{"gitId":"MrOPPA1"},"content":" // incorrect.","lastModifiedDate":"2023-10-20"},{"lineNumber":104,"author":{"gitId":"kevinz420"},"content":" // */","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"MrOPPA1"},"content":" // private StorageFile initializeStorage(String[] launchArgs) throws","lastModifiedDate":"2023-10-20"},{"lineNumber":106,"author":{"gitId":"MrOPPA1"},"content":" // InvalidStorageFilePathException {","lastModifiedDate":"2023-10-20"},{"lineNumber":107,"author":{"gitId":"kevinz420"},"content":" // boolean isStorageFileSpecifiedByUser \u003d launchArgs.length \u003e 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"MrOPPA1"},"content":" // return isStorageFileSpecifiedByUser ? new StorageFile(launchArgs[0]) : new","lastModifiedDate":"2023-10-20"},{"lineNumber":109,"author":{"gitId":"MrOPPA1"},"content":" // StorageFile();","lastModifiedDate":"2023-10-20"},{"lineNumber":110,"author":{"gitId":"kevinz420"},"content":" // }","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"J-Y-Yan":4,"kevinz420":79,"MrOPPA1":12,"Remy9926":7,"-":9}},{"path":"src/main/java/seedu/duke/commands/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":" * Represents an executable command.","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"kevinz420"},"content":"public class Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"J-Y-Yan"},"content":" String userCommand;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":" public Command() {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"J-Y-Yan"},"content":" public Command(String cmd){","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"J-Y-Yan"},"content":" this.userCommand \u003d cmd;","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"MrOPPA1"},"content":" public CommandResult execute() throws Exception {","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"kevinz420"},"content":" throw new UnsupportedOperationException(\"This method is to be implemented by child classes\");","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"J-Y-Yan":8,"kevinz420":12,"MrOPPA1":1}},{"path":"src/main/java/seedu/duke/commands/CommandResult.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"import java.util.List;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":"import java.util.Optional;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.data.Printable;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":" * Represents the result of a command execution.","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":"public class CommandResult {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"kevinz420"},"content":" * The feedback message to be shown to the user. Contains a description of the execution result","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"kevinz420"},"content":" public final String feedbackToUser;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"kevinz420"},"content":" * The list of objects that was produced by the command","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"kevinz420"},"content":" private final List\u003c? extends Printable\u003e relevantItems;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"kevinz420"},"content":" public CommandResult(String feedbackToUser) {","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"kevinz420"},"content":" this.feedbackToUser \u003d feedbackToUser;","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"kevinz420"},"content":" relevantItems \u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"kevinz420"},"content":" public CommandResult(String feedbackToUser, List\u003c? extends Printable\u003e relevantItems) {","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"kevinz420"},"content":" this.feedbackToUser \u003d feedbackToUser;","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"kevinz420"},"content":" this.relevantItems \u003d relevantItems;","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"kevinz420"},"content":" * Returns a list of objects relevant to the command result, if any.","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"J-Y-Yan"},"content":" * @return relevant items","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"kevinz420"},"content":" public Optional\u003cList\u003c? extends Printable\u003e\u003e getRelevantItems() {","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"kevinz420"},"content":" return Optional.ofNullable(relevantItems);","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"J-Y-Yan":1,"kevinz420":40}},{"path":"src/main/java/seedu/duke/commands/ExitCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":" * Terminates the program.","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"kevinz420"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"kevinz420"},"content":" public static final String COMMAND_WORD \u003d \"exit\";","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Exits the program.\\n\"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":" public static final String MESSAGE_EXIT_ACKNOWEDGEMENT \u003d \"Exiting FITNUS as requested ...\";","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"kevinz420"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"kevinz420"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"kevinz420"},"content":" return new CommandResult(MESSAGE_EXIT_ACKNOWEDGEMENT);","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"kevinz420"},"content":" public static boolean isExit(Command command) {","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"kevinz420"},"content":" return command instanceof ExitCommand; // instanceof returns false if it is null","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"kevinz420":22}},{"path":"src/main/java/seedu/duke/commands/GoalCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"J-Y-Yan"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"J-Y-Yan"},"content":"import seedu.duke.Duke;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"J-Y-Yan"},"content":"import seedu.duke.ui.TextUi;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"J-Y-Yan"},"content":"import seedu.duke.data.exception.IncorrectFormatException;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"J-Y-Yan"},"content":"public class GoalCommand extends Command {","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"J-Y-Yan"},"content":" public static final String COMMAND_WORD \u003d \"set\";","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"J-Y-Yan"},"content":" public GoalCommand(String cmd){","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"J-Y-Yan"},"content":" super(cmd);","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"J-Y-Yan"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"J-Y-Yan"},"content":" try{","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"J-Y-Yan"},"content":" Duke.goals.addGoal(this.userCommand);","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"J-Y-Yan"},"content":" String addGoalResultMsg \u003d TextUi.addGoalSuccessMessage(Duke.goals);","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"J-Y-Yan"},"content":" return new CommandResult(addGoalResultMsg);","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"J-Y-Yan"},"content":" }catch(IncorrectFormatException ife){","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"J-Y-Yan"},"content":" ife.handleException();","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"J-Y-Yan"},"content":" }catch(NumberFormatException nfe){","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"J-Y-Yan"},"content":" System.out.println(\"Please input a valid number for calories.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"J-Y-Yan"},"content":" return null;","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"J-Y-Yan"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"J-Y-Yan":31}},{"path":"src/main/java/seedu/duke/commands/HelpCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":" * Shows help instructions.","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":" public static final String COMMAND_WORD \u003d \"help\";","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Shows program usage instructions.\\n\"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"kevinz420"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"kevinz420"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"kevinz420"},"content":" return new CommandResult(","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"kevinz420"},"content":" HelpCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"kevinz420"},"content":" // + \"\\n\" + DeleteCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"kevinz420"},"content":" // + \"\\n\" + ClearCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"kevinz420"},"content":" // + \"\\n\" + FindCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"kevinz420"},"content":" // + \"\\n\" + ListCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"kevinz420"},"content":" // + \"\\n\" + ViewCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"kevinz420"},"content":" // + \"\\n\" + ViewAllCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"kevinz420"},"content":" );","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"kevinz420":26}},{"path":"src/main/java/seedu/duke/commands/IncorrectCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":" * Represents an incorrect command. Upon execution, produces some feedback to the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":"public class IncorrectCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":" public final String feedbackToUser;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":" public IncorrectCommand(String feedbackToUser) {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":" this.feedbackToUser \u003d feedbackToUser;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"kevinz420"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"kevinz420"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"kevinz420"},"content":" return new CommandResult(feedbackToUser);","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"kevinz420":20}},{"path":"src/main/java/seedu/duke/commands/logcommands/DeleteLogCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.commands.logcommands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"import java.util.List;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.CommandResult;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.Duke;","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":"public class DeleteLogCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" public String feedbackToUser;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" private List\u003cString\u003e exerciseDetails;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" public DeleteLogCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" super();","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" public DeleteLogCommand(List\u003cString\u003e exerciseDetails) {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" super();","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" this.exerciseDetails \u003d exerciseDetails;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" * Extracts the details of the delete command and deletes the specified exercise.","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" * @return CommandResult that tells the user whether an exercise was successfully removed.","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":" int month \u003d Integer.parseInt(exerciseDetails.get(0));","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" int day \u003d Integer.parseInt(exerciseDetails.get(1));","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" String exerciseName \u003d exerciseDetails.get(2);","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" int caloriesBurned \u003d Integer.parseInt(exerciseDetails.get(3));","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" feedbackToUser \u003d Duke.exerciseLog.removeExercise(month, day, exerciseName, caloriesBurned) ?","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":" \"Successfully removed exercise!\" :","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":" \"Could not find the specified exercise!\";","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" return new CommandResult(feedbackToUser);","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"Remy9926":40}},{"path":"src/main/java/seedu/duke/commands/logcommands/LogCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.commands.logcommands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"import java.util.List;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.CommandResult;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.Duke;","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":"public class LogCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" public static final String COMMAND_WORD \u003d \"log\";","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" public String feedbackToUser;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" private List\u003cString\u003e exerciseDetails;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" public LogCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" super();","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":" feedbackToUser \u003d \"Successfully added exercise to log:\\n\\t\";","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" public LogCommand(List\u003cString\u003e exerciseDetails) {","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" super();","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" feedbackToUser \u003d \"Successfully added exercise to log:\\n\\t\";","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" this.exerciseDetails \u003d exerciseDetails;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" * Extracts the details of the log command and logs the exercise with its specific details.","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" * @return CommandResult telling the user that the exercise was successfully added along with the exercise details.","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" int month \u003d Integer.parseInt(exerciseDetails.get(0));","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" int day \u003d Integer.parseInt(exerciseDetails.get(1));","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" String exerciseName \u003d exerciseDetails.get(2);","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" int caloriesBurned \u003d Integer.parseInt(exerciseDetails.get(3));","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":" String exerciseDescription \u003d Duke.exerciseLog.addExercise(month, day, exerciseName, caloriesBurned);","lastModifiedDate":"2023-10-20"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" return new CommandResult(feedbackToUser + exerciseDescription);","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"Remy9926":40}},{"path":"src/main/java/seedu/duke/commands/logcommands/ViewLogCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.commands.logcommands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"import java.util.List;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.CommandResult;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.Duke;","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":"enum ViewType {","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" TOTALEXERCISES,","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" TOTALEXERCISESMONTH,","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":" TOTALEXERCISESDAY;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":"public class ViewLogCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":" public static final String COMMAND_WORD \u003d \"view\";","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" private ViewType view;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" private int month;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" private int day;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" public ViewLogCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" super();","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":" * Assigns the view attribute a specific enum based on the scope at which the user wants to view the exercise log.","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":" * @param viewArgs the details of the scope at which the user wants to view the exercise log.","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" public ViewLogCommand(List\u003cString\u003e viewArgs) {","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" super();","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" switch (viewArgs.get(0)) {","lastModifiedDate":"2023-10-20"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" case \"all\":","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":" view \u003d ViewType.TOTALEXERCISES;","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":" case \"month\":","lastModifiedDate":"2023-10-20"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" view \u003d ViewType.TOTALEXERCISESMONTH;","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"Remy9926"},"content":" month \u003d Integer.parseInt(viewArgs.get(1));","lastModifiedDate":"2023-10-20"},{"lineNumber":40,"author":{"gitId":"Remy9926"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"Remy9926"},"content":" case \"day\":","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"Remy9926"},"content":" view \u003d ViewType.TOTALEXERCISESDAY;","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"Remy9926"},"content":" month \u003d Integer.parseInt(viewArgs.get(1));","lastModifiedDate":"2023-10-20"},{"lineNumber":44,"author":{"gitId":"Remy9926"},"content":" day \u003d Integer.parseInt(viewArgs.get(2));","lastModifiedDate":"2023-10-20"},{"lineNumber":45,"author":{"gitId":"Remy9926"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"Remy9926"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"Remy9926"},"content":" System.out.println(\"No ViewType specified\");","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":52,"author":{"gitId":"Remy9926"},"content":" * A different message is returned depending on the scope at which a user wants to view their exercises.","lastModifiedDate":"2023-10-20"},{"lineNumber":53,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"Remy9926"},"content":" * @return CommandResult telling the user their total number of exercises in total, for a month, or for a day.","lastModifiedDate":"2023-10-20"},{"lineNumber":55,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":56,"author":{"gitId":"Remy9926"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-20"},{"lineNumber":57,"author":{"gitId":"Remy9926"},"content":" String numberOfExercises;","lastModifiedDate":"2023-10-20"},{"lineNumber":58,"author":{"gitId":"Remy9926"},"content":" switch (view) {","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"Remy9926"},"content":" case TOTALEXERCISES:","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"Remy9926"},"content":" numberOfExercises \u003d Integer.toString(Duke.exerciseLog.getNumberOfExercises());","lastModifiedDate":"2023-10-20"},{"lineNumber":61,"author":{"gitId":"Remy9926"},"content":" return new CommandResult(\"Here are the total number of exercises you have logged: \" +","lastModifiedDate":"2023-10-20"},{"lineNumber":62,"author":{"gitId":"Remy9926"},"content":" numberOfExercises + \"\\n\");","lastModifiedDate":"2023-10-20"},{"lineNumber":63,"author":{"gitId":"Remy9926"},"content":" case TOTALEXERCISESMONTH:","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"Remy9926"},"content":" numberOfExercises \u003d Integer.toString(Duke.exerciseLog.getNumberOfExercisesForMonth(month));","lastModifiedDate":"2023-10-20"},{"lineNumber":65,"author":{"gitId":"Remy9926"},"content":" return new CommandResult(\"Here are the total number of exercises for that month: \" +","lastModifiedDate":"2023-10-20"},{"lineNumber":66,"author":{"gitId":"Remy9926"},"content":" numberOfExercises + \"\\n\");","lastModifiedDate":"2023-10-20"},{"lineNumber":67,"author":{"gitId":"Remy9926"},"content":" case TOTALEXERCISESDAY:","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"Remy9926"},"content":" numberOfExercises \u003d Integer.toString(Duke.exerciseLog.getNumberOfExercisesForDay(month, day));","lastModifiedDate":"2023-10-20"},{"lineNumber":69,"author":{"gitId":"Remy9926"},"content":" return new CommandResult(\"Here are the total number of exercises for that day: \" +","lastModifiedDate":"2023-10-20"},{"lineNumber":70,"author":{"gitId":"Remy9926"},"content":" numberOfExercises + \"\\n\");","lastModifiedDate":"2023-10-20"},{"lineNumber":71,"author":{"gitId":"Remy9926"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"Remy9926"},"content":" return new CommandResult(\"Invalid exercise search type\");","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"Remy9926":75}},{"path":"src/main/java/seedu/duke/commands/meal/AddCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"MrOPPA1"},"content":"package seedu.duke.commands.meal;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"MrOPPA1"},"content":"import seedu.duke.commands.CommandResult;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"MrOPPA1"},"content":"import seedu.duke.data.meal.Meal;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"MrOPPA1"},"content":"public class AddCommand extends MealCommand {","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"MrOPPA1"},"content":" public static final String COMMAND_WORD \u003d \"meal add\";","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"MrOPPA1"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Add a meal and record the amount of calories.\\n\"","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"MrOPPA1"},"content":" + \"Example: \" + COMMAND_WORD + \" potato 15\";","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" private static final int validArgumentAmount \u003d 2;","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"MrOPPA1"},"content":" private final String name;","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"MrOPPA1"},"content":" private final int calories;","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"MrOPPA1"},"content":" public AddCommand(String[] arguments) throws Exception {","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"MrOPPA1"},"content":" if (arguments \u003d\u003d null || arguments.length !\u003d 2) {","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"MrOPPA1"},"content":" throw new Exception(\"Incorrect amount of the arguments.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"MrOPPA1"},"content":" name \u003d arguments[0];","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"MrOPPA1"},"content":" calories \u003d Integer.parseInt(arguments[1]);","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"MrOPPA1"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"MrOPPA1"},"content":" public CommandResult execute() throws Exception {","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"MrOPPA1"},"content":" meals.add(new Meal(name, calories));","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"MrOPPA1"},"content":" return new CommandResult(\"Successfully add meal \u0027\" + name + \"\u0027(\" + calories + \"\u0027 calories)!\");","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"MrOPPA1"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"MrOPPA1":26,"Remy9926":1}},{"path":"src/main/java/seedu/duke/commands/meal/MealCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"MrOPPA1"},"content":"package seedu.duke.commands.meal;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"MrOPPA1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"MrOPPA1"},"content":"import seedu.duke.commands.Command;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"MrOPPA1"},"content":"import seedu.duke.data.meal.Meal;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"MrOPPA1"},"content":"public class MealCommand extends Command {","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"MrOPPA1"},"content":" protected static ArrayList\u003cMeal\u003e meals;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" public static void setMeals(ArrayList\u003cMeal\u003e meals) {","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"MrOPPA1"},"content":" MealCommand.meals \u003d meals;","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" protected void checkArgument(String[] arguments, int validArgumentAmount) throws Exception {","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"MrOPPA1"},"content":" if (arguments \u003d\u003d null || arguments.length !\u003d 2) {","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"MrOPPA1"},"content":" throw new Exception(\"Incorrect amount of the arguments.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"MrOPPA1"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"MrOPPA1":18,"Remy9926":2}},{"path":"src/main/java/seedu/duke/common/Messages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.common;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":" * Container for user visible messages.","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"kevinz420"},"content":"public class Messages {","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":" public static final String MESSAGE_GOODBYE \u003d \"Good bye!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"kevinz420"},"content":" public static final String MESSAGE_INIT_FAILED \u003d \"Failed to initialise address book application. Exiting...\";","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":" public static final String MESSAGE_PROGRAM_LAUNCH_ARGS_USAGE \u003d \"Launch command format: \"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":" + \"java seedu.duke.Duke [STORAGE_FILE_PATH]\";","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":" public static final String MESSAGE_WELCOME \u003d \"Welcome to your FITNUS journey!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":" public static final String MESSAGE_USING_STORAGE_FILE \u003d \"Using storage file : %1$s\";","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"kevinz420"},"content":" public static final String MESSAGE_INVALID_COMMAND_FORMAT \u003d \"Invalid command format! \\n%1$s\";","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"kevinz420":14}},{"path":"src/main/java/seedu/duke/data/Date.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"MrOPPA1"},"content":"package seedu.duke.data;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"MrOPPA1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"MrOPPA1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"MrOPPA1"},"content":"import java.util.Locale;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"MrOPPA1"},"content":"// import com.google.gson.annotations.SerializedName;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"MrOPPA1"},"content":"/**","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"MrOPPA1"},"content":" * Customized class for showing date and parsing supported string to date.","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"MrOPPA1"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"MrOPPA1"},"content":"public class Date {","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"MrOPPA1"},"content":" private static DateTimeFormatter[] formatters \u003d new DateTimeFormatter[] {","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"MrOPPA1"},"content":" DateTimeFormatter.ofPattern(\"yyyy-M-d\"),","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"MrOPPA1"},"content":" DateTimeFormatter.ofPattern(\"M-d-yyyy\"),","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"MrOPPA1"},"content":" DateTimeFormatter.ofPattern(\"MMM d, yyyy\", Locale.ENGLISH), };","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"MrOPPA1"},"content":" private static DateTimeFormatter toStringFormatter \u003d formatters[formatters.length - 1];","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" public String standardString;","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" transient LocalDate date;","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" // @SerializedName(\"rawData\")","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"MrOPPA1"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" * Create a new date.","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"MrOPPA1"},"content":" *","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"MrOPPA1"},"content":" * @param rawData A String that needs to comply with a supported format and","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"MrOPPA1"},"content":" * indicates a correct date that will be recorded by this Date","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"MrOPPA1"},"content":" * instance.","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"MrOPPA1"},"content":" * @throws TipsException Any excption will be throw in this type, which contains","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"MrOPPA1"},"content":" * information about this exception and the possible","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"MrOPPA1"},"content":" * solution.","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"MrOPPA1"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" public Date(String rawData) throws Exception {","lastModifiedDate":"2023-10-20"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" setRawData(rawData);","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"MrOPPA1"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" * Modifying an existing date with a rawData String.","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"MrOPPA1"},"content":" *","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"MrOPPA1"},"content":" * @param rawData A String that needs to comply with a supported format and","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"MrOPPA1"},"content":" * indicates a correct date that will be recorded by this Date","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"MrOPPA1"},"content":" * instance.","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"MrOPPA1"},"content":" * @throws TipsException Any excption will be throw in this type, which contains","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"MrOPPA1"},"content":" * information about this exception and the possible","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"MrOPPA1"},"content":" * solution.","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"MrOPPA1"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":47,"author":{"gitId":"Remy9926"},"content":" public void setRawData(String rawData) throws Exception {","lastModifiedDate":"2023-10-20"},{"lineNumber":48,"author":{"gitId":"Remy9926"},"content":" for (DateTimeFormatter formatter : formatters) {","lastModifiedDate":"2023-10-20"},{"lineNumber":49,"author":{"gitId":"Remy9926"},"content":" try {","lastModifiedDate":"2023-10-20"},{"lineNumber":50,"author":{"gitId":"Remy9926"},"content":" date \u003d LocalDate.parse(rawData, formatter);","lastModifiedDate":"2023-10-20"},{"lineNumber":51,"author":{"gitId":"Remy9926"},"content":" standardString \u003d this.toString();","lastModifiedDate":"2023-10-20"},{"lineNumber":52,"author":{"gitId":"Remy9926"},"content":" return;","lastModifiedDate":"2023-10-20"},{"lineNumber":53,"author":{"gitId":"Remy9926"},"content":" } catch (Exception exception) {","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"Remy9926"},"content":" continue;","lastModifiedDate":"2023-10-20"},{"lineNumber":55,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":56,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":57,"author":{"gitId":"Remy9926"},"content":" throw new Exception(\"Unable to parse date time!\");","lastModifiedDate":"2023-10-20"},{"lineNumber":58,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":60,"author":{"gitId":"MrOPPA1"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"MrOPPA1"},"content":" public String toString() {","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"MrOPPA1"},"content":" return date.format(toStringFormatter);","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"MrOPPA1"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"MrOPPA1":45,"Remy9926":19}},{"path":"src/main/java/seedu/duke/data/DateTime.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"MrOPPA1"},"content":"package seedu.duke.data;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"MrOPPA1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"MrOPPA1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"MrOPPA1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"MrOPPA1"},"content":"import java.util.Locale;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"MrOPPA1"},"content":"// import com.google.gson.annotations.SerializedName;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"MrOPPA1"},"content":"/**","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"MrOPPA1"},"content":" * Customized class for showing date time and parsing supported string to date","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"MrOPPA1"},"content":" * time.","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"MrOPPA1"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"MrOPPA1"},"content":"public class DateTime {","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"MrOPPA1"},"content":" private static DateTimeFormatter[] formatters \u003d new DateTimeFormatter[] {","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"MrOPPA1"},"content":" DateTimeFormatter.ofPattern(\"yyyy-M-d HHmm\"),","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"MrOPPA1"},"content":" DateTimeFormatter.ofPattern(\"yyyy-M-d H:m\"),","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"MrOPPA1"},"content":" DateTimeFormatter.ofPattern(\"M-d-yyyy HHmm\"),","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"MrOPPA1"},"content":" DateTimeFormatter.ofPattern(\"M-d-yyyy H:m\"),","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"MrOPPA1"},"content":" DateTimeFormatter.ofPattern(\"MMM d, yyyy HH:mm\", Locale.ENGLISH), };","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"MrOPPA1"},"content":" private static DateTimeFormatter toStringFormatter \u003d formatters[formatters.length - 1];","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" public String standardString;","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" transient LocalDateTime dateTime;","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" // @SerializedName(\"rawData\")","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" * Create a new date time.","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" * @param rawData A String that needs to comply with a supported format and","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" * indicates a correct time that will be recorded by this Date","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" * instance time.","lastModifiedDate":"2023-10-20"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" * @throws TipsException Any excption will be throw in this type, which contains","lastModifiedDate":"2023-10-20"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" * information about this exception and the possible","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":" * solution.","lastModifiedDate":"2023-10-20"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":" public DateTime(String rawData) throws Exception {","lastModifiedDate":"2023-10-20"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" setRawData(rawData);","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":40,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"MrOPPA1"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"MrOPPA1"},"content":" * Modifying an existing date time with a rawData String.","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"MrOPPA1"},"content":" *","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"MrOPPA1"},"content":" * @param rawData A String that needs to comply with a supported format and","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"MrOPPA1"},"content":" * indicates a correct time that will be recorded by this Date","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"MrOPPA1"},"content":" * instance.","lastModifiedDate":"2023-10-19"},{"lineNumber":47,"author":{"gitId":"MrOPPA1"},"content":" * @throws TipsException Any excption will be throw in this type, which contains","lastModifiedDate":"2023-10-19"},{"lineNumber":48,"author":{"gitId":"MrOPPA1"},"content":" * information about this exception and the possible","lastModifiedDate":"2023-10-19"},{"lineNumber":49,"author":{"gitId":"MrOPPA1"},"content":" * solution.","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"MrOPPA1"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"MrOPPA1"},"content":" public void setRawData(String rawData) throws Exception {","lastModifiedDate":"2023-10-19"},{"lineNumber":52,"author":{"gitId":"MrOPPA1"},"content":" for (DateTimeFormatter formatter : formatters) {","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"MrOPPA1"},"content":" try {","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"MrOPPA1"},"content":" dateTime \u003d LocalDateTime.parse(rawData, formatter);","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"MrOPPA1"},"content":" standardString \u003d this.toString();","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"MrOPPA1"},"content":" return;","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"MrOPPA1"},"content":" } catch (Exception exception) {","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"Remy9926"},"content":" continue;","lastModifiedDate":"2023-10-20"},{"lineNumber":59,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":60,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"MrOPPA1"},"content":" throw new Exception(\"Unable to parse date time!\");","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"MrOPPA1"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":65,"author":{"gitId":"MrOPPA1"},"content":" public String toString() {","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"MrOPPA1"},"content":" return dateTime.format(toStringFormatter);","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":68,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":69,"author":{"gitId":"MrOPPA1"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":70,"author":{"gitId":"MrOPPA1"},"content":" * Compare the dates of this DateTime and another DateTime.","lastModifiedDate":"2023-10-19"},{"lineNumber":71,"author":{"gitId":"MrOPPA1"},"content":" *","lastModifiedDate":"2023-10-19"},{"lineNumber":72,"author":{"gitId":"MrOPPA1"},"content":" * @param dateTime The other DateTime that is used to compare.","lastModifiedDate":"2023-10-19"},{"lineNumber":73,"author":{"gitId":"MrOPPA1"},"content":" * @return If the date of current instance is earlier,it returns -1.","lastModifiedDate":"2023-10-19"},{"lineNumber":74,"author":{"gitId":"MrOPPA1"},"content":" * If the date of current instance is later,it returns 1.","lastModifiedDate":"2023-10-19"},{"lineNumber":75,"author":{"gitId":"MrOPPA1"},"content":" * Otherwise(when they\u0027re at exactly the same date) it returns 0.","lastModifiedDate":"2023-10-19"},{"lineNumber":76,"author":{"gitId":"MrOPPA1"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":77,"author":{"gitId":"MrOPPA1"},"content":" public int compareDate(DateTime dateTime) {","lastModifiedDate":"2023-10-19"},{"lineNumber":78,"author":{"gitId":"Remy9926"},"content":" LocalDate date1 \u003d this.dateTime.toLocalDate();","lastModifiedDate":"2023-10-20"},{"lineNumber":79,"author":{"gitId":"Remy9926"},"content":" LocalDate date2 \u003d dateTime.dateTime.toLocalDate();","lastModifiedDate":"2023-10-20"},{"lineNumber":80,"author":{"gitId":"MrOPPA1"},"content":" if (date1.isBefore(date2)) {","lastModifiedDate":"2023-10-19"},{"lineNumber":81,"author":{"gitId":"MrOPPA1"},"content":" return 1;","lastModifiedDate":"2023-10-19"},{"lineNumber":82,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":83,"author":{"gitId":"MrOPPA1"},"content":" if (date1.isAfter(date2)) {","lastModifiedDate":"2023-10-19"},{"lineNumber":84,"author":{"gitId":"MrOPPA1"},"content":" return -1;","lastModifiedDate":"2023-10-19"},{"lineNumber":85,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":86,"author":{"gitId":"MrOPPA1"},"content":" return 0;","lastModifiedDate":"2023-10-19"},{"lineNumber":87,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":88,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":89,"author":{"gitId":"MrOPPA1"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":90,"author":{"gitId":"MrOPPA1"},"content":" * Compare the dates of this DateTime and another Date.","lastModifiedDate":"2023-10-19"},{"lineNumber":91,"author":{"gitId":"MrOPPA1"},"content":" *","lastModifiedDate":"2023-10-19"},{"lineNumber":92,"author":{"gitId":"MrOPPA1"},"content":" * @param date The other Date that is used to compare.","lastModifiedDate":"2023-10-19"},{"lineNumber":93,"author":{"gitId":"MrOPPA1"},"content":" * @return If the date of current instance is earlier,it returns -1.","lastModifiedDate":"2023-10-19"},{"lineNumber":94,"author":{"gitId":"MrOPPA1"},"content":" * If the date of current instance is later,it returns 1.","lastModifiedDate":"2023-10-19"},{"lineNumber":95,"author":{"gitId":"MrOPPA1"},"content":" * Otherwise(when they\u0027re at exactly the same date) it returns 0.","lastModifiedDate":"2023-10-19"},{"lineNumber":96,"author":{"gitId":"MrOPPA1"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":97,"author":{"gitId":"MrOPPA1"},"content":" public int compareDate(Date date) {","lastModifiedDate":"2023-10-19"},{"lineNumber":98,"author":{"gitId":"Remy9926"},"content":" LocalDate date1 \u003d this.dateTime.toLocalDate();","lastModifiedDate":"2023-10-20"},{"lineNumber":99,"author":{"gitId":"Remy9926"},"content":" LocalDate date2 \u003d date.date;","lastModifiedDate":"2023-10-20"},{"lineNumber":100,"author":{"gitId":"MrOPPA1"},"content":" if (date1.isBefore(date2)) {","lastModifiedDate":"2023-10-19"},{"lineNumber":101,"author":{"gitId":"MrOPPA1"},"content":" return -1;","lastModifiedDate":"2023-10-19"},{"lineNumber":102,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":103,"author":{"gitId":"MrOPPA1"},"content":" if (date1.isAfter(date2)) {","lastModifiedDate":"2023-10-19"},{"lineNumber":104,"author":{"gitId":"MrOPPA1"},"content":" return 1;","lastModifiedDate":"2023-10-19"},{"lineNumber":105,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":106,"author":{"gitId":"MrOPPA1"},"content":" return 0;","lastModifiedDate":"2023-10-19"},{"lineNumber":107,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":108,"author":{"gitId":"MrOPPA1"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"MrOPPA1":85,"Remy9926":23}},{"path":"src/main/java/seedu/duke/data/Goal.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"J-Y-Yan"},"content":"package seedu.duke.data;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"J-Y-Yan"},"content":"public class Goal {","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"J-Y-Yan"},"content":" private int calories;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"J-Y-Yan"},"content":" private String date;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"J-Y-Yan"},"content":" public Goal(int calories, String date){","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"J-Y-Yan"},"content":" this.calories \u003d calories;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"J-Y-Yan"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"J-Y-Yan"},"content":" public String toString() {","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"J-Y-Yan"},"content":" return \"Consume \" + this.calories + \" kcal on \" + this.date;","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"J-Y-Yan"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"J-Y-Yan":15}},{"path":"src/main/java/seedu/duke/data/GoalList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"J-Y-Yan"},"content":"package seedu.duke.data;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"J-Y-Yan"},"content":"import seedu.duke.data.exception.IllegalValueException;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"J-Y-Yan"},"content":"import seedu.duke.data.exception.IncorrectFormatException;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"J-Y-Yan"},"content":"import seedu.duke.ui.TextUi;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"J-Y-Yan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"J-Y-Yan"},"content":"public class GoalList {","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" private static final String GOALKEYWORD \u003d \"set\";","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" private static final String DATEKEYWORD \u003d \"on\";","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"J-Y-Yan"},"content":" private ArrayList\u003cGoal\u003e goals;","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"J-Y-Yan"},"content":" private int goalCount;","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"J-Y-Yan"},"content":" private TextUi ui;","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"J-Y-Yan"},"content":" public GoalList() {","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"J-Y-Yan"},"content":" goals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"J-Y-Yan"},"content":" this.goalCount \u003d 0;","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"J-Y-Yan"},"content":" public GoalList(ArrayList\u003cGoal\u003e goals) {","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"J-Y-Yan"},"content":" this.goals \u003d goals;","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"J-Y-Yan"},"content":" this.goalCount \u003d goals.size();","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"J-Y-Yan"},"content":" public Goal getGoal(int index) {","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"J-Y-Yan"},"content":" return goals.get(index);","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"J-Y-Yan"},"content":" public int getGoalCount() {","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"J-Y-Yan"},"content":" return goalCount;","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"J-Y-Yan"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"J-Y-Yan"},"content":" * @param index points to the target gaol at the goal list","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"J-Y-Yan"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"J-Y-Yan"},"content":" public void deleteGoal(int index) {","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"J-Y-Yan"},"content":" Goal targetGoal \u003d goals.remove(index);","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"J-Y-Yan"},"content":" goalCount--;","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"J-Y-Yan"},"content":" ui.printDeleteGoal(targetGoal);","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"J-Y-Yan"},"content":" ui.printNumberofGoal(goalCount);","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"J-Y-Yan"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":47,"author":{"gitId":"Remy9926"},"content":" * checks if the user Input is valid by:","lastModifiedDate":"2023-10-20"},{"lineNumber":48,"author":{"gitId":"J-Y-Yan"},"content":" * 1. check if the length of the command equals 4","lastModifiedDate":"2023-10-19"},{"lineNumber":49,"author":{"gitId":"J-Y-Yan"},"content":" * 2. detect keywords \"set\", \"on\", etc.","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"J-Y-Yan"},"content":" * 3. check if user inputs a calories number at valid range","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"Remy9926"},"content":" * The userCmd should be like: set 1234 on Date","lastModifiedDate":"2023-10-20"},{"lineNumber":52,"author":{"gitId":"Remy9926"},"content":" * @param userCmd represents the raw userInput","lastModifiedDate":"2023-10-20"},{"lineNumber":53,"author":{"gitId":"Remy9926"},"content":" * @throws IncorrectFormatException","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"J-Y-Yan"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"J-Y-Yan"},"content":" private void checkGoalInput(String userCmd) throws IncorrectFormatException, NumberFormatException {","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"J-Y-Yan"},"content":" String[] cmdSplit \u003d userCmd.split(\" \");","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"J-Y-Yan"},"content":" if (cmdSplit.length !\u003d 4) {","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"J-Y-Yan"},"content":" throw new IncorrectFormatException(\"Goal message contain extra data. Please \"","lastModifiedDate":"2023-10-19"},{"lineNumber":60,"author":{"gitId":"J-Y-Yan"},"content":" + \"provides with only relevant information.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"Remy9926"},"content":" if (!cmdSplit[0].equals(GOALKEYWORD) ) {","lastModifiedDate":"2023-10-20"},{"lineNumber":64,"author":{"gitId":"Remy9926"},"content":" throw new IncorrectFormatException(\"Sorry. I cannot detect the \u0027\" + GOALKEYWORD + \"\u0027 keyword.\" );","lastModifiedDate":"2023-10-20"},{"lineNumber":65,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"Remy9926"},"content":" if (!cmdSplit[2].equals(DATEKEYWORD)) {","lastModifiedDate":"2023-10-20"},{"lineNumber":68,"author":{"gitId":"Remy9926"},"content":" throw new IncorrectFormatException(\"Sorry. I cannot detect the \u0027\" + DATEKEYWORD + \"\u0027 keyword.\" );","lastModifiedDate":"2023-10-20"},{"lineNumber":69,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":70,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":71,"author":{"gitId":"J-Y-Yan"},"content":" int calories \u003d Integer.parseInt(cmdSplit[1]); //throws number exception if not a number string","lastModifiedDate":"2023-10-19"},{"lineNumber":72,"author":{"gitId":"J-Y-Yan"},"content":" if (calories \u003c\u003d 0 ){","lastModifiedDate":"2023-10-19"},{"lineNumber":73,"author":{"gitId":"J-Y-Yan"},"content":" throw new IllegalValueException(\"Please input a positive value.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":74,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":75,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":76,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":77,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":78,"author":{"gitId":"J-Y-Yan"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":79,"author":{"gitId":"J-Y-Yan"},"content":" * This method will first check if the raw user input is in the correct format.","lastModifiedDate":"2023-10-19"},{"lineNumber":80,"author":{"gitId":"J-Y-Yan"},"content":" * If not, terminate the method and throws error message.","lastModifiedDate":"2023-10-19"},{"lineNumber":81,"author":{"gitId":"J-Y-Yan"},"content":" * If yes, continue to add a new goal object into the goals list.","lastModifiedDate":"2023-10-19"},{"lineNumber":82,"author":{"gitId":"J-Y-Yan"},"content":" * @param userCmd represents raw user input","lastModifiedDate":"2023-10-19"},{"lineNumber":83,"author":{"gitId":"J-Y-Yan"},"content":" * @throws IncorrectFormatException if user input is in wrong format","lastModifiedDate":"2023-10-19"},{"lineNumber":84,"author":{"gitId":"J-Y-Yan"},"content":" * @throws NumberFormatException if the user does not input a valid number","lastModifiedDate":"2023-10-19"},{"lineNumber":85,"author":{"gitId":"J-Y-Yan"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":86,"author":{"gitId":"J-Y-Yan"},"content":" public void addGoal(String userCmd) throws IncorrectFormatException, NumberFormatException{","lastModifiedDate":"2023-10-19"},{"lineNumber":87,"author":{"gitId":"J-Y-Yan"},"content":" userCmd \u003d userCmd.toLowerCase().trim();","lastModifiedDate":"2023-10-19"},{"lineNumber":88,"author":{"gitId":"J-Y-Yan"},"content":" checkGoalInput(userCmd); //if invalid, exceptions is thrown","lastModifiedDate":"2023-10-19"},{"lineNumber":89,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":90,"author":{"gitId":"J-Y-Yan"},"content":" String[] cmdSplit \u003d userCmd.split(\" \");","lastModifiedDate":"2023-10-19"},{"lineNumber":91,"author":{"gitId":"J-Y-Yan"},"content":" int calories \u003d Integer.parseInt(cmdSplit[1]);","lastModifiedDate":"2023-10-19"},{"lineNumber":92,"author":{"gitId":"J-Y-Yan"},"content":" String date \u003d cmdSplit[3];","lastModifiedDate":"2023-10-19"},{"lineNumber":93,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":94,"author":{"gitId":"J-Y-Yan"},"content":" goals.add(new Goal(calories, date));","lastModifiedDate":"2023-10-19"},{"lineNumber":95,"author":{"gitId":"J-Y-Yan"},"content":" goalCount++;","lastModifiedDate":"2023-10-19"},{"lineNumber":96,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":97,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":98,"author":{"gitId":"J-Y-Yan"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"J-Y-Yan":88,"Remy9926":10}},{"path":"src/main/java/seedu/duke/data/Printable.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.data;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"public interface Printable {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":" String getAsText();","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"kevinz420":5}},{"path":"src/main/java/seedu/duke/data/exception/IllegalValueException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.data.exception;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":" * Signals that some given data does not fulfill some constraints.","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"J-Y-Yan"},"content":"public class IllegalValueException extends IncorrectFormatException {","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"kevinz420"},"content":" * @param message should contain relevant information on the failed constraint(s)","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":" public IllegalValueException(String message) {","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":" super(message);","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"J-Y-Yan":1,"kevinz420":12}},{"path":"src/main/java/seedu/duke/data/exception/IncorrectFormatException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"J-Y-Yan"},"content":"package seedu.duke.data.exception;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"J-Y-Yan"},"content":"public class IncorrectFormatException extends Exception {","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"J-Y-Yan"},"content":" public IncorrectFormatException(String message) {","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"J-Y-Yan"},"content":" super(message);","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"J-Y-Yan"},"content":" public void handleException(){","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"J-Y-Yan"},"content":" System.out.println(\"Please try again.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"J-Y-Yan"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"J-Y-Yan":13}},{"path":"src/main/java/seedu/duke/data/meal/Meal.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"MrOPPA1"},"content":"package seedu.duke.data.meal;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"MrOPPA1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"MrOPPA1"},"content":"import seedu.duke.data.DateTime;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"MrOPPA1"},"content":"public class Meal {","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"MrOPPA1"},"content":" public String name;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"MrOPPA1"},"content":" public int calories;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"MrOPPA1"},"content":" public DateTime time;","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"MrOPPA1"},"content":" public Meal(String name, int calories) throws Exception {","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"MrOPPA1"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"MrOPPA1"},"content":" this.calories \u003d calories;","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"MrOPPA1"},"content":" this.time \u003d new DateTime(LocalDateTime.now().toString());","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"MrOPPA1"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"MrOPPA1":17}},{"path":"src/main/java/seedu/duke/exerciselog/Day.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.exerciselog;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":"public class Day {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":" private final ArrayList\u003cExercise\u003e exercises;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":" public Day() {","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":" exercises \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":" * Instantiates and adds a new Exercise Object into the Day.","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" * @param exerciseName the name of the exercise to be added to the day","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":" * @param caloriesBurned the number of calories burned during the exercise","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":" * @return a string representing the new exercise","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" public String addExercise(String exerciseName, int caloriesBurned) {","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" Exercise newExercise \u003d new Exercise(exerciseName, caloriesBurned);","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" exercises.add(newExercise);","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" return newExercise.toString();","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" * Attempts to remove an exercise with the specified details and returns whether or not removal was successful.","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" * @param exerciseName the name of the exercise to be removed","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":" * @param caloriesBurned the number of calories burned during the exercise","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" * @return true if an exercise was successfully removed, false otherwise","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" public boolean removeExercise(String exerciseName, int caloriesBurned) {","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" return exercises.remove(new Exercise(exerciseName, caloriesBurned));","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":" * Returns the exercise object at the specified index for the Day.","lastModifiedDate":"2023-10-20"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"Remy9926"},"content":" * @param index the number of the exercise the user wants to check on","lastModifiedDate":"2023-10-20"},{"lineNumber":40,"author":{"gitId":"Remy9926"},"content":" * @return the exercise object at the specified index","lastModifiedDate":"2023-10-20"},{"lineNumber":41,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"Remy9926"},"content":" public Exercise getExercise(int index) {","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Remy9926"},"content":" return exercises.get(index - 1);","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":47,"author":{"gitId":"Remy9926"},"content":" * Returns the total number of exercises logged for the day.","lastModifiedDate":"2023-10-20"},{"lineNumber":48,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":49,"author":{"gitId":"Remy9926"},"content":" * @return the total number of exercises logged for the day.","lastModifiedDate":"2023-10-20"},{"lineNumber":50,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":51,"author":{"gitId":"Remy9926"},"content":" public Integer getNumberOfExercises() {","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"Remy9926"},"content":" return exercises.size();","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":56,"author":{"gitId":"Remy9926"},"content":" * Returns whether the Day has exercises or not","lastModifiedDate":"2023-10-20"},{"lineNumber":57,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":58,"author":{"gitId":"Remy9926"},"content":" * @return true if there are exercises, false if not","lastModifiedDate":"2023-10-20"},{"lineNumber":59,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":60,"author":{"gitId":"Remy9926"},"content":" public boolean containsExercises() {","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"Remy9926"},"content":" return !exercises.isEmpty();","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":65,"author":{"gitId":"Remy9926"},"content":" * Returns a string representing all the exercises contained for the Day.","lastModifiedDate":"2023-10-20"},{"lineNumber":66,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":67,"author":{"gitId":"Remy9926"},"content":" * @return a string representing all the exercises for the day","lastModifiedDate":"2023-10-20"},{"lineNumber":68,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":69,"author":{"gitId":"Remy9926"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"Remy9926"},"content":" if (exercises.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"Remy9926"},"content":" return \"\\tNO EXCERCISES FOR THIS DAY!\\n\";","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"Remy9926"},"content":" String newString \u003d \"\";","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"Remy9926"},"content":" for (Exercise e: exercises) {","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"Remy9926"},"content":" newString +\u003d \"\\t\" + e.toString();","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"Remy9926"},"content":" return newString;","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Remy9926":79}},{"path":"src/main/java/seedu/duke/exerciselog/Exercise.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.exerciselog;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"public class Exercise {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":" private String exerciseName;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":" private int caloriesBurned;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":" public Exercise(String exerciseName, int caloriesBurned) {","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":" this.exerciseName \u003d exerciseName;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":" this.caloriesBurned \u003d caloriesBurned;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" public String getExerciseName() {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":" return exerciseName;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":" public int getCaloriesBurned() {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":" return caloriesBurned;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" public void setExerciseName(String newName) {","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" this.exerciseName \u003d newName;","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" public void setCaloriesBurned(int newCalories) {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" this.caloriesBurned \u003d newCalories;","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":" return \"Exercise: \" + exerciseName + \", Calories Burned: \" + Integer.toString(caloriesBurned) + \" Calories\\n\";","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" if (!(other instanceof Exercise)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" return false;","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":" Exercise otherExercise \u003d (Exercise) other;","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":" return this.exerciseName.equals(otherExercise.getExerciseName()) \u0026\u0026","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" this.caloriesBurned \u003d\u003d otherExercise.getCaloriesBurned();","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Remy9926":40}},{"path":"src/main/java/seedu/duke/exerciselog/Log.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.exerciselog;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":"public class Log {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":" public static ArrayList\u003cMonth\u003e exerciseLog;","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":" public Log() {","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":" exerciseLog \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(31, \"jan\")); // Jan 31","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(29, \"feb\")); // Feb 29","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(31, \"mar\")); // Mar 31","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(30, \"apr\")); // Apr 30","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(31, \"may\")); // May 31","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(30, \"jun\")); // Jun 30","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(31, \"jul\")); // Jul 31","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(31, \"aug\")); // Aug 31","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(30, \"sep\")); // Sep 30","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(31, \"oct\")); // Oct 31","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(30, \"nov\")); // Nov 30","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(31, \"dec\")); // Dec 31","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" * Adds an exercise to the specified month and day with the specified name and number of calories burned.","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":" * @param month the month of the exercise to be added to the log","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" * @param day the day of the month of the exercise to be added to the log","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":" * @param exerciseName the name of the exercise to be added to the log","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" * @param caloriesBurned the number of calories burned by the exercise","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" * @return the string representation of the exercise that is added to the log","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" public String addExercise(int month, int day, String exerciseName, int caloriesBurned) {","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" return exerciseLog.get(month - 1).addExercise(day, exerciseName, caloriesBurned);","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" * Attempts to remove the specified exercise from the log and returns true only if removal is successful.","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":40,"author":{"gitId":"Remy9926"},"content":" * @param month the month of the exercise to be deleted from the log","lastModifiedDate":"2023-10-20"},{"lineNumber":41,"author":{"gitId":"Remy9926"},"content":" * @param day the day of the month of the exercise to be deleted from the log","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"Remy9926"},"content":" * @param exerciseName the name of the exercise to be deleted from the log","lastModifiedDate":"2023-10-20"},{"lineNumber":43,"author":{"gitId":"Remy9926"},"content":" * @param caloriesBurned the number of calories burned by the exercise","lastModifiedDate":"2023-10-20"},{"lineNumber":44,"author":{"gitId":"Remy9926"},"content":" * @return true if the exercise was removed, false otherwise","lastModifiedDate":"2023-10-20"},{"lineNumber":45,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":46,"author":{"gitId":"Remy9926"},"content":" public boolean removeExercise(int month, int day, String exerciseName, int caloriesBurned) {","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"Remy9926"},"content":" return exerciseLog.get(month - 1).removeExercise(day, exerciseName, caloriesBurned);","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":51,"author":{"gitId":"Remy9926"},"content":" * Returns the total number of exercises logged","lastModifiedDate":"2023-10-20"},{"lineNumber":52,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":53,"author":{"gitId":"Remy9926"},"content":" * @return the total number of exercises logged","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":55,"author":{"gitId":"Remy9926"},"content":" public int getNumberOfExercises() {","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"Remy9926"},"content":" int totalNumber \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"Remy9926"},"content":" for (Month m: exerciseLog) {","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"Remy9926"},"content":" totalNumber +\u003d m.getTotalNumberOfExercises();","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"Remy9926"},"content":" return totalNumber;","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":64,"author":{"gitId":"Remy9926"},"content":" * Returns the total number of exercises logged for the specific month","lastModifiedDate":"2023-10-20"},{"lineNumber":65,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":66,"author":{"gitId":"Remy9926"},"content":" * @param month the month to be checked","lastModifiedDate":"2023-10-20"},{"lineNumber":67,"author":{"gitId":"Remy9926"},"content":" * @return the total number of exercises logged for the specific month","lastModifiedDate":"2023-10-20"},{"lineNumber":68,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":69,"author":{"gitId":"Remy9926"},"content":" public int getNumberOfExercisesForMonth(int month) {","lastModifiedDate":"2023-10-19"},{"lineNumber":70,"author":{"gitId":"Remy9926"},"content":" return exerciseLog.get(month - 1).getTotalNumberOfExercises();","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":74,"author":{"gitId":"Remy9926"},"content":" * Returns the total number of exercises logged for the specific day of the specified month","lastModifiedDate":"2023-10-20"},{"lineNumber":75,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":76,"author":{"gitId":"Remy9926"},"content":" * @param month the month to be checked","lastModifiedDate":"2023-10-20"},{"lineNumber":77,"author":{"gitId":"Remy9926"},"content":" * @param day the day of the month to be checked","lastModifiedDate":"2023-10-20"},{"lineNumber":78,"author":{"gitId":"Remy9926"},"content":" * @return the total number of exercises logged for a specific day of the month","lastModifiedDate":"2023-10-20"},{"lineNumber":79,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":80,"author":{"gitId":"Remy9926"},"content":" public int getNumberOfExercisesForDay(int month, int day) {","lastModifiedDate":"2023-10-19"},{"lineNumber":81,"author":{"gitId":"Remy9926"},"content":" return exerciseLog.get(month - 1).getNumberOfExercisesForDay(day);","lastModifiedDate":"2023-10-19"},{"lineNumber":82,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":85,"author":{"gitId":"Remy9926"},"content":" * Returns the Month object of the specified month.","lastModifiedDate":"2023-10-20"},{"lineNumber":86,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":87,"author":{"gitId":"Remy9926"},"content":" * @param month the month to be checked","lastModifiedDate":"2023-10-20"},{"lineNumber":88,"author":{"gitId":"Remy9926"},"content":" * @return the Month object of the specified month","lastModifiedDate":"2023-10-20"},{"lineNumber":89,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":90,"author":{"gitId":"Remy9926"},"content":" public Month getMonth(int month) {","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"Remy9926"},"content":" return exerciseLog.get(month - 1);","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":95,"author":{"gitId":"Remy9926"},"content":" * Returns the Day object of the specified day.","lastModifiedDate":"2023-10-20"},{"lineNumber":96,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":97,"author":{"gitId":"Remy9926"},"content":" * @param month the month to be checked","lastModifiedDate":"2023-10-20"},{"lineNumber":98,"author":{"gitId":"Remy9926"},"content":" * @param day the day of the month to be checked","lastModifiedDate":"2023-10-20"},{"lineNumber":99,"author":{"gitId":"Remy9926"},"content":" * @return the Day object of the specified month and day","lastModifiedDate":"2023-10-20"},{"lineNumber":100,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":101,"author":{"gitId":"Remy9926"},"content":" public Day getDay(int month, int day) {","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"Remy9926"},"content":" return exerciseLog.get(month - 1).getDay(day - 1);","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":106,"author":{"gitId":"Remy9926"},"content":" * The string representation of the exercise log, showing each month with their days and exercises","lastModifiedDate":"2023-10-20"},{"lineNumber":107,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":108,"author":{"gitId":"Remy9926"},"content":" * @return the string representation of the exercise log","lastModifiedDate":"2023-10-20"},{"lineNumber":109,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":110,"author":{"gitId":"Remy9926"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"Remy9926"},"content":" String newString \u003d \"\";","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"Remy9926"},"content":" for (Month m: exerciseLog) {","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"Remy9926"},"content":" newString +\u003d m.toString() + \"\\n\";","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"Remy9926"},"content":" return newString;","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Remy9926":117}},{"path":"src/main/java/seedu/duke/exerciselog/Month.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.exerciselog;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":"public class Month {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":" private final ArrayList\u003cDay\u003e dates;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":" private String name;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":" public Month(int days, String name) {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" dates \u003d new ArrayList\u003cDay\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" for (int i \u003d 0; i \u003c days; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":" dates.add(new Day());","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" * Adds an exercise with the specified name and calories burned to the specified day.","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" * @param day the day to add the exercise to","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" * @param exerciseName the name of the exercise","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" * @param caloriesBurned the number of calories burned by the exercise","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" * @return the string representation of the new exercise created","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" public String addExercise(int day, String exerciseName, int caloriesBurned) {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" return dates.get(day - 1).addExercise(exerciseName, caloriesBurned);","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" * Attempts to remove the specified exercise at the specified day of the month","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" * @param day the day to remove the exercise from","lastModifiedDate":"2023-10-20"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" * @param exerciseName the name of the exercise to be removed","lastModifiedDate":"2023-10-20"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" * @param caloriesBurned the number of calories burned by the exercise","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":" * @return true if the exercise was removed, false otherwise","lastModifiedDate":"2023-10-20"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":" public boolean removeExercise(int day, String exerciseName, int caloriesBurned) {","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" return dates.get(day - 1).removeExercise(exerciseName, caloriesBurned);","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"Remy9926"},"content":" * Returns the total number of exercises for the month","lastModifiedDate":"2023-10-20"},{"lineNumber":43,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":44,"author":{"gitId":"Remy9926"},"content":" * @return the total number of exercises for the month","lastModifiedDate":"2023-10-20"},{"lineNumber":45,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":46,"author":{"gitId":"Remy9926"},"content":" public int getTotalNumberOfExercises() {","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Remy9926"},"content":" int totalExercises \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Remy9926"},"content":" for (Day d: dates) {","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"Remy9926"},"content":" totalExercises +\u003d d.getNumberOfExercises();","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"Remy9926"},"content":" return totalExercises;","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":55,"author":{"gitId":"Remy9926"},"content":" * Returns a Day object of the day specified","lastModifiedDate":"2023-10-20"},{"lineNumber":56,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":57,"author":{"gitId":"Remy9926"},"content":" * @param day the number of the day to be returned","lastModifiedDate":"2023-10-20"},{"lineNumber":58,"author":{"gitId":"Remy9926"},"content":" * @return a Day object of the specified day","lastModifiedDate":"2023-10-20"},{"lineNumber":59,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":60,"author":{"gitId":"Remy9926"},"content":" public Day getDay(int day) {","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"Remy9926"},"content":" return dates.get(day - 1);","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":65,"author":{"gitId":"Remy9926"},"content":" * Returns the total number of exercises for the specified day","lastModifiedDate":"2023-10-20"},{"lineNumber":66,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":67,"author":{"gitId":"Remy9926"},"content":" * @param day the day to be checked","lastModifiedDate":"2023-10-20"},{"lineNumber":68,"author":{"gitId":"Remy9926"},"content":" * @return the total number of exercises for the specified day","lastModifiedDate":"2023-10-20"},{"lineNumber":69,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":70,"author":{"gitId":"Remy9926"},"content":" public int getNumberOfExercisesForDay(int day) {","lastModifiedDate":"2023-10-19"},{"lineNumber":71,"author":{"gitId":"Remy9926"},"content":" return dates.get(day - 1).getNumberOfExercises();","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":75,"author":{"gitId":"Remy9926"},"content":" * Returns the name of the month","lastModifiedDate":"2023-10-20"},{"lineNumber":76,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":77,"author":{"gitId":"Remy9926"},"content":" * @return the name of the month","lastModifiedDate":"2023-10-20"},{"lineNumber":78,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":79,"author":{"gitId":"Remy9926"},"content":" public String getName() {","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"Remy9926"},"content":" return name;","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":84,"author":{"gitId":"Remy9926"},"content":" * Returns the number of days in the month","lastModifiedDate":"2023-10-20"},{"lineNumber":85,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":86,"author":{"gitId":"Remy9926"},"content":" * @return the number of days in the month","lastModifiedDate":"2023-10-20"},{"lineNumber":87,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":88,"author":{"gitId":"Remy9926"},"content":" public int getNumberOfDays() {","lastModifiedDate":"2023-10-19"},{"lineNumber":89,"author":{"gitId":"Remy9926"},"content":" return dates.size();","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":93,"author":{"gitId":"Remy9926"},"content":" * Returns the string representation of the month by showing the name of the month and each of its days and","lastModifiedDate":"2023-10-20"},{"lineNumber":94,"author":{"gitId":"Remy9926"},"content":" * exercises","lastModifiedDate":"2023-10-20"},{"lineNumber":95,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":96,"author":{"gitId":"Remy9926"},"content":" * @return the string representation of the month","lastModifiedDate":"2023-10-20"},{"lineNumber":97,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":98,"author":{"gitId":"Remy9926"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"Remy9926"},"content":" String newString \u003d \"Month: \" + name.toUpperCase() + \"\\n\";","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"Remy9926"},"content":" for (int i \u003d 0; i \u003c dates.size(); i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"Remy9926"},"content":" String day \u003d Integer.toString(i + 1);","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"Remy9926"},"content":" newString +\u003d \"Day \" + day + \":\\n\";","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"Remy9926"},"content":" newString +\u003d dates.get(i).toString();","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"Remy9926"},"content":" return newString;","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Remy9926":107}},{"path":"src/main/java/seedu/duke/parser/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"import static seedu.duke.common.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"kevinz420"},"content":"import java.util.Collection;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":"import java.util.Collections;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"kevinz420"},"content":"import java.util.HashSet;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":"import java.util.Set;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.Command;","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.ExitCommand;","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.GoalCommand;","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.HelpCommand;","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.IncorrectCommand;","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.logcommands.LogCommand;","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.logcommands.DeleteLogCommand;","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.logcommands.ViewLogCommand;","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.data.exception.IllegalValueException;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"kevinz420"},"content":" * Parses user input.","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"kevinz420"},"content":"public class Parser {","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"kevinz420"},"content":" public static final Pattern PERSON_INDEX_ARGS_FORMAT \u003d Pattern.compile(\"(?\u003ctargetIndex\u003e.+)\");","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"MrOPPA1"},"content":" public static final Pattern KEYWORDS_ARGS_FORMAT \u003d Pattern.compile(\"(?\u003ckeywords\u003e\\\\S+(?:\\\\s+\\\\S+)*)\");","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"MrOPPA1"},"content":" // one or more keywords separated by whitespace","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"kevinz420"},"content":" * Used for initial separation of command word and args.","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"kevinz420"},"content":" public static final Pattern BASIC_COMMAND_FORMAT \u003d Pattern.compile(\"(?\u003ccommandWord\u003e\\\\S+)(?\u003carguments\u003e.*)\");","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"kevinz420"},"content":" * Parses user input into command for execution.","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"kevinz420"},"content":" * @param userInput full user input string","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"kevinz420"},"content":" * @return the command based on the user input","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"kevinz420"},"content":" public Command parseCommand(String userInput) {","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"kevinz420"},"content":" final Matcher matcher \u003d BASIC_COMMAND_FORMAT.matcher(userInput.trim());","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"kevinz420"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"kevinz420"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"kevinz420"},"content":" final String commandWord \u003d matcher.group(\"commandWord\");","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"kevinz420"},"content":" final String arguments \u003d matcher.group(\"arguments\");","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"kevinz420"},"content":" switch (commandWord) {","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"kevinz420"},"content":" // case AddCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"kevinz420"},"content":" // return prepareAdd(arguments);","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"kevinz420"},"content":" // case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"kevinz420"},"content":" // return prepareDelete(arguments);","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"kevinz420"},"content":" // case ClearCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"kevinz420"},"content":" // return new ClearCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"kevinz420"},"content":" // case FindCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"kevinz420"},"content":" // return prepareFind(arguments);","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"kevinz420"},"content":" // case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"kevinz420"},"content":" // return new ListCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"kevinz420"},"content":" // case ViewCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"kevinz420"},"content":" // return prepareView(arguments);","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"kevinz420"},"content":" // case ViewAllCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"kevinz420"},"content":" // return prepareViewAll(arguments);","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":77,"author":{"gitId":"Remy9926"},"content":" case LogCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"Remy9926"},"content":" return new LogCommand(Arrays.asList(arguments.trim().split(\" \")));","lastModifiedDate":"2023-10-20"},{"lineNumber":79,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"Remy9926"},"content":" case DeleteLogCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"Remy9926"},"content":" return new DeleteLogCommand(Arrays.asList(arguments.trim().split(\" \")));","lastModifiedDate":"2023-10-20"},{"lineNumber":82,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"Remy9926"},"content":" case ViewLogCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"Remy9926"},"content":" return new ViewLogCommand(Arrays.asList(arguments.trim().split(\" \")));","lastModifiedDate":"2023-10-20"},{"lineNumber":85,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"J-Y-Yan"},"content":" case GoalCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-19"},{"lineNumber":87,"author":{"gitId":"J-Y-Yan"},"content":" return new GoalCommand(userInput);","lastModifiedDate":"2023-10-19"},{"lineNumber":88,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":89,"author":{"gitId":"kevinz420"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"kevinz420"},"content":" return new ExitCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"kevinz420"},"content":" case HelpCommand.COMMAND_WORD: // Fallthrough","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":94,"author":{"gitId":"kevinz420"},"content":" default:","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"kevinz420"},"content":" return new HelpCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"kevinz420"},"content":" // /**","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"kevinz420"},"content":" // * Parses arguments in the context of the add person command.","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"kevinz420"},"content":" // *","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"kevinz420"},"content":" // * @param args full command args string","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"kevinz420"},"content":" // * @return the prepared command","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"kevinz420"},"content":" // */","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"kevinz420"},"content":" // private Command prepareAdd(String args) {","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"kevinz420"},"content":" // final Matcher matcher \u003d PERSON_DATA_ARGS_FORMAT.matcher(args.trim());","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"kevinz420"},"content":" // // Validate arg string format","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"kevinz420"},"content":" // if (!matcher.matches()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"MrOPPA1"},"content":" // return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT,","lastModifiedDate":"2023-10-20"},{"lineNumber":110,"author":{"gitId":"MrOPPA1"},"content":" // AddCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-20"},{"lineNumber":111,"author":{"gitId":"kevinz420"},"content":" // }","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"kevinz420"},"content":" // try {","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"kevinz420"},"content":" // return new AddCommand(","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"kevinz420"},"content":" // matcher.group(\"name\"),","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"kevinz420"},"content":" // matcher.group(\"phone\"),","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"kevinz420"},"content":" // isPrivatePrefixPresent(matcher.group(\"isPhonePrivate\")),","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"kevinz420"},"content":" // matcher.group(\"email\"),","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"kevinz420"},"content":" // isPrivatePrefixPresent(matcher.group(\"isEmailPrivate\")),","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":122,"author":{"gitId":"kevinz420"},"content":" // matcher.group(\"address\"),","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"kevinz420"},"content":" // isPrivatePrefixPresent(matcher.group(\"isAddressPrivate\")),","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"kevinz420"},"content":" // getTagsFromArgs(matcher.group(\"tagArguments\"))","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"kevinz420"},"content":" // );","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"kevinz420"},"content":" // } catch (IllegalValueException ive) {","lastModifiedDate":"2023-10-15"},{"lineNumber":128,"author":{"gitId":"kevinz420"},"content":" // return new IncorrectCommand(ive.getMessage());","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"kevinz420"},"content":" // }","lastModifiedDate":"2023-10-15"},{"lineNumber":130,"author":{"gitId":"kevinz420"},"content":" // }","lastModifiedDate":"2023-10-15"},{"lineNumber":131,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":132,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":133,"author":{"gitId":"MrOPPA1"},"content":" * Returns true if the private prefix is present for a contact detail in the add","lastModifiedDate":"2023-10-20"},{"lineNumber":134,"author":{"gitId":"MrOPPA1"},"content":" * command\u0027s arguments string.","lastModifiedDate":"2023-10-20"},{"lineNumber":135,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":136,"author":{"gitId":"kevinz420"},"content":" private static boolean isPrivatePrefixPresent(String matchedPrefix) {","lastModifiedDate":"2023-10-15"},{"lineNumber":137,"author":{"gitId":"kevinz420"},"content":" return matchedPrefix.equals(\"p\");","lastModifiedDate":"2023-10-15"},{"lineNumber":138,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":139,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":140,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":141,"author":{"gitId":"kevinz420"},"content":" * Extracts the new person\u0027s tags from the add command\u0027s tag arguments string.","lastModifiedDate":"2023-10-15"},{"lineNumber":142,"author":{"gitId":"kevinz420"},"content":" * Merges duplicate tag strings.","lastModifiedDate":"2023-10-15"},{"lineNumber":143,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":144,"author":{"gitId":"kevinz420"},"content":" private static Set\u003cString\u003e getTagsFromArgs(String tagArguments) throws IllegalValueException {","lastModifiedDate":"2023-10-15"},{"lineNumber":145,"author":{"gitId":"kevinz420"},"content":" // no tags","lastModifiedDate":"2023-10-15"},{"lineNumber":146,"author":{"gitId":"kevinz420"},"content":" if (tagArguments.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":147,"author":{"gitId":"kevinz420"},"content":" return Collections.emptySet();","lastModifiedDate":"2023-10-15"},{"lineNumber":148,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":149,"author":{"gitId":"kevinz420"},"content":" // replace first delimiter prefix, then split","lastModifiedDate":"2023-10-15"},{"lineNumber":150,"author":{"gitId":"kevinz420"},"content":" final Collection\u003cString\u003e tagStrings \u003d Arrays.asList(tagArguments.replaceFirst(\" t/\", \"\").split(\" t/\"));","lastModifiedDate":"2023-10-15"},{"lineNumber":151,"author":{"gitId":"kevinz420"},"content":" return new HashSet\u003c\u003e(tagStrings);","lastModifiedDate":"2023-10-15"},{"lineNumber":152,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":153,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":154,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":155,"author":{"gitId":"kevinz420"},"content":" * Parses the given arguments string as a single index number.","lastModifiedDate":"2023-10-15"},{"lineNumber":156,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":157,"author":{"gitId":"kevinz420"},"content":" * @param args arguments string to parse as index number","lastModifiedDate":"2023-10-15"},{"lineNumber":158,"author":{"gitId":"kevinz420"},"content":" * @return the parsed index number","lastModifiedDate":"2023-10-15"},{"lineNumber":159,"author":{"gitId":"MrOPPA1"},"content":" * @throws ParseException if no region of the args string could be found","lastModifiedDate":"2023-10-20"},{"lineNumber":160,"author":{"gitId":"MrOPPA1"},"content":" * for the index","lastModifiedDate":"2023-10-20"},{"lineNumber":161,"author":{"gitId":"kevinz420"},"content":" * @throws NumberFormatException the args string region is not a valid number","lastModifiedDate":"2023-10-15"},{"lineNumber":162,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":163,"author":{"gitId":"kevinz420"},"content":" private int parseArgsAsDisplayedIndex(String args) throws ParseException, NumberFormatException {","lastModifiedDate":"2023-10-15"},{"lineNumber":164,"author":{"gitId":"kevinz420"},"content":" final Matcher matcher \u003d PERSON_INDEX_ARGS_FORMAT.matcher(args.trim());","lastModifiedDate":"2023-10-15"},{"lineNumber":165,"author":{"gitId":"kevinz420"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":166,"author":{"gitId":"kevinz420"},"content":" throw new ParseException(\"Could not find index number to parse\");","lastModifiedDate":"2023-10-15"},{"lineNumber":167,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":168,"author":{"gitId":"kevinz420"},"content":" return Integer.parseInt(matcher.group(\"targetIndex\"));","lastModifiedDate":"2023-10-15"},{"lineNumber":169,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":170,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":171,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":172,"author":{"gitId":"kevinz420"},"content":" * Signals that the user input could not be parsed.","lastModifiedDate":"2023-10-15"},{"lineNumber":173,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":174,"author":{"gitId":"kevinz420"},"content":" public static class ParseException extends Exception {","lastModifiedDate":"2023-10-15"},{"lineNumber":175,"author":{"gitId":"kevinz420"},"content":" ParseException(String message) {","lastModifiedDate":"2023-10-15"},{"lineNumber":176,"author":{"gitId":"kevinz420"},"content":" super(message);","lastModifiedDate":"2023-10-15"},{"lineNumber":177,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":178,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":179,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":180,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"J-Y-Yan":3,"kevinz420":150,"MrOPPA1":8,"Remy9926":19}},{"path":"src/main/java/seedu/duke/ui/TextUi.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"import static seedu.duke.common.Messages.MESSAGE_GOODBYE;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":"import static seedu.duke.common.Messages.MESSAGE_INIT_FAILED;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":"import static seedu.duke.common.Messages.MESSAGE_PROGRAM_LAUNCH_ARGS_USAGE;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"kevinz420"},"content":"import static seedu.duke.common.Messages.MESSAGE_USING_STORAGE_FILE;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":"import static seedu.duke.common.Messages.MESSAGE_WELCOME;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":"import java.util.List;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"kevinz420"},"content":"import java.util.Optional;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"kevinz420"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.commands.CommandResult;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"J-Y-Yan"},"content":"import seedu.duke.data.Goal;","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"J-Y-Yan"},"content":"import seedu.duke.data.GoalList;","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.data.Printable;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"kevinz420"},"content":" * Text UI of the application.","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"kevinz420"},"content":"public class TextUi {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"kevinz420"},"content":" * Offset required to convert between 1-indexing and 0-indexing.","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"kevinz420"},"content":" public static final int DISPLAYED_INDEX_OFFSET \u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"kevinz420"},"content":" * A decorative prefix added to the beginning of lines printed by AddressBook","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"kevinz420"},"content":" private static final String LINE_PREFIX \u003d \"|| \";","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"kevinz420"},"content":" * A platform independent line separator.","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"kevinz420"},"content":" private static final String LS \u003d System.lineSeparator();","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"kevinz420"},"content":" private static final String DIVIDER \u003d \"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\";","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"kevinz420"},"content":" * Format of indexed list item","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"kevinz420"},"content":" private static final String MESSAGE_INDEXED_LIST_ITEM \u003d \"\\t%1$d. %2$s\";","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"kevinz420"},"content":" * Format of a comment input line. Comment lines are silently consumed when reading user input.","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"kevinz420"},"content":" private static final String COMMENT_LINE_FORMAT_REGEX \u003d \"#.*\";","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"kevinz420"},"content":" private final Scanner in;","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"kevinz420"},"content":" private final PrintStream out;","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"kevinz420"},"content":" public TextUi() {","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"kevinz420"},"content":" this(System.in, System.out);","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"kevinz420"},"content":" public TextUi(InputStream in, PrintStream out) {","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"kevinz420"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"kevinz420"},"content":" this.out \u003d out;","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"kevinz420"},"content":" * Returns true if the user input line should be ignored.","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"kevinz420"},"content":" * Input should be ignored if it is parsed as a comment, is only whitespace, or is empty.","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"kevinz420"},"content":" * @param rawInputLine full raw user input line.","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"kevinz420"},"content":" * @return true if the entire user input line should be ignored.","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"kevinz420"},"content":" private boolean shouldIgnore(String rawInputLine) {","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"kevinz420"},"content":" return rawInputLine.trim().isEmpty() || isCommentLine(rawInputLine);","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"kevinz420"},"content":" * Returns true if the user input line is a comment line.","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"kevinz420"},"content":" * @param rawInputLine full raw user input line.","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"kevinz420"},"content":" * @return true if input line is a comment.","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"kevinz420"},"content":" private boolean isCommentLine(String rawInputLine) {","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"kevinz420"},"content":" return rawInputLine.trim().matches(COMMENT_LINE_FORMAT_REGEX);","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"kevinz420"},"content":" * Prompts for the command and reads the text entered by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"kevinz420"},"content":" * Ignores empty, pure whitespace, and comment lines.","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"kevinz420"},"content":" * Echos the command back to the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"kevinz420"},"content":" * @return command (full line) entered by the user","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"kevinz420"},"content":" public String getUserCommand() {","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"kevinz420"},"content":" out.print(LINE_PREFIX + \"Enter command: \");","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"kevinz420"},"content":" String fullInputLine \u003d in.nextLine();","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"kevinz420"},"content":" // silently consume all ignored lines","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"kevinz420"},"content":" while (shouldIgnore(fullInputLine)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"kevinz420"},"content":" fullInputLine \u003d in.nextLine();","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"kevinz420"},"content":" showToUser(\"[Command entered:\" + fullInputLine + \"]\");","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"kevinz420"},"content":" return fullInputLine;","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"kevinz420"},"content":" * Generates and prints the welcome message upon the start of the application.","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"kevinz420"},"content":" * @param version current version of the application.","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"kevinz420"},"content":" * @param storageFilePath path to the storage file being used.","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"kevinz420"},"content":" public void showWelcomeMessage(String version, String storageFilePath) {","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"kevinz420"},"content":" String storageFileInfo \u003d String.format(MESSAGE_USING_STORAGE_FILE, storageFilePath);","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"kevinz420"},"content":" showToUser(","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"kevinz420"},"content":" DIVIDER,","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"kevinz420"},"content":" DIVIDER,","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"kevinz420"},"content":" MESSAGE_WELCOME,","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"kevinz420"},"content":" version,","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"kevinz420"},"content":" MESSAGE_PROGRAM_LAUNCH_ARGS_USAGE,","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"kevinz420"},"content":" storageFileInfo,","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"kevinz420"},"content":" DIVIDER);","lastModifiedDate":"2023-10-15"},{"lineNumber":122,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"kevinz420"},"content":" public void showGoodbyeMessage() {","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"kevinz420"},"content":" showToUser(MESSAGE_GOODBYE, DIVIDER, DIVIDER);","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":128,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"kevinz420"},"content":" public void showInitFailedMessage() {","lastModifiedDate":"2023-10-15"},{"lineNumber":130,"author":{"gitId":"kevinz420"},"content":" showToUser(MESSAGE_INIT_FAILED, DIVIDER, DIVIDER);","lastModifiedDate":"2023-10-15"},{"lineNumber":131,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":132,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":133,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":134,"author":{"gitId":"kevinz420"},"content":" * Shows message(s) to the user","lastModifiedDate":"2023-10-15"},{"lineNumber":135,"author":{"gitId":"Remy9926"},"content":" * @param message","lastModifiedDate":"2023-10-20"},{"lineNumber":136,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":137,"author":{"gitId":"kevinz420"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-15"},{"lineNumber":138,"author":{"gitId":"kevinz420"},"content":" for (String m : message) {","lastModifiedDate":"2023-10-15"},{"lineNumber":139,"author":{"gitId":"kevinz420"},"content":" out.println(LINE_PREFIX + m.replace(\"\\n\", LS + LINE_PREFIX));","lastModifiedDate":"2023-10-15"},{"lineNumber":140,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":141,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":142,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":143,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":144,"author":{"gitId":"kevinz420"},"content":" * Shows the result of a command execution to the user. Includes additional formatting to demarcate different","lastModifiedDate":"2023-10-15"},{"lineNumber":145,"author":{"gitId":"kevinz420"},"content":" * command execution segments.","lastModifiedDate":"2023-10-15"},{"lineNumber":146,"author":{"gitId":"Remy9926"},"content":" * @param result","lastModifiedDate":"2023-10-20"},{"lineNumber":147,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":148,"author":{"gitId":"kevinz420"},"content":" public void showResultToUser(CommandResult result) {","lastModifiedDate":"2023-10-15"},{"lineNumber":149,"author":{"gitId":"kevinz420"},"content":" final Optional\u003cList\u003c? extends Printable\u003e\u003e resultItems \u003d result.getRelevantItems();","lastModifiedDate":"2023-10-15"},{"lineNumber":150,"author":{"gitId":"kevinz420"},"content":" if (resultItems.isPresent()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":151,"author":{"gitId":"kevinz420"},"content":" showItemsListView(resultItems.get());","lastModifiedDate":"2023-10-15"},{"lineNumber":152,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":153,"author":{"gitId":"kevinz420"},"content":" showToUser(result.feedbackToUser, DIVIDER);","lastModifiedDate":"2023-10-15"},{"lineNumber":154,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":155,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":156,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":157,"author":{"gitId":"kevinz420"},"content":" * Shows a list of persons to the user, formatted as an indexed list.","lastModifiedDate":"2023-10-15"},{"lineNumber":158,"author":{"gitId":"kevinz420"},"content":" * Private contact details are hidden.","lastModifiedDate":"2023-10-15"},{"lineNumber":159,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":160,"author":{"gitId":"kevinz420"},"content":" private void showItemsListView(List\u003c? extends Printable\u003e items) {","lastModifiedDate":"2023-10-15"},{"lineNumber":161,"author":{"gitId":"kevinz420"},"content":" final List\u003cString\u003e formattedItems \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":162,"author":{"gitId":"kevinz420"},"content":" for (Printable person : items) {","lastModifiedDate":"2023-10-15"},{"lineNumber":163,"author":{"gitId":"kevinz420"},"content":" formattedItems.add(person.getAsText());","lastModifiedDate":"2023-10-15"},{"lineNumber":164,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":165,"author":{"gitId":"kevinz420"},"content":" showToUserAsIndexedList(formattedItems);","lastModifiedDate":"2023-10-15"},{"lineNumber":166,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":167,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":168,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":169,"author":{"gitId":"kevinz420"},"content":" * Shows a list of strings to the user, formatted as an indexed list.","lastModifiedDate":"2023-10-15"},{"lineNumber":170,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":171,"author":{"gitId":"kevinz420"},"content":" private void showToUserAsIndexedList(List\u003cString\u003e list) {","lastModifiedDate":"2023-10-15"},{"lineNumber":172,"author":{"gitId":"kevinz420"},"content":" showToUser(getIndexedListForViewing(list));","lastModifiedDate":"2023-10-15"},{"lineNumber":173,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":174,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":175,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":176,"author":{"gitId":"kevinz420"},"content":" * Formats a list of strings as a viewable indexed list.","lastModifiedDate":"2023-10-15"},{"lineNumber":177,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":178,"author":{"gitId":"kevinz420"},"content":" private static String getIndexedListForViewing(List\u003cString\u003e listItems) {","lastModifiedDate":"2023-10-15"},{"lineNumber":179,"author":{"gitId":"kevinz420"},"content":" final StringBuilder formatted \u003d new StringBuilder();","lastModifiedDate":"2023-10-15"},{"lineNumber":180,"author":{"gitId":"kevinz420"},"content":" int displayIndex \u003d 0 + DISPLAYED_INDEX_OFFSET;","lastModifiedDate":"2023-10-15"},{"lineNumber":181,"author":{"gitId":"kevinz420"},"content":" for (String listItem : listItems) {","lastModifiedDate":"2023-10-15"},{"lineNumber":182,"author":{"gitId":"kevinz420"},"content":" formatted.append(getIndexedListItem(displayIndex, listItem)).append(\"\\n\");","lastModifiedDate":"2023-10-15"},{"lineNumber":183,"author":{"gitId":"kevinz420"},"content":" displayIndex++;","lastModifiedDate":"2023-10-15"},{"lineNumber":184,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":185,"author":{"gitId":"kevinz420"},"content":" return formatted.toString();","lastModifiedDate":"2023-10-15"},{"lineNumber":186,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":187,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":188,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":189,"author":{"gitId":"kevinz420"},"content":" * Formats a string as a viewable indexed list item.","lastModifiedDate":"2023-10-15"},{"lineNumber":190,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":191,"author":{"gitId":"kevinz420"},"content":" * @param visibleIndex visible index for this listing","lastModifiedDate":"2023-10-15"},{"lineNumber":192,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":193,"author":{"gitId":"kevinz420"},"content":" private static String getIndexedListItem(int visibleIndex, String listItem) {","lastModifiedDate":"2023-10-15"},{"lineNumber":194,"author":{"gitId":"kevinz420"},"content":" return String.format(MESSAGE_INDEXED_LIST_ITEM, visibleIndex, listItem);","lastModifiedDate":"2023-10-15"},{"lineNumber":195,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":196,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":197,"author":{"gitId":"J-Y-Yan"},"content":" public void printNumberofGoal(int goalCount) {","lastModifiedDate":"2023-10-19"},{"lineNumber":198,"author":{"gitId":"J-Y-Yan"},"content":" System.out.println(\"You still have \" + goalCount + \" goals to accomplish. Add oil!\" );","lastModifiedDate":"2023-10-19"},{"lineNumber":199,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":200,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":201,"author":{"gitId":"J-Y-Yan"},"content":" public void printDeleteGoal(Goal deletedGoal) {","lastModifiedDate":"2023-10-19"},{"lineNumber":202,"author":{"gitId":"J-Y-Yan"},"content":" System.out.println(\"Good. I have removed this goal: \" + deletedGoal);","lastModifiedDate":"2023-10-19"},{"lineNumber":203,"author":{"gitId":"J-Y-Yan"},"content":" System.out.println(\"Remember not to give up unaccomplished goal! \");","lastModifiedDate":"2023-10-19"},{"lineNumber":204,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":205,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":206,"author":{"gitId":"J-Y-Yan"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":207,"author":{"gitId":"J-Y-Yan"},"content":" * This method is used to implement Goal commend execution, when adding a new goal","lastModifiedDate":"2023-10-19"},{"lineNumber":208,"author":{"gitId":"J-Y-Yan"},"content":" * @param goals the goals list which is under operation","lastModifiedDate":"2023-10-19"},{"lineNumber":209,"author":{"gitId":"J-Y-Yan"},"content":" * @return string contains information of generating a new goal successfully","lastModifiedDate":"2023-10-19"},{"lineNumber":210,"author":{"gitId":"J-Y-Yan"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":211,"author":{"gitId":"J-Y-Yan"},"content":" public static String addGoalSuccessMessage(GoalList goals) {","lastModifiedDate":"2023-10-19"},{"lineNumber":212,"author":{"gitId":"J-Y-Yan"},"content":" int currentNoOfGoal \u003d goals.getGoalCount();","lastModifiedDate":"2023-10-19"},{"lineNumber":213,"author":{"gitId":"J-Y-Yan"},"content":" Goal newlyAddedGoal \u003d goals.getGoal(currentNoOfGoal - 1);","lastModifiedDate":"2023-10-19"},{"lineNumber":214,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":215,"author":{"gitId":"J-Y-Yan"},"content":" return \"Nice! I have added the following goal to your goal lists: \\n\\t\" + newlyAddedGoal;","lastModifiedDate":"2023-10-19"},{"lineNumber":216,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":217,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":218,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"J-Y-Yan":23,"kevinz420":193,"Remy9926":2}},{"path":"src/test/java/seedu/duke/exerciselog/DayTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.exerciselog;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":"public class DayTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":" DayTest test \u003d new DayTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":" test.containsExercisesTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" test.getExerciseTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" test.toStringTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" public void containsExercisesTest() {","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" Day day \u003d new Day();","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":" assertFalse(day.containsExercises());","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":" day.addExercise(\"Swimming\", 0);","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" assert day.containsExercises();","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" day.removeExercise(\"Swimming\", 0);","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" assert !day.containsExercises();","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" public void getExerciseTest() {","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" Day day \u003d new Day();","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" day.addExercise(\"Basketball\", 197);","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" assertEquals(day.getExercise(1), new Exercise(\"Basketball\", 197));","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":" assert day.getNumberOfExercises() \u003d\u003d 1;","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" public void toStringTest() {","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" Day day \u003d new Day();","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" assert day.toString().equals(\"\\tNO EXCERCISES FOR THIS DAY!\\n\");","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" System.out.println(day);","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" day.addExercise(\"chicken\", 28);","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":" System.out.println(day);","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":" assert day.toString().equals(\"\\tExercise: chicken, Calories Burned: 28 Calories\\n\");","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Remy9926":38}},{"path":"src/test/java/seedu/duke/exerciselog/ExerciseTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.exerciselog;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":"import static org.junit.jupiter.api.Assertions.assertNotEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":"public class ExerciseTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":" ExerciseTest test \u003d new ExerciseTest();","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":" test.initializeExerciseTest();","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" test.initializeExerciseTest2();","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" test.testEqualsMethod();","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" test.testToStringMethod();","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":" test.setNewExerciseNameTest();","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" test.setNewCaloriesBurnedTest();","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" assert true;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" public void initializeExerciseTest() {","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" Exercise testExercise \u003d new Exercise(\"Running\", 280);","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" assertEquals(testExercise.getExerciseName(), \"Running\");","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" assertEquals(testExercise.getCaloriesBurned(), 280);","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" public void initializeExerciseTest2() {","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" Exercise testExercise \u003d new Exercise(\"Running\", 280);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" assertNotEquals(testExercise.getExerciseName(), \"running\");","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":" assertNotEquals(testExercise.getCaloriesBurned(), 2800);","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" public void testEqualsMethod() {","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" Exercise testExercise \u003d new Exercise(\"Walking\", 100);","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" assertEquals(testExercise, new Exercise(\"Walking\", 100));","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" assertNotEquals(testExercise, new Exercise(\"Swimming\", 100));","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":" public void testToStringMethod() {","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":" Exercise testExercise \u003d new Exercise(\"Golfing\", 76);","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" assertEquals(testExercise.toString(), \"Exercise: Golfing, Calories Burned: 76 Calories\\n\");","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"Remy9926"},"content":" public void setNewExerciseNameTest() {","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"Remy9926"},"content":" Exercise testExercise \u003d new Exercise(\"Floorball\", 143);","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"Remy9926"},"content":" testExercise.setExerciseName(\"hockey\");","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"Remy9926"},"content":" assertEquals(testExercise.getExerciseName(), \"hockey\");","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"Remy9926"},"content":" public void setNewCaloriesBurnedTest() {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"Remy9926"},"content":" Exercise testExercise \u003d new Exercise(\"Football\", 309);","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"Remy9926"},"content":" testExercise.setCaloriesBurned(229);","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"Remy9926"},"content":" assert testExercise.getCaloriesBurned() \u003d\u003d 229;","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Remy9926":52}},{"path":"src/test/java/seedu/duke/exerciselog/LogTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.exerciselog;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"public class LogTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":" LogTest test \u003d new LogTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":" test.getNumberOfExercisesTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":" test.addAndRemoveExerciseTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" public void getNumberOfExercisesTest() {","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" Log log \u003d new Log();","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" assert log.getNumberOfExercises() \u003d\u003d 0;","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":" assert log.getNumberOfExercisesForMonth(1) \u003d\u003d 0;","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" assert log.getNumberOfExercisesForDay(1, 21) \u003d\u003d 0;","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":" public void addAndRemoveExerciseTest() {","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" Log log \u003d new Log();","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" log.addExercise(6, 7, \"Exercise\", 8999999);","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" log.addExercise(8, 24, \"Exercise\", 112);","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" assert log.getNumberOfExercises() \u003d\u003d 2;","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" log.removeExercise(6, 7, \"Exercise\", 8999999);","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" assert log.getNumberOfExercises() \u003d\u003d 1;","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" log.removeExercise(8, 24, \"Exercise\", 112);","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" assert log.getNumberOfExercises() \u003d\u003d 0;","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Remy9926":27}},{"path":"src/test/java/seedu/duke/exerciselog/MonthTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.exerciselog;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":"public class MonthTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":" MonthTest test \u003d new MonthTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":" test.createMonthTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":" test.addExerciseTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" test.removeExerciseTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":" public void createMonthTest() {","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" Month month \u003d new Month(31, \"JAN\");","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" assert month.getName().equals(\"JAN\");","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":" assert month.getNumberOfDays() \u003d\u003d 31;","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" public void addExerciseTest() {","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" Month month \u003d new Month(28, \"FEB\");","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" month.addExercise(3, \"Volleyball\", 79);","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" assertEquals(month.getNumberOfExercisesForDay(3), 1);","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" month.addExercise(14, \"Running\", 121);","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" assert month.getNumberOfExercisesForDay(14) \u003d\u003d 1;","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" assert month.getTotalNumberOfExercises() \u003d\u003d 2;","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" public void removeExerciseTest() {","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":" Month month \u003d new Month(28, \"FEB\");","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" month.addExercise(3, \"Volleyball\", 79);","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" month.addExercise(14, \"Running\", 121);","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" month.removeExercise(3, \"Volleyball\", 79);","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" assert month.getNumberOfExercisesForDay(3) \u003d\u003d 0;","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" assert month.getTotalNumberOfExercises() \u003d\u003d 1;","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Remy9926":36}},{"path":"src/test/java/seedu/duke/parser/ParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":"import static seedu.duke.common.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"kevinz420"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.commands.Command;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.commands.ExitCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.commands.HelpCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.commands.IncorrectCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"kevinz420"},"content":"public class ParserTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"kevinz420"},"content":" private Parser parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"kevinz420"},"content":" @BeforeEach","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"kevinz420"},"content":" public void setUp() {","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"kevinz420"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"kevinz420"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"kevinz420"},"content":" public void parse_emptyInput_returnsIncorrect() {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"kevinz420"},"content":" final String[] emptyInputs \u003d { \"\", \" \", \"\\n \\n\" };","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"kevinz420"},"content":" final String resultMessage \u003d String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE);","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"kevinz420"},"content":" parseAndAssertIncorrectWithMessage(resultMessage, emptyInputs);","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"kevinz420"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"kevinz420"},"content":" public void parse_unknownCommandWord_returnsHelp() {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"kevinz420"},"content":" final String input \u003d \"unknowncommandword arguments arguments\";","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"kevinz420"},"content":" parseAndAssertCommandType(input, HelpCommand.class);","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"kevinz420"},"content":" /*","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"kevinz420"},"content":" * Tests for 0-argument commands \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"kevinz420"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"kevinz420"},"content":" public void parse_helpCommand_parsedCorrectly() {","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"kevinz420"},"content":" final String input \u003d \"help\";","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"kevinz420"},"content":" parseAndAssertCommandType(input, HelpCommand.class);","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"kevinz420"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"kevinz420"},"content":" public void parse_exitCommand_parsedCorrectly() {","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"kevinz420"},"content":" final String input \u003d \"exit\";","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"kevinz420"},"content":" parseAndAssertCommandType(input, ExitCommand.class);","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"kevinz420"},"content":" /*","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"kevinz420"},"content":" * Utility methods \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"kevinz420"},"content":" * Asserts that parsing the given inputs will return IncorrectCommand with the given feedback message.","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"kevinz420"},"content":" private void parseAndAssertIncorrectWithMessage(String feedbackMessage, String... inputs) {","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"kevinz420"},"content":" for (String input : inputs) {","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"kevinz420"},"content":" final IncorrectCommand result \u003d parseAndAssertCommandType(input, IncorrectCommand.class);","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"kevinz420"},"content":" assertEquals(result.feedbackToUser, feedbackMessage);","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"kevinz420"},"content":" * Parses input and asserts the class/type of the returned command object.","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"kevinz420"},"content":" * @param input to be parsed","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"kevinz420"},"content":" * @param expectedCommandClass expected class of returned command","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"kevinz420"},"content":" * @return the parsed command object","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"kevinz420"},"content":" private \u003cT extends Command\u003e T parseAndAssertCommandType(String input, Class\u003cT\u003e expectedCommandClass) {","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"kevinz420"},"content":" final Command result \u003d parser.parseCommand(input);","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"kevinz420"},"content":" assertTrue(result.getClass().isAssignableFrom(expectedCommandClass));","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"kevinz420"},"content":" return (T) result;","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"kevinz420":78}},{"path":"text-ui-test/UploadCommand.cmd","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"MrOPPA1"},"content":"rem customize the tag name and message here","lastModifiedDate":"2023-10-06"},{"lineNumber":2,"author":{"gitId":"MrOPPA1"},"content":"set TAG_NAME\u003dfengguangyao","lastModifiedDate":"2023-10-06"},{"lineNumber":3,"author":{"gitId":"MrOPPA1"},"content":"set MESSAGE\u003d\"Personal Job\"","lastModifiedDate":"2023-10-06"},{"lineNumber":4,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":5,"author":{"gitId":"MrOPPA1"},"content":"rem create a branch","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"MrOPPA1"},"content":"git branch %TAG_NAME%","lastModifiedDate":"2023-10-06"},{"lineNumber":7,"author":{"gitId":"MrOPPA1"},"content":"git switch %TAG_NAME%","lastModifiedDate":"2023-10-06"},{"lineNumber":8,"author":{"gitId":"MrOPPA1"},"content":"rem commit all changes","lastModifiedDate":"2023-10-06"},{"lineNumber":9,"author":{"gitId":"MrOPPA1"},"content":"git add .","lastModifiedDate":"2023-10-06"},{"lineNumber":10,"author":{"gitId":"MrOPPA1"},"content":"git commit -m %MESSAGE%","lastModifiedDate":"2023-10-06"},{"lineNumber":11,"author":{"gitId":"MrOPPA1"},"content":"git push origin %TAG_NAME%","lastModifiedDate":"2023-10-06"}],"authorContributionMap":{"MrOPPA1":11}},{"path":"tp/.idea/checkstyle-idea.xml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"J-Y-Yan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"J-Y-Yan"},"content":"\u003cproject version\u003d\"4\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"CheckStyle-IDEA\" serialisationVersion\u003d\"2\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccheckstyleVersion\u003e10.12.3\u003c/checkstyleVersion\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"J-Y-Yan"},"content":" \u003cscanScope\u003eJavaOnly\u003c/scanScope\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccopyLibs\u003etrue\u003c/copyLibs\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"thirdPartyClasspath\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"activeLocationIds\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"locations\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"J-Y-Yan"},"content":" \u003clist\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"J-Y-Yan"},"content":" \u003cConfigurationLocation id\u003d\"bundled-sun-checks\" type\u003d\"BUNDLED\" scope\u003d\"All\" description\u003d\"Sun Checks\"\u003e(bundled)\u003c/ConfigurationLocation\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"J-Y-Yan"},"content":" \u003cConfigurationLocation id\u003d\"bundled-google-checks\" type\u003d\"BUNDLED\" scope\u003d\"All\" description\u003d\"Google Checks\"\u003e(bundled)\u003c/ConfigurationLocation\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/list\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/option\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"J-Y-Yan"},"content":"\u003c/project\u003e","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"J-Y-Yan":16}},{"path":"tp/.idea/vcs.xml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"J-Y-Yan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"J-Y-Yan"},"content":"\u003cproject version\u003d\"4\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"VcsDirectoryMappings\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"J-Y-Yan"},"content":" \u003cmapping directory\u003d\"$PROJECT_DIR$/..\" vcs\u003d\"Git\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"J-Y-Yan"},"content":"\u003c/project\u003e","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"J-Y-Yan":6}},{"path":"tp/.idea/workspace.xml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"J-Y-Yan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"J-Y-Yan"},"content":"\u003cproject version\u003d\"4\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"AutoImportSettings\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"autoReloadType\" value\u003d\"SELECTIVE\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"ChangeListManager\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"J-Y-Yan"},"content":" \u003clist default\u003d\"true\" id\u003d\"46305296-6e41-460c-93f6-a188eb9d1e4d\" name\u003d\"Changes\" comment\u003d\"\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"SHOW_DIALOG\" value\u003d\"false\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"HIGHLIGHT_CONFLICTS\" value\u003d\"true\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"HIGHLIGHT_NON_ACTIVE_CHANGELIST\" value\u003d\"false\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"LAST_RESOLUTION\" value\u003d\"IGNORE\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"ExternalProjectsData\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"J-Y-Yan"},"content":" \u003cprojectState path\u003d\"$PROJECT_DIR$\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"J-Y-Yan"},"content":" \u003cProjectState /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/projectState\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"ExternalProjectsManager\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"J-Y-Yan"},"content":" \u003csystem id\u003d\"GRADLE\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"J-Y-Yan"},"content":" \u003cstate\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"J-Y-Yan"},"content":" \u003cprojects_view\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"J-Y-Yan"},"content":" \u003ctree_state\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"J-Y-Yan"},"content":" \u003cexpand /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"J-Y-Yan"},"content":" \u003cselect /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/tree_state\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/projects_view\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/state\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/system\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"FileTemplateManagerImpl\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"RECENT_TEMPLATES\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"J-Y-Yan"},"content":" \u003clist\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption value\u003d\"Class\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/list\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/option\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"Git.Settings\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"RECENT_GIT_ROOT_PATH\" value\u003d\"$PROJECT_DIR$/..\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"MarkdownSettingsMigration\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"stateVersion\" value\u003d\"1\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"ProjectColorInfo\"\u003e{","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"J-Y-Yan"},"content":" \u0026quot;customColor\u0026quot;: \u0026quot;\u0026quot;,","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"J-Y-Yan"},"content":" \u0026quot;associatedIndex\u0026quot;: 3","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"J-Y-Yan"},"content":"}\u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":47,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"ProjectId\" id\u003d\"2Wv9jKq5KpsiP8JQSMJuBqpmuB1\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":48,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"ProjectLevelVcsManager\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":49,"author":{"gitId":"J-Y-Yan"},"content":" \u003cConfirmationsSetting value\u003d\"1\" id\u003d\"Add\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"ProjectViewState\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":52,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"hideEmptyMiddlePackages\" value\u003d\"true\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"showLibraryContents\" value\u003d\"true\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"PropertiesComponent\"\u003e\u003c![CDATA[{","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"J-Y-Yan"},"content":" \"keyToString\": {","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"J-Y-Yan"},"content":" \"RunOnceActivity.OpenProjectViewOnStart\": \"true\",","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"J-Y-Yan"},"content":" \"RunOnceActivity.ShowReadmeOnStart\": \"true\",","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"J-Y-Yan"},"content":" \"WebServerToolWindowFactoryState\": \"false\",","lastModifiedDate":"2023-10-19"},{"lineNumber":60,"author":{"gitId":"J-Y-Yan"},"content":" \"git-widget-placeholder\": \"goal\",","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"J-Y-Yan"},"content":" \"last_opened_file_path\": \"D:/Programming/CS2113/Team Project\",","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"J-Y-Yan"},"content":" \"node.js.detected.package.eslint\": \"true\",","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"J-Y-Yan"},"content":" \"node.js.detected.package.tslint\": \"true\",","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"J-Y-Yan"},"content":" \"node.js.selected.package.eslint\": \"(autodetect)\",","lastModifiedDate":"2023-10-19"},{"lineNumber":65,"author":{"gitId":"J-Y-Yan"},"content":" \"node.js.selected.package.tslint\": \"(autodetect)\",","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"J-Y-Yan"},"content":" \"nodejs_package_manager_path\": \"npm\",","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"J-Y-Yan"},"content":" \"vue.rearranger.settings.migration\": \"true\"","lastModifiedDate":"2023-10-19"},{"lineNumber":68,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":69,"author":{"gitId":"J-Y-Yan"},"content":"}]]\u003e\u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":70,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"SpellCheckerSettings\" RuntimeDictionaries\u003d\"0\" Folders\u003d\"0\" CustomDictionaries\u003d\"0\" DefaultDictionary\u003d\"application-level\" UseSingleDictionary\u003d\"true\" transferred\u003d\"true\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":71,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"TaskManager\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":72,"author":{"gitId":"J-Y-Yan"},"content":" \u003ctask active\u003d\"true\" id\u003d\"Default\" summary\u003d\"Default task\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":73,"author":{"gitId":"J-Y-Yan"},"content":" \u003cchangelist id\u003d\"46305296-6e41-460c-93f6-a188eb9d1e4d\" name\u003d\"Changes\" comment\u003d\"\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":74,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccreated\u003e1697602324590\u003c/created\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":75,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"number\" value\u003d\"Default\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":76,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"presentableId\" value\u003d\"Default\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":77,"author":{"gitId":"J-Y-Yan"},"content":" \u003cupdated\u003e1697602324590\u003c/updated\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":78,"author":{"gitId":"J-Y-Yan"},"content":" \u003cworkItem from\u003d\"1697602329602\" duration\u003d\"41000\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":79,"author":{"gitId":"J-Y-Yan"},"content":" \u003cworkItem from\u003d\"1697602381500\" duration\u003d\"17642000\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":80,"author":{"gitId":"J-Y-Yan"},"content":" \u003cworkItem from\u003d\"1697648699355\" duration\u003d\"26000\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":81,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/task\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":82,"author":{"gitId":"J-Y-Yan"},"content":" \u003cservers /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":83,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":84,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"TypeScriptGeneratedFilesManager\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":85,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"version\" value\u003d\"3\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":86,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":87,"author":{"gitId":"J-Y-Yan"},"content":"\u003c/project\u003e","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"J-Y-Yan":87}}] +[{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName.set(\"duke\")","lastModifiedDate":"2023-09-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"Remy9926"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-20"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"Remy9926":1,"-":46}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Portfolio ","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":"--------|:-----------:|:--------------------------------------:|:---------:","lastModifiedDate":"2023-10-06"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Kevin Zhang | [Github](https://github.com/kevinz420) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":"![](https://picsum.photos/100) | Ethan Huang | [Github](https://github.com/remy9926) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"-"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Ron John | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | John Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"kevinz420":2,"Remy9926":1,"-":6}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# Developer Guide","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Acknowledgements","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"{list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well}","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"## Design \u0026 implementation","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":"### Update Exercises from Log feature","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":"The proposed feature is to allow users to update exercises from the ExerciseLog class to allow for full CRUD functionality of the class. Currently, users are able to create exercises and log them as well as view all the exercises that they have created, but in the case of a typo, they are unable to update the log to accomodate for the user error. To improve the user experience, this update feature has been proposed to allow users to have a better experience using the app.","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":"The update feature will be implemented by allowing users to select the task that they want to edit by specifying the month and day that they logged this exercise at, as well as the corresponding exercise name and the number of calories that the exercise has burned. This is because each exercise is stored within Day objects, and in order to check if two exercises are equivalent, we check both the exerciseName and caloriesBurned fields. Thus, these parameters will need to be specified by the user in order to update the exercise log.","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":"Below is an example of how this feature will work:","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":"Step 1: Upon starting the app, the ExerciseLog class is initialized and a log is created for the user to log their exercises.","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":"\u003cimg width\u003d\"661\" alt\u003d\"Screenshot 2023-10-22 at 22 21 04\" src\u003d\"https://github.com/Remy9926/tp/assets/95456114/933b3636-eba7-442b-bcf2-aec22ef49dba\"\u003e","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":"Step 2: The user calls the log command with the specified parameters to add a new exercise to the list. However, the user notices that they made a typo and want to change the details of the exercise that they just logged.","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":"\u003cimg width\u003d\"682\" alt\u003d\"Screenshot 2023-10-22 at 22 23 59\" src\u003d\"https://github.com/Remy9926/tp/assets/95456114/318cd321-6516-4163-a4ce-4a9e5d5edf7b\"\u003e","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":"Step 3: The user calls the update command with the information of the old exercise as well as the new information that the user wants to update with. With this, the update is done.","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":"\u003cimg width\u003d\"652\" alt\u003d\"Screenshot 2023-10-22 at 22 25 09\" src\u003d\"https://github.com/Remy9926/tp/assets/95456114/d07d5570-11fc-426c-877d-feb31a338f0a\"\u003e","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":"### Target user profile","lastModifiedDate":"2020-05-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":"{Describe the target user profile}","lastModifiedDate":"2020-05-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":"### Value proposition","lastModifiedDate":"2020-05-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":"{Describe the value proposition: what problem does it solve?}","lastModifiedDate":"2020-05-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":"|Version| As a ... | I want to ... | So that I can ...|","lastModifiedDate":"2020-05-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":"|--------|----------|---------------|------------------|","lastModifiedDate":"2020-05-24"},{"lineNumber":42,"author":{"gitId":"-"},"content":"|v1.0|new user|see usage instructions|refer to them when I forget how to use the application|","lastModifiedDate":"2020-05-24"},{"lineNumber":43,"author":{"gitId":"-"},"content":"|v2.0|user|find a to-do item by name|locate a to-do without having to go through the entire list|","lastModifiedDate":"2020-05-24"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":"{Give non-functional requirements}","lastModifiedDate":"2020-05-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":51,"author":{"gitId":"-"},"content":"* *glossary item* - Definition","lastModifiedDate":"2020-05-24"},{"lineNumber":52,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":"## Instructions for manual testing","lastModifiedDate":"2020-05-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":55,"author":{"gitId":"-"},"content":"{Give instructions on how to do a manual product testing e.g., how to load sample data to be used for testing}","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"Remy9926":18,"-":37}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# Duke","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"-"},"content":"{Give product intro here}","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"Useful links:","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"* [User Guide](UserGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"* [Developer Guide](DeveloperGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"* [About Us](AboutUs.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":10,"author":{"gitId":"MrOPPA1"},"content":"test","lastModifiedDate":"2023-10-06"}],"authorContributionMap":{"MrOPPA1":2,"-":8}},{"path":"src/main/java/seedu/duke/Duke.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.duke;","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.commands.Command;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.commands.CommandResult;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.commands.ExitCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"J-Y-Yan"},"content":"import seedu.duke.data.GoalList;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.parser.Parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.exerciselog.Log;","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.ui.TextUi;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":" * Entry point of the Address Book application.","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"kevinz420"},"content":" * Initializes the application and starts the interaction with the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":16,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-24"},{"lineNumber":18,"author":{"gitId":"kevinz420"},"content":" * Version info of the program.","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-24"},{"lineNumber":20,"author":{"gitId":"kevinz420"},"content":" public static final String VERSION \u003d \"AddressBook Level 2 - Version 1.0\";","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"J-Y-Yan"},"content":" public static GoalList goals \u003d new GoalList();","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" public static Log exerciseLog \u003d new Log();","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" private TextUi ui;","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"kevinz420"},"content":" // private StorageFile storage;","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"kevinz420"},"content":" public static void main(String... launchArgs) {","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"kevinz420"},"content":" new Duke().run(launchArgs);","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"J-Y-Yan"},"content":" * @param launchArgs","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"kevinz420"},"content":" * Runs the program until termination.","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"kevinz420"},"content":" public void run(String[] launchArgs) {","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"kevinz420"},"content":" start(launchArgs);","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"kevinz420"},"content":" runCommandLoopUntilExitCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"kevinz420"},"content":" exit();","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"MrOPPA1"},"content":" * Sets up the required objects, loads up the data from the storage file, and","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"MrOPPA1"},"content":" * prints the welcome message.","lastModifiedDate":"2023-10-20"},{"lineNumber":43,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"kevinz420"},"content":" * @param launchArgs arguments supplied by the user at program launch","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"kevinz420"},"content":" private void start(String[] launchArgs) {","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"kevinz420"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"kevinz420"},"content":" this.ui \u003d new TextUi();","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"kevinz420"},"content":" // this.storage \u003d initializeStorage(launchArgs);","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"kevinz420"},"content":" ui.showWelcomeMessage(VERSION, \"storage.getPath()\");","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"kevinz420"},"content":" } catch (Exception e) { // TODO: change to specific storage exceptions later","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"kevinz420"},"content":" ui.showInitFailedMessage();","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"kevinz420"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"kevinz420"},"content":" * Prints the Goodbye message and exits.","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"kevinz420"},"content":" private void exit() {","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"kevinz420"},"content":" ui.showGoodbyeMessage();","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"kevinz420"},"content":" System.exit(0);","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"MrOPPA1"},"content":" * Reads the user command and executes it, until the user issues the exit","lastModifiedDate":"2023-10-20"},{"lineNumber":68,"author":{"gitId":"MrOPPA1"},"content":" * command.","lastModifiedDate":"2023-10-20"},{"lineNumber":69,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"kevinz420"},"content":" private void runCommandLoopUntilExitCommand() {","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"kevinz420"},"content":" Command command;","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"kevinz420"},"content":" do {","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"kevinz420"},"content":" String userCommandText \u003d ui.getUserCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"kevinz420"},"content":" command \u003d new Parser().parseCommand(userCommandText);","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"kevinz420"},"content":" CommandResult result \u003d executeCommand(command);","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"kevinz420"},"content":" ui.showResultToUser(result);","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":78,"author":{"gitId":"kevinz420"},"content":" } while (!ExitCommand.isExit(command));","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":80,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"kevinz420"},"content":" * Executes the command and returns the result.","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"kevinz420"},"content":" * @param command user command","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"kevinz420"},"content":" * @return result of the command","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"kevinz420"},"content":" private CommandResult executeCommand(Command command) {","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"kevinz420"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"kevinz420"},"content":" CommandResult result \u003d command.execute();","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"kevinz420"},"content":" // storage.save(addressBook);","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"kevinz420"},"content":" return result;","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"kevinz420"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"kevinz420"},"content":" ui.showToUser(e.getMessage());","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"kevinz420"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"kevinz420"},"content":" // /**","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"MrOPPA1"},"content":" // * Creates the StorageFile object based on the user specified path (if any) or","lastModifiedDate":"2023-10-20"},{"lineNumber":100,"author":{"gitId":"MrOPPA1"},"content":" // the default storage path.","lastModifiedDate":"2023-10-20"},{"lineNumber":101,"author":{"gitId":"kevinz420"},"content":" // * @param launchArgs arguments supplied by the user at program launch","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"MrOPPA1"},"content":" // * @throws InvalidStorageFilePathException if the target file path is","lastModifiedDate":"2023-10-20"},{"lineNumber":103,"author":{"gitId":"MrOPPA1"},"content":" // incorrect.","lastModifiedDate":"2023-10-20"},{"lineNumber":104,"author":{"gitId":"kevinz420"},"content":" // */","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"MrOPPA1"},"content":" // private StorageFile initializeStorage(String[] launchArgs) throws","lastModifiedDate":"2023-10-20"},{"lineNumber":106,"author":{"gitId":"MrOPPA1"},"content":" // InvalidStorageFilePathException {","lastModifiedDate":"2023-10-20"},{"lineNumber":107,"author":{"gitId":"kevinz420"},"content":" // boolean isStorageFileSpecifiedByUser \u003d launchArgs.length \u003e 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"MrOPPA1"},"content":" // return isStorageFileSpecifiedByUser ? new StorageFile(launchArgs[0]) : new","lastModifiedDate":"2023-10-20"},{"lineNumber":109,"author":{"gitId":"MrOPPA1"},"content":" // StorageFile();","lastModifiedDate":"2023-10-20"},{"lineNumber":110,"author":{"gitId":"kevinz420"},"content":" // }","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"J-Y-Yan":4,"kevinz420":79,"MrOPPA1":12,"Remy9926":7,"-":9}},{"path":"src/main/java/seedu/duke/commands/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":" * Represents an executable command.","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"kevinz420"},"content":"public class Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"J-Y-Yan"},"content":" String userCommand;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":" public Command() {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"J-Y-Yan"},"content":" public Command(String cmd){","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"J-Y-Yan"},"content":" this.userCommand \u003d cmd;","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"MrOPPA1"},"content":" public CommandResult execute() throws Exception {","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"kevinz420"},"content":" throw new UnsupportedOperationException(\"This method is to be implemented by child classes\");","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"J-Y-Yan":8,"kevinz420":12,"MrOPPA1":1}},{"path":"src/main/java/seedu/duke/commands/CommandResult.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"import java.util.List;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":"import java.util.Optional;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.data.Printable;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":" * Represents the result of a command execution.","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":"public class CommandResult {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"kevinz420"},"content":" * The feedback message to be shown to the user. Contains a description of the execution result","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"kevinz420"},"content":" public final String feedbackToUser;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"kevinz420"},"content":" * The list of objects that was produced by the command","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"kevinz420"},"content":" private final List\u003c? extends Printable\u003e relevantItems;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"kevinz420"},"content":" public CommandResult(String feedbackToUser) {","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"kevinz420"},"content":" this.feedbackToUser \u003d feedbackToUser;","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"kevinz420"},"content":" relevantItems \u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"kevinz420"},"content":" public CommandResult(String feedbackToUser, List\u003c? extends Printable\u003e relevantItems) {","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"kevinz420"},"content":" this.feedbackToUser \u003d feedbackToUser;","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"kevinz420"},"content":" this.relevantItems \u003d relevantItems;","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"kevinz420"},"content":" * Returns a list of objects relevant to the command result, if any.","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"J-Y-Yan"},"content":" * @return relevant items","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"kevinz420"},"content":" public Optional\u003cList\u003c? extends Printable\u003e\u003e getRelevantItems() {","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"kevinz420"},"content":" return Optional.ofNullable(relevantItems);","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"J-Y-Yan":1,"kevinz420":40}},{"path":"src/main/java/seedu/duke/commands/ExitCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":" * Terminates the program.","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"kevinz420"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"kevinz420"},"content":" public static final String COMMAND_WORD \u003d \"exit\";","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Exits the program.\\n\"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":" public static final String MESSAGE_EXIT_ACKNOWEDGEMENT \u003d \"Exiting FITNUS as requested ...\";","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"kevinz420"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"kevinz420"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"kevinz420"},"content":" return new CommandResult(MESSAGE_EXIT_ACKNOWEDGEMENT);","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"kevinz420"},"content":" public static boolean isExit(Command command) {","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"kevinz420"},"content":" return command instanceof ExitCommand; // instanceof returns false if it is null","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"kevinz420":22}},{"path":"src/main/java/seedu/duke/commands/GoalCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"J-Y-Yan"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"J-Y-Yan"},"content":"import seedu.duke.Duke;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"J-Y-Yan"},"content":"import seedu.duke.ui.TextUi;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"J-Y-Yan"},"content":"import seedu.duke.data.exception.IncorrectFormatException;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"J-Y-Yan"},"content":"public class GoalCommand extends Command {","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"J-Y-Yan"},"content":" public static final String COMMAND_WORD \u003d \"set\";","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"J-Y-Yan"},"content":" public GoalCommand(String cmd){","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"J-Y-Yan"},"content":" super(cmd);","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"J-Y-Yan"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"J-Y-Yan"},"content":" try{","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"J-Y-Yan"},"content":" Duke.goals.addGoal(this.userCommand);","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"J-Y-Yan"},"content":" String addGoalResultMsg \u003d TextUi.addGoalSuccessMessage(Duke.goals);","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"J-Y-Yan"},"content":" return new CommandResult(addGoalResultMsg);","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"J-Y-Yan"},"content":" }catch(IncorrectFormatException ife){","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"J-Y-Yan"},"content":" ife.handleException();","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"J-Y-Yan"},"content":" }catch(NumberFormatException nfe){","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"J-Y-Yan"},"content":" System.out.println(\"Please input a valid number for calories.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"J-Y-Yan"},"content":" return null;","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"J-Y-Yan"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"J-Y-Yan":31}},{"path":"src/main/java/seedu/duke/commands/HelpCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":" * Shows help instructions.","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":" public static final String COMMAND_WORD \u003d \"help\";","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Shows program usage instructions.\\n\"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":" + \"Example: \" + COMMAND_WORD;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"kevinz420"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"kevinz420"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"kevinz420"},"content":" return new CommandResult(","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"kevinz420"},"content":" HelpCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"kevinz420"},"content":" // + \"\\n\" + DeleteCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"kevinz420"},"content":" // + \"\\n\" + ClearCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"kevinz420"},"content":" // + \"\\n\" + FindCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"kevinz420"},"content":" // + \"\\n\" + ListCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"kevinz420"},"content":" // + \"\\n\" + ViewCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"kevinz420"},"content":" // + \"\\n\" + ViewAllCommand.MESSAGE_USAGE","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"kevinz420"},"content":" );","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"kevinz420":26}},{"path":"src/main/java/seedu/duke/commands/IncorrectCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":" * Represents an incorrect command. Upon execution, produces some feedback to the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":"public class IncorrectCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":" public final String feedbackToUser;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":" public IncorrectCommand(String feedbackToUser) {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":" this.feedbackToUser \u003d feedbackToUser;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"kevinz420"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"kevinz420"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"kevinz420"},"content":" return new CommandResult(feedbackToUser);","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"kevinz420":20}},{"path":"src/main/java/seedu/duke/commands/logcommands/DeleteLogCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.commands.logcommands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"import java.util.List;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.CommandResult;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.Duke;","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":"public class DeleteLogCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" public String feedbackToUser;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" private List\u003cString\u003e exerciseDetails;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" public DeleteLogCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" super();","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" public DeleteLogCommand(List\u003cString\u003e exerciseDetails) {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" super();","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" this.exerciseDetails \u003d exerciseDetails;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" * Extracts the details of the delete command and deletes the specified exercise.","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" * @return CommandResult that tells the user whether an exercise was successfully removed.","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":" int month \u003d Integer.parseInt(exerciseDetails.get(0));","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" int day \u003d Integer.parseInt(exerciseDetails.get(1));","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" String exerciseName \u003d exerciseDetails.get(2);","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" int caloriesBurned \u003d Integer.parseInt(exerciseDetails.get(3));","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" feedbackToUser \u003d Duke.exerciseLog.removeExercise(month, day, exerciseName, caloriesBurned) ?","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":" \"Successfully removed exercise!\" :","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":" \"Could not find the specified exercise!\";","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" return new CommandResult(feedbackToUser);","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"Remy9926":40}},{"path":"src/main/java/seedu/duke/commands/logcommands/LogCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.commands.logcommands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"import java.util.List;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.CommandResult;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.Duke;","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":"public class LogCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" public static final String COMMAND_WORD \u003d \"log\";","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" public String feedbackToUser;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" private List\u003cString\u003e exerciseDetails;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" public LogCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" super();","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":" feedbackToUser \u003d \"Successfully added exercise to log:\\n\\t\";","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" public LogCommand(List\u003cString\u003e exerciseDetails) {","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" super();","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" feedbackToUser \u003d \"Successfully added exercise to log:\\n\\t\";","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" this.exerciseDetails \u003d exerciseDetails;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" * Extracts the details of the log command and logs the exercise with its specific details.","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" * @return CommandResult telling the user that the exercise was successfully added along with the exercise details.","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" int month \u003d Integer.parseInt(exerciseDetails.get(0));","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" int day \u003d Integer.parseInt(exerciseDetails.get(1));","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" String exerciseName \u003d exerciseDetails.get(2);","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" int caloriesBurned \u003d Integer.parseInt(exerciseDetails.get(3));","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":" String exerciseDescription \u003d Duke.exerciseLog.addExercise(month, day, exerciseName, caloriesBurned);","lastModifiedDate":"2023-10-20"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" return new CommandResult(feedbackToUser + exerciseDescription);","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"Remy9926":40}},{"path":"src/main/java/seedu/duke/commands/logcommands/ViewLogCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.commands.logcommands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"import java.util.List;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.CommandResult;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.Duke;","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":"enum ViewType {","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" TOTALEXERCISES,","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" TOTALEXERCISESMONTH,","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":" TOTALEXERCISESDAY;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":"public class ViewLogCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":" public static final String COMMAND_WORD \u003d \"view\";","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" private ViewType view;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" private int month;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" private int day;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" public ViewLogCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" super();","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":" * Assigns the view attribute a specific enum based on the scope at which the user wants to view the exercise log.","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":" * @param viewArgs the details of the scope at which the user wants to view the exercise log.","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" public ViewLogCommand(List\u003cString\u003e viewArgs) {","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" super();","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" switch (viewArgs.get(0)) {","lastModifiedDate":"2023-10-20"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" case \"all\":","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":" view \u003d ViewType.TOTALEXERCISES;","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":" case \"month\":","lastModifiedDate":"2023-10-20"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" view \u003d ViewType.TOTALEXERCISESMONTH;","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"Remy9926"},"content":" month \u003d Integer.parseInt(viewArgs.get(1));","lastModifiedDate":"2023-10-20"},{"lineNumber":40,"author":{"gitId":"Remy9926"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"Remy9926"},"content":" case \"day\":","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"Remy9926"},"content":" view \u003d ViewType.TOTALEXERCISESDAY;","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"Remy9926"},"content":" month \u003d Integer.parseInt(viewArgs.get(1));","lastModifiedDate":"2023-10-20"},{"lineNumber":44,"author":{"gitId":"Remy9926"},"content":" day \u003d Integer.parseInt(viewArgs.get(2));","lastModifiedDate":"2023-10-20"},{"lineNumber":45,"author":{"gitId":"Remy9926"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"Remy9926"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"Remy9926"},"content":" System.out.println(\"No ViewType specified\");","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":52,"author":{"gitId":"Remy9926"},"content":" * A different message is returned depending on the scope at which a user wants to view their exercises.","lastModifiedDate":"2023-10-20"},{"lineNumber":53,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"Remy9926"},"content":" * @return CommandResult telling the user their total number of exercises in total, for a month, or for a day.","lastModifiedDate":"2023-10-20"},{"lineNumber":55,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":56,"author":{"gitId":"Remy9926"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-20"},{"lineNumber":57,"author":{"gitId":"Remy9926"},"content":" String numberOfExercises;","lastModifiedDate":"2023-10-20"},{"lineNumber":58,"author":{"gitId":"Remy9926"},"content":" switch (view) {","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"Remy9926"},"content":" case TOTALEXERCISES:","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"Remy9926"},"content":" numberOfExercises \u003d Integer.toString(Duke.exerciseLog.getNumberOfExercises());","lastModifiedDate":"2023-10-20"},{"lineNumber":61,"author":{"gitId":"Remy9926"},"content":" return new CommandResult(\"Here are the total number of exercises you have logged: \" +","lastModifiedDate":"2023-10-20"},{"lineNumber":62,"author":{"gitId":"Remy9926"},"content":" numberOfExercises + \"\\n\");","lastModifiedDate":"2023-10-20"},{"lineNumber":63,"author":{"gitId":"Remy9926"},"content":" case TOTALEXERCISESMONTH:","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"Remy9926"},"content":" numberOfExercises \u003d Integer.toString(Duke.exerciseLog.getNumberOfExercisesForMonth(month));","lastModifiedDate":"2023-10-20"},{"lineNumber":65,"author":{"gitId":"Remy9926"},"content":" return new CommandResult(\"Here are the total number of exercises for that month: \" +","lastModifiedDate":"2023-10-20"},{"lineNumber":66,"author":{"gitId":"Remy9926"},"content":" numberOfExercises + \"\\n\");","lastModifiedDate":"2023-10-20"},{"lineNumber":67,"author":{"gitId":"Remy9926"},"content":" case TOTALEXERCISESDAY:","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"Remy9926"},"content":" numberOfExercises \u003d Integer.toString(Duke.exerciseLog.getNumberOfExercisesForDay(month, day));","lastModifiedDate":"2023-10-20"},{"lineNumber":69,"author":{"gitId":"Remy9926"},"content":" return new CommandResult(\"Here are the total number of exercises for that day: \" +","lastModifiedDate":"2023-10-20"},{"lineNumber":70,"author":{"gitId":"Remy9926"},"content":" numberOfExercises + \"\\n\");","lastModifiedDate":"2023-10-20"},{"lineNumber":71,"author":{"gitId":"Remy9926"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"Remy9926"},"content":" return new CommandResult(\"Invalid exercise search type\");","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"Remy9926":75}},{"path":"src/main/java/seedu/duke/commands/meal/AddCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"MrOPPA1"},"content":"package seedu.duke.commands.meal;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"MrOPPA1"},"content":"import seedu.duke.commands.CommandResult;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"MrOPPA1"},"content":"import seedu.duke.data.meal.Meal;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"MrOPPA1"},"content":"public class AddCommand extends MealCommand {","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"MrOPPA1"},"content":" public static final String COMMAND_WORD \u003d \"meal add\";","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"MrOPPA1"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD + \": Add a meal and record the amount of calories.\\n\"","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"MrOPPA1"},"content":" + \"Example: \" + COMMAND_WORD + \" potato 15\";","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" private static final int validArgumentAmount \u003d 2;","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"MrOPPA1"},"content":" private final String name;","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"MrOPPA1"},"content":" private final int calories;","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"MrOPPA1"},"content":" public AddCommand(String[] arguments) throws Exception {","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"MrOPPA1"},"content":" if (arguments \u003d\u003d null || arguments.length !\u003d 2) {","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"MrOPPA1"},"content":" throw new Exception(\"Incorrect amount of the arguments.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"MrOPPA1"},"content":" name \u003d arguments[0];","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"MrOPPA1"},"content":" calories \u003d Integer.parseInt(arguments[1]);","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"MrOPPA1"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"MrOPPA1"},"content":" public CommandResult execute() throws Exception {","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"MrOPPA1"},"content":" meals.add(new Meal(name, calories));","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"MrOPPA1"},"content":" return new CommandResult(\"Successfully add meal \u0027\" + name + \"\u0027(\" + calories + \"\u0027 calories)!\");","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"MrOPPA1"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"MrOPPA1":26,"Remy9926":1}},{"path":"src/main/java/seedu/duke/commands/meal/MealCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"MrOPPA1"},"content":"package seedu.duke.commands.meal;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"MrOPPA1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"MrOPPA1"},"content":"import seedu.duke.commands.Command;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"MrOPPA1"},"content":"import seedu.duke.data.meal.Meal;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"MrOPPA1"},"content":"public class MealCommand extends Command {","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"MrOPPA1"},"content":" protected static ArrayList\u003cMeal\u003e meals;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" public static void setMeals(ArrayList\u003cMeal\u003e meals) {","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"MrOPPA1"},"content":" MealCommand.meals \u003d meals;","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" protected void checkArgument(String[] arguments, int validArgumentAmount) throws Exception {","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"MrOPPA1"},"content":" if (arguments \u003d\u003d null || arguments.length !\u003d 2) {","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"MrOPPA1"},"content":" throw new Exception(\"Incorrect amount of the arguments.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"MrOPPA1"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"MrOPPA1":18,"Remy9926":2}},{"path":"src/main/java/seedu/duke/common/Messages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.common;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":" * Container for user visible messages.","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"kevinz420"},"content":"public class Messages {","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":" public static final String MESSAGE_GOODBYE \u003d \"Good bye!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"kevinz420"},"content":" public static final String MESSAGE_INIT_FAILED \u003d \"Failed to initialise address book application. Exiting...\";","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":" public static final String MESSAGE_PROGRAM_LAUNCH_ARGS_USAGE \u003d \"Launch command format: \"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":" + \"java seedu.duke.Duke [STORAGE_FILE_PATH]\";","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":" public static final String MESSAGE_WELCOME \u003d \"Welcome to your FITNUS journey!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":" public static final String MESSAGE_USING_STORAGE_FILE \u003d \"Using storage file : %1$s\";","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"kevinz420"},"content":" public static final String MESSAGE_INVALID_COMMAND_FORMAT \u003d \"Invalid command format! \\n%1$s\";","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"kevinz420":14}},{"path":"src/main/java/seedu/duke/data/Date.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"MrOPPA1"},"content":"package seedu.duke.data;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"MrOPPA1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"MrOPPA1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"MrOPPA1"},"content":"import java.util.Locale;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"MrOPPA1"},"content":"// import com.google.gson.annotations.SerializedName;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"MrOPPA1"},"content":"/**","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"MrOPPA1"},"content":" * Customized class for showing date and parsing supported string to date.","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"MrOPPA1"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"MrOPPA1"},"content":"public class Date {","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"MrOPPA1"},"content":" private static DateTimeFormatter[] formatters \u003d new DateTimeFormatter[] {","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"MrOPPA1"},"content":" DateTimeFormatter.ofPattern(\"yyyy-M-d\"),","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"MrOPPA1"},"content":" DateTimeFormatter.ofPattern(\"M-d-yyyy\"),","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"MrOPPA1"},"content":" DateTimeFormatter.ofPattern(\"MMM d, yyyy\", Locale.ENGLISH), };","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"MrOPPA1"},"content":" private static DateTimeFormatter toStringFormatter \u003d formatters[formatters.length - 1];","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" public String standardString;","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" transient LocalDate date;","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" // @SerializedName(\"rawData\")","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"MrOPPA1"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" * Create a new date.","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"MrOPPA1"},"content":" *","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"MrOPPA1"},"content":" * @param rawData A String that needs to comply with a supported format and","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"MrOPPA1"},"content":" * indicates a correct date that will be recorded by this Date","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"MrOPPA1"},"content":" * instance.","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"MrOPPA1"},"content":" * @throws TipsException Any excption will be throw in this type, which contains","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"MrOPPA1"},"content":" * information about this exception and the possible","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"MrOPPA1"},"content":" * solution.","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"MrOPPA1"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" public Date(String rawData) throws Exception {","lastModifiedDate":"2023-10-20"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" setRawData(rawData);","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"MrOPPA1"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" * Modifying an existing date with a rawData String.","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"MrOPPA1"},"content":" *","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"MrOPPA1"},"content":" * @param rawData A String that needs to comply with a supported format and","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"MrOPPA1"},"content":" * indicates a correct date that will be recorded by this Date","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"MrOPPA1"},"content":" * instance.","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"MrOPPA1"},"content":" * @throws TipsException Any excption will be throw in this type, which contains","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"MrOPPA1"},"content":" * information about this exception and the possible","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"MrOPPA1"},"content":" * solution.","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"MrOPPA1"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":47,"author":{"gitId":"Remy9926"},"content":" public void setRawData(String rawData) throws Exception {","lastModifiedDate":"2023-10-20"},{"lineNumber":48,"author":{"gitId":"Remy9926"},"content":" for (DateTimeFormatter formatter : formatters) {","lastModifiedDate":"2023-10-20"},{"lineNumber":49,"author":{"gitId":"Remy9926"},"content":" try {","lastModifiedDate":"2023-10-20"},{"lineNumber":50,"author":{"gitId":"Remy9926"},"content":" date \u003d LocalDate.parse(rawData, formatter);","lastModifiedDate":"2023-10-20"},{"lineNumber":51,"author":{"gitId":"Remy9926"},"content":" standardString \u003d this.toString();","lastModifiedDate":"2023-10-20"},{"lineNumber":52,"author":{"gitId":"Remy9926"},"content":" return;","lastModifiedDate":"2023-10-20"},{"lineNumber":53,"author":{"gitId":"Remy9926"},"content":" } catch (Exception exception) {","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"Remy9926"},"content":" continue;","lastModifiedDate":"2023-10-20"},{"lineNumber":55,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":56,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":57,"author":{"gitId":"Remy9926"},"content":" throw new Exception(\"Unable to parse date time!\");","lastModifiedDate":"2023-10-20"},{"lineNumber":58,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":60,"author":{"gitId":"MrOPPA1"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"MrOPPA1"},"content":" public String toString() {","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"MrOPPA1"},"content":" return date.format(toStringFormatter);","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"MrOPPA1"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"MrOPPA1":45,"Remy9926":19}},{"path":"src/main/java/seedu/duke/data/DateTime.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"MrOPPA1"},"content":"package seedu.duke.data;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"MrOPPA1"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"MrOPPA1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"MrOPPA1"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"MrOPPA1"},"content":"import java.util.Locale;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"MrOPPA1"},"content":"// import com.google.gson.annotations.SerializedName;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"MrOPPA1"},"content":"/**","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"MrOPPA1"},"content":" * Customized class for showing date time and parsing supported string to date","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"MrOPPA1"},"content":" * time.","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"MrOPPA1"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"MrOPPA1"},"content":"public class DateTime {","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"MrOPPA1"},"content":" private static DateTimeFormatter[] formatters \u003d new DateTimeFormatter[] {","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"MrOPPA1"},"content":" DateTimeFormatter.ofPattern(\"yyyy-M-d HHmm\"),","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"MrOPPA1"},"content":" DateTimeFormatter.ofPattern(\"yyyy-M-d H:m\"),","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"MrOPPA1"},"content":" DateTimeFormatter.ofPattern(\"M-d-yyyy HHmm\"),","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"MrOPPA1"},"content":" DateTimeFormatter.ofPattern(\"M-d-yyyy H:m\"),","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"MrOPPA1"},"content":" DateTimeFormatter.ofPattern(\"MMM d, yyyy HH:mm\", Locale.ENGLISH), };","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"MrOPPA1"},"content":" private static DateTimeFormatter toStringFormatter \u003d formatters[formatters.length - 1];","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" public String standardString;","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" transient LocalDateTime dateTime;","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" // @SerializedName(\"rawData\")","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" * Create a new date time.","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" * @param rawData A String that needs to comply with a supported format and","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" * indicates a correct time that will be recorded by this Date","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" * instance time.","lastModifiedDate":"2023-10-20"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" * @throws TipsException Any excption will be throw in this type, which contains","lastModifiedDate":"2023-10-20"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" * information about this exception and the possible","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":" * solution.","lastModifiedDate":"2023-10-20"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":" public DateTime(String rawData) throws Exception {","lastModifiedDate":"2023-10-20"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" setRawData(rawData);","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":40,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"MrOPPA1"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"MrOPPA1"},"content":" * Modifying an existing date time with a rawData String.","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"MrOPPA1"},"content":" *","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"MrOPPA1"},"content":" * @param rawData A String that needs to comply with a supported format and","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"MrOPPA1"},"content":" * indicates a correct time that will be recorded by this Date","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"MrOPPA1"},"content":" * instance.","lastModifiedDate":"2023-10-19"},{"lineNumber":47,"author":{"gitId":"MrOPPA1"},"content":" * @throws TipsException Any excption will be throw in this type, which contains","lastModifiedDate":"2023-10-19"},{"lineNumber":48,"author":{"gitId":"MrOPPA1"},"content":" * information about this exception and the possible","lastModifiedDate":"2023-10-19"},{"lineNumber":49,"author":{"gitId":"MrOPPA1"},"content":" * solution.","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"MrOPPA1"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"MrOPPA1"},"content":" public void setRawData(String rawData) throws Exception {","lastModifiedDate":"2023-10-19"},{"lineNumber":52,"author":{"gitId":"MrOPPA1"},"content":" for (DateTimeFormatter formatter : formatters) {","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"MrOPPA1"},"content":" try {","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"MrOPPA1"},"content":" dateTime \u003d LocalDateTime.parse(rawData, formatter);","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"MrOPPA1"},"content":" standardString \u003d this.toString();","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"MrOPPA1"},"content":" return;","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"MrOPPA1"},"content":" } catch (Exception exception) {","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"Remy9926"},"content":" continue;","lastModifiedDate":"2023-10-20"},{"lineNumber":59,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":60,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"MrOPPA1"},"content":" throw new Exception(\"Unable to parse date time!\");","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"MrOPPA1"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":65,"author":{"gitId":"MrOPPA1"},"content":" public String toString() {","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"MrOPPA1"},"content":" return dateTime.format(toStringFormatter);","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":68,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":69,"author":{"gitId":"MrOPPA1"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":70,"author":{"gitId":"MrOPPA1"},"content":" * Compare the dates of this DateTime and another DateTime.","lastModifiedDate":"2023-10-19"},{"lineNumber":71,"author":{"gitId":"MrOPPA1"},"content":" *","lastModifiedDate":"2023-10-19"},{"lineNumber":72,"author":{"gitId":"MrOPPA1"},"content":" * @param dateTime The other DateTime that is used to compare.","lastModifiedDate":"2023-10-19"},{"lineNumber":73,"author":{"gitId":"MrOPPA1"},"content":" * @return If the date of current instance is earlier,it returns -1.","lastModifiedDate":"2023-10-19"},{"lineNumber":74,"author":{"gitId":"MrOPPA1"},"content":" * If the date of current instance is later,it returns 1.","lastModifiedDate":"2023-10-19"},{"lineNumber":75,"author":{"gitId":"MrOPPA1"},"content":" * Otherwise(when they\u0027re at exactly the same date) it returns 0.","lastModifiedDate":"2023-10-19"},{"lineNumber":76,"author":{"gitId":"MrOPPA1"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":77,"author":{"gitId":"MrOPPA1"},"content":" public int compareDate(DateTime dateTime) {","lastModifiedDate":"2023-10-19"},{"lineNumber":78,"author":{"gitId":"Remy9926"},"content":" LocalDate date1 \u003d this.dateTime.toLocalDate();","lastModifiedDate":"2023-10-20"},{"lineNumber":79,"author":{"gitId":"Remy9926"},"content":" LocalDate date2 \u003d dateTime.dateTime.toLocalDate();","lastModifiedDate":"2023-10-20"},{"lineNumber":80,"author":{"gitId":"MrOPPA1"},"content":" if (date1.isBefore(date2)) {","lastModifiedDate":"2023-10-19"},{"lineNumber":81,"author":{"gitId":"MrOPPA1"},"content":" return 1;","lastModifiedDate":"2023-10-19"},{"lineNumber":82,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":83,"author":{"gitId":"MrOPPA1"},"content":" if (date1.isAfter(date2)) {","lastModifiedDate":"2023-10-19"},{"lineNumber":84,"author":{"gitId":"MrOPPA1"},"content":" return -1;","lastModifiedDate":"2023-10-19"},{"lineNumber":85,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":86,"author":{"gitId":"MrOPPA1"},"content":" return 0;","lastModifiedDate":"2023-10-19"},{"lineNumber":87,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":88,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":89,"author":{"gitId":"MrOPPA1"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":90,"author":{"gitId":"MrOPPA1"},"content":" * Compare the dates of this DateTime and another Date.","lastModifiedDate":"2023-10-19"},{"lineNumber":91,"author":{"gitId":"MrOPPA1"},"content":" *","lastModifiedDate":"2023-10-19"},{"lineNumber":92,"author":{"gitId":"MrOPPA1"},"content":" * @param date The other Date that is used to compare.","lastModifiedDate":"2023-10-19"},{"lineNumber":93,"author":{"gitId":"MrOPPA1"},"content":" * @return If the date of current instance is earlier,it returns -1.","lastModifiedDate":"2023-10-19"},{"lineNumber":94,"author":{"gitId":"MrOPPA1"},"content":" * If the date of current instance is later,it returns 1.","lastModifiedDate":"2023-10-19"},{"lineNumber":95,"author":{"gitId":"MrOPPA1"},"content":" * Otherwise(when they\u0027re at exactly the same date) it returns 0.","lastModifiedDate":"2023-10-19"},{"lineNumber":96,"author":{"gitId":"MrOPPA1"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":97,"author":{"gitId":"MrOPPA1"},"content":" public int compareDate(Date date) {","lastModifiedDate":"2023-10-19"},{"lineNumber":98,"author":{"gitId":"Remy9926"},"content":" LocalDate date1 \u003d this.dateTime.toLocalDate();","lastModifiedDate":"2023-10-20"},{"lineNumber":99,"author":{"gitId":"Remy9926"},"content":" LocalDate date2 \u003d date.date;","lastModifiedDate":"2023-10-20"},{"lineNumber":100,"author":{"gitId":"MrOPPA1"},"content":" if (date1.isBefore(date2)) {","lastModifiedDate":"2023-10-19"},{"lineNumber":101,"author":{"gitId":"MrOPPA1"},"content":" return -1;","lastModifiedDate":"2023-10-19"},{"lineNumber":102,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":103,"author":{"gitId":"MrOPPA1"},"content":" if (date1.isAfter(date2)) {","lastModifiedDate":"2023-10-19"},{"lineNumber":104,"author":{"gitId":"MrOPPA1"},"content":" return 1;","lastModifiedDate":"2023-10-19"},{"lineNumber":105,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":106,"author":{"gitId":"MrOPPA1"},"content":" return 0;","lastModifiedDate":"2023-10-19"},{"lineNumber":107,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":108,"author":{"gitId":"MrOPPA1"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"MrOPPA1":85,"Remy9926":23}},{"path":"src/main/java/seedu/duke/data/Goal.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"J-Y-Yan"},"content":"package seedu.duke.data;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"J-Y-Yan"},"content":"public class Goal {","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"J-Y-Yan"},"content":" private int calories;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"J-Y-Yan"},"content":" private String date;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"J-Y-Yan"},"content":" public Goal(int calories, String date){","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"J-Y-Yan"},"content":" this.calories \u003d calories;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"J-Y-Yan"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"J-Y-Yan"},"content":" public String toString() {","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"J-Y-Yan"},"content":" return \"Consume \" + this.calories + \" kcal on \" + this.date;","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"J-Y-Yan"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"J-Y-Yan":15}},{"path":"src/main/java/seedu/duke/data/GoalList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"J-Y-Yan"},"content":"package seedu.duke.data;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"J-Y-Yan"},"content":"import seedu.duke.data.exception.IllegalValueException;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"J-Y-Yan"},"content":"import seedu.duke.data.exception.IncorrectFormatException;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"J-Y-Yan"},"content":"import seedu.duke.ui.TextUi;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"J-Y-Yan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"J-Y-Yan"},"content":"public class GoalList {","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" private static final String GOALKEYWORD \u003d \"set\";","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" private static final String DATEKEYWORD \u003d \"on\";","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"J-Y-Yan"},"content":" private ArrayList\u003cGoal\u003e goals;","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"J-Y-Yan"},"content":" private int goalCount;","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"J-Y-Yan"},"content":" private TextUi ui;","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"J-Y-Yan"},"content":" public GoalList() {","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"J-Y-Yan"},"content":" goals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"J-Y-Yan"},"content":" this.goalCount \u003d 0;","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"J-Y-Yan"},"content":" public GoalList(ArrayList\u003cGoal\u003e goals) {","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"J-Y-Yan"},"content":" this.goals \u003d goals;","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"J-Y-Yan"},"content":" this.goalCount \u003d goals.size();","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"J-Y-Yan"},"content":" public Goal getGoal(int index) {","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"J-Y-Yan"},"content":" return goals.get(index);","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"J-Y-Yan"},"content":" public int getGoalCount() {","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"J-Y-Yan"},"content":" return goalCount;","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"J-Y-Yan"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"J-Y-Yan"},"content":" * @param index points to the target gaol at the goal list","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"J-Y-Yan"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"J-Y-Yan"},"content":" public void deleteGoal(int index) {","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"J-Y-Yan"},"content":" Goal targetGoal \u003d goals.remove(index);","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"J-Y-Yan"},"content":" goalCount--;","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"J-Y-Yan"},"content":" ui.printDeleteGoal(targetGoal);","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"J-Y-Yan"},"content":" ui.printNumberofGoal(goalCount);","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"J-Y-Yan"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":47,"author":{"gitId":"Remy9926"},"content":" * checks if the user Input is valid by:","lastModifiedDate":"2023-10-20"},{"lineNumber":48,"author":{"gitId":"J-Y-Yan"},"content":" * 1. check if the length of the command equals 4","lastModifiedDate":"2023-10-19"},{"lineNumber":49,"author":{"gitId":"J-Y-Yan"},"content":" * 2. detect keywords \"set\", \"on\", etc.","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"J-Y-Yan"},"content":" * 3. check if user inputs a calories number at valid range","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"Remy9926"},"content":" * The userCmd should be like: set 1234 on Date","lastModifiedDate":"2023-10-20"},{"lineNumber":52,"author":{"gitId":"Remy9926"},"content":" * @param userCmd represents the raw userInput","lastModifiedDate":"2023-10-20"},{"lineNumber":53,"author":{"gitId":"Remy9926"},"content":" * @throws IncorrectFormatException","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"J-Y-Yan"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"J-Y-Yan"},"content":" private void checkGoalInput(String userCmd) throws IncorrectFormatException, NumberFormatException {","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"J-Y-Yan"},"content":" String[] cmdSplit \u003d userCmd.split(\" \");","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"J-Y-Yan"},"content":" if (cmdSplit.length !\u003d 4) {","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"J-Y-Yan"},"content":" throw new IncorrectFormatException(\"Goal message contain extra data. Please \"","lastModifiedDate":"2023-10-19"},{"lineNumber":60,"author":{"gitId":"J-Y-Yan"},"content":" + \"provides with only relevant information.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"Remy9926"},"content":" if (!cmdSplit[0].equals(GOALKEYWORD) ) {","lastModifiedDate":"2023-10-20"},{"lineNumber":64,"author":{"gitId":"Remy9926"},"content":" throw new IncorrectFormatException(\"Sorry. I cannot detect the \u0027\" + GOALKEYWORD + \"\u0027 keyword.\" );","lastModifiedDate":"2023-10-20"},{"lineNumber":65,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"Remy9926"},"content":" if (!cmdSplit[2].equals(DATEKEYWORD)) {","lastModifiedDate":"2023-10-20"},{"lineNumber":68,"author":{"gitId":"Remy9926"},"content":" throw new IncorrectFormatException(\"Sorry. I cannot detect the \u0027\" + DATEKEYWORD + \"\u0027 keyword.\" );","lastModifiedDate":"2023-10-20"},{"lineNumber":69,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":70,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":71,"author":{"gitId":"J-Y-Yan"},"content":" int calories \u003d Integer.parseInt(cmdSplit[1]); //throws number exception if not a number string","lastModifiedDate":"2023-10-19"},{"lineNumber":72,"author":{"gitId":"J-Y-Yan"},"content":" if (calories \u003c\u003d 0 ){","lastModifiedDate":"2023-10-19"},{"lineNumber":73,"author":{"gitId":"J-Y-Yan"},"content":" throw new IllegalValueException(\"Please input a positive value.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":74,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":75,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":76,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":77,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":78,"author":{"gitId":"J-Y-Yan"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":79,"author":{"gitId":"J-Y-Yan"},"content":" * This method will first check if the raw user input is in the correct format.","lastModifiedDate":"2023-10-19"},{"lineNumber":80,"author":{"gitId":"J-Y-Yan"},"content":" * If not, terminate the method and throws error message.","lastModifiedDate":"2023-10-19"},{"lineNumber":81,"author":{"gitId":"J-Y-Yan"},"content":" * If yes, continue to add a new goal object into the goals list.","lastModifiedDate":"2023-10-19"},{"lineNumber":82,"author":{"gitId":"J-Y-Yan"},"content":" * @param userCmd represents raw user input","lastModifiedDate":"2023-10-19"},{"lineNumber":83,"author":{"gitId":"J-Y-Yan"},"content":" * @throws IncorrectFormatException if user input is in wrong format","lastModifiedDate":"2023-10-19"},{"lineNumber":84,"author":{"gitId":"J-Y-Yan"},"content":" * @throws NumberFormatException if the user does not input a valid number","lastModifiedDate":"2023-10-19"},{"lineNumber":85,"author":{"gitId":"J-Y-Yan"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":86,"author":{"gitId":"J-Y-Yan"},"content":" public void addGoal(String userCmd) throws IncorrectFormatException, NumberFormatException{","lastModifiedDate":"2023-10-19"},{"lineNumber":87,"author":{"gitId":"J-Y-Yan"},"content":" userCmd \u003d userCmd.toLowerCase().trim();","lastModifiedDate":"2023-10-19"},{"lineNumber":88,"author":{"gitId":"J-Y-Yan"},"content":" checkGoalInput(userCmd); //if invalid, exceptions is thrown","lastModifiedDate":"2023-10-19"},{"lineNumber":89,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":90,"author":{"gitId":"J-Y-Yan"},"content":" String[] cmdSplit \u003d userCmd.split(\" \");","lastModifiedDate":"2023-10-19"},{"lineNumber":91,"author":{"gitId":"J-Y-Yan"},"content":" int calories \u003d Integer.parseInt(cmdSplit[1]);","lastModifiedDate":"2023-10-19"},{"lineNumber":92,"author":{"gitId":"J-Y-Yan"},"content":" String date \u003d cmdSplit[3];","lastModifiedDate":"2023-10-19"},{"lineNumber":93,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":94,"author":{"gitId":"J-Y-Yan"},"content":" goals.add(new Goal(calories, date));","lastModifiedDate":"2023-10-19"},{"lineNumber":95,"author":{"gitId":"J-Y-Yan"},"content":" goalCount++;","lastModifiedDate":"2023-10-19"},{"lineNumber":96,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":97,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":98,"author":{"gitId":"J-Y-Yan"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"J-Y-Yan":88,"Remy9926":10}},{"path":"src/main/java/seedu/duke/data/Printable.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.data;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"public interface Printable {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":" String getAsText();","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"kevinz420":5}},{"path":"src/main/java/seedu/duke/data/exception/IllegalValueException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.data.exception;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":" * Signals that some given data does not fulfill some constraints.","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"J-Y-Yan"},"content":"public class IllegalValueException extends IncorrectFormatException {","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"kevinz420"},"content":" * @param message should contain relevant information on the failed constraint(s)","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":" public IllegalValueException(String message) {","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":" super(message);","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"J-Y-Yan":1,"kevinz420":12}},{"path":"src/main/java/seedu/duke/data/exception/IncorrectFormatException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"J-Y-Yan"},"content":"package seedu.duke.data.exception;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"J-Y-Yan"},"content":"public class IncorrectFormatException extends Exception {","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"J-Y-Yan"},"content":" public IncorrectFormatException(String message) {","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"J-Y-Yan"},"content":" super(message);","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"J-Y-Yan"},"content":" public void handleException(){","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"J-Y-Yan"},"content":" System.out.println(\"Please try again.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"J-Y-Yan"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"J-Y-Yan":13}},{"path":"src/main/java/seedu/duke/data/meal/Meal.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"MrOPPA1"},"content":"package seedu.duke.data.meal;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"MrOPPA1"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"MrOPPA1"},"content":"import seedu.duke.data.DateTime;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"MrOPPA1"},"content":"public class Meal {","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"MrOPPA1"},"content":" public String name;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"MrOPPA1"},"content":" public int calories;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"MrOPPA1"},"content":" public DateTime time;","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"MrOPPA1"},"content":" public Meal(String name, int calories) throws Exception {","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"MrOPPA1"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"MrOPPA1"},"content":" this.calories \u003d calories;","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"MrOPPA1"},"content":" this.time \u003d new DateTime(LocalDateTime.now().toString());","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"MrOPPA1"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"MrOPPA1"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"MrOPPA1":17}},{"path":"src/main/java/seedu/duke/exerciselog/Day.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.exerciselog;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":"public class Day {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":" private final ArrayList\u003cExercise\u003e exercises;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":" public Day() {","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":" exercises \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":" * Instantiates and adds a new Exercise Object into the Day.","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" * @param exerciseName the name of the exercise to be added to the day","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":" * @param caloriesBurned the number of calories burned during the exercise","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":" * @return a string representing the new exercise","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" public String addExercise(String exerciseName, int caloriesBurned) {","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" Exercise newExercise \u003d new Exercise(exerciseName, caloriesBurned);","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" exercises.add(newExercise);","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" return newExercise.toString();","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" * Attempts to remove an exercise with the specified details and returns whether or not removal was successful.","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" * @param exerciseName the name of the exercise to be removed","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":" * @param caloriesBurned the number of calories burned during the exercise","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" * @return true if an exercise was successfully removed, false otherwise","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" public boolean removeExercise(String exerciseName, int caloriesBurned) {","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" return exercises.remove(new Exercise(exerciseName, caloriesBurned));","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":" * Returns the exercise object at the specified index for the Day.","lastModifiedDate":"2023-10-20"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"Remy9926"},"content":" * @param index the number of the exercise the user wants to check on","lastModifiedDate":"2023-10-20"},{"lineNumber":40,"author":{"gitId":"Remy9926"},"content":" * @return the exercise object at the specified index","lastModifiedDate":"2023-10-20"},{"lineNumber":41,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"Remy9926"},"content":" public Exercise getExercise(int index) {","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Remy9926"},"content":" return exercises.get(index - 1);","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":47,"author":{"gitId":"Remy9926"},"content":" * Returns the total number of exercises logged for the day.","lastModifiedDate":"2023-10-20"},{"lineNumber":48,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":49,"author":{"gitId":"Remy9926"},"content":" * @return the total number of exercises logged for the day.","lastModifiedDate":"2023-10-20"},{"lineNumber":50,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":51,"author":{"gitId":"Remy9926"},"content":" public Integer getNumberOfExercises() {","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"Remy9926"},"content":" return exercises.size();","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":56,"author":{"gitId":"Remy9926"},"content":" * Returns whether the Day has exercises or not","lastModifiedDate":"2023-10-20"},{"lineNumber":57,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":58,"author":{"gitId":"Remy9926"},"content":" * @return true if there are exercises, false if not","lastModifiedDate":"2023-10-20"},{"lineNumber":59,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":60,"author":{"gitId":"Remy9926"},"content":" public boolean containsExercises() {","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"Remy9926"},"content":" return !exercises.isEmpty();","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":65,"author":{"gitId":"Remy9926"},"content":" * Returns a string representing all the exercises contained for the Day.","lastModifiedDate":"2023-10-20"},{"lineNumber":66,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":67,"author":{"gitId":"Remy9926"},"content":" * @return a string representing all the exercises for the day","lastModifiedDate":"2023-10-20"},{"lineNumber":68,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":69,"author":{"gitId":"Remy9926"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"Remy9926"},"content":" if (exercises.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"Remy9926"},"content":" return \"\\tNO EXCERCISES FOR THIS DAY!\\n\";","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"Remy9926"},"content":" String newString \u003d \"\";","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"Remy9926"},"content":" for (Exercise e: exercises) {","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"Remy9926"},"content":" newString +\u003d \"\\t\" + e.toString();","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"Remy9926"},"content":" return newString;","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Remy9926":79}},{"path":"src/main/java/seedu/duke/exerciselog/Exercise.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.exerciselog;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"public class Exercise {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":" private String exerciseName;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":" private int caloriesBurned;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":" public Exercise(String exerciseName, int caloriesBurned) {","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":" this.exerciseName \u003d exerciseName;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":" this.caloriesBurned \u003d caloriesBurned;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" public String getExerciseName() {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":" return exerciseName;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":" public int getCaloriesBurned() {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":" return caloriesBurned;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" public void setExerciseName(String newName) {","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" this.exerciseName \u003d newName;","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" public void setCaloriesBurned(int newCalories) {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" this.caloriesBurned \u003d newCalories;","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":" return \"Exercise: \" + exerciseName + \", Calories Burned: \" + Integer.toString(caloriesBurned) + \" Calories\\n\";","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" public boolean equals(Object other) {","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" if (!(other instanceof Exercise)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" return false;","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":" Exercise otherExercise \u003d (Exercise) other;","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":" return this.exerciseName.equals(otherExercise.getExerciseName()) \u0026\u0026","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" this.caloriesBurned \u003d\u003d otherExercise.getCaloriesBurned();","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Remy9926":40}},{"path":"src/main/java/seedu/duke/exerciselog/Log.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.exerciselog;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":"public class Log {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":" public static ArrayList\u003cMonth\u003e exerciseLog;","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":" public Log() {","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":" exerciseLog \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(31, \"jan\")); // Jan 31","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(29, \"feb\")); // Feb 29","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(31, \"mar\")); // Mar 31","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(30, \"apr\")); // Apr 30","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(31, \"may\")); // May 31","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(30, \"jun\")); // Jun 30","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(31, \"jul\")); // Jul 31","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(31, \"aug\")); // Aug 31","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(30, \"sep\")); // Sep 30","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(31, \"oct\")); // Oct 31","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(30, \"nov\")); // Nov 30","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" exerciseLog.add(new Month(31, \"dec\")); // Dec 31","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" * Adds an exercise to the specified month and day with the specified name and number of calories burned.","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":" * @param month the month of the exercise to be added to the log","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" * @param day the day of the month of the exercise to be added to the log","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":" * @param exerciseName the name of the exercise to be added to the log","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" * @param caloriesBurned the number of calories burned by the exercise","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" * @return the string representation of the exercise that is added to the log","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" public String addExercise(int month, int day, String exerciseName, int caloriesBurned) {","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" return exerciseLog.get(month - 1).addExercise(day, exerciseName, caloriesBurned);","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" * Attempts to remove the specified exercise from the log and returns true only if removal is successful.","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":40,"author":{"gitId":"Remy9926"},"content":" * @param month the month of the exercise to be deleted from the log","lastModifiedDate":"2023-10-20"},{"lineNumber":41,"author":{"gitId":"Remy9926"},"content":" * @param day the day of the month of the exercise to be deleted from the log","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"Remy9926"},"content":" * @param exerciseName the name of the exercise to be deleted from the log","lastModifiedDate":"2023-10-20"},{"lineNumber":43,"author":{"gitId":"Remy9926"},"content":" * @param caloriesBurned the number of calories burned by the exercise","lastModifiedDate":"2023-10-20"},{"lineNumber":44,"author":{"gitId":"Remy9926"},"content":" * @return true if the exercise was removed, false otherwise","lastModifiedDate":"2023-10-20"},{"lineNumber":45,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":46,"author":{"gitId":"Remy9926"},"content":" public boolean removeExercise(int month, int day, String exerciseName, int caloriesBurned) {","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"Remy9926"},"content":" return exerciseLog.get(month - 1).removeExercise(day, exerciseName, caloriesBurned);","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":51,"author":{"gitId":"Remy9926"},"content":" * Returns the total number of exercises logged","lastModifiedDate":"2023-10-20"},{"lineNumber":52,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":53,"author":{"gitId":"Remy9926"},"content":" * @return the total number of exercises logged","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":55,"author":{"gitId":"Remy9926"},"content":" public int getNumberOfExercises() {","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"Remy9926"},"content":" int totalNumber \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"Remy9926"},"content":" for (Month m: exerciseLog) {","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"Remy9926"},"content":" totalNumber +\u003d m.getTotalNumberOfExercises();","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"Remy9926"},"content":" return totalNumber;","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":64,"author":{"gitId":"Remy9926"},"content":" * Returns the total number of exercises logged for the specific month","lastModifiedDate":"2023-10-20"},{"lineNumber":65,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":66,"author":{"gitId":"Remy9926"},"content":" * @param month the month to be checked","lastModifiedDate":"2023-10-20"},{"lineNumber":67,"author":{"gitId":"Remy9926"},"content":" * @return the total number of exercises logged for the specific month","lastModifiedDate":"2023-10-20"},{"lineNumber":68,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":69,"author":{"gitId":"Remy9926"},"content":" public int getNumberOfExercisesForMonth(int month) {","lastModifiedDate":"2023-10-19"},{"lineNumber":70,"author":{"gitId":"Remy9926"},"content":" return exerciseLog.get(month - 1).getTotalNumberOfExercises();","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":74,"author":{"gitId":"Remy9926"},"content":" * Returns the total number of exercises logged for the specific day of the specified month","lastModifiedDate":"2023-10-20"},{"lineNumber":75,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":76,"author":{"gitId":"Remy9926"},"content":" * @param month the month to be checked","lastModifiedDate":"2023-10-20"},{"lineNumber":77,"author":{"gitId":"Remy9926"},"content":" * @param day the day of the month to be checked","lastModifiedDate":"2023-10-20"},{"lineNumber":78,"author":{"gitId":"Remy9926"},"content":" * @return the total number of exercises logged for a specific day of the month","lastModifiedDate":"2023-10-20"},{"lineNumber":79,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":80,"author":{"gitId":"Remy9926"},"content":" public int getNumberOfExercisesForDay(int month, int day) {","lastModifiedDate":"2023-10-19"},{"lineNumber":81,"author":{"gitId":"Remy9926"},"content":" return exerciseLog.get(month - 1).getNumberOfExercisesForDay(day);","lastModifiedDate":"2023-10-19"},{"lineNumber":82,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":85,"author":{"gitId":"Remy9926"},"content":" * Returns the Month object of the specified month.","lastModifiedDate":"2023-10-20"},{"lineNumber":86,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":87,"author":{"gitId":"Remy9926"},"content":" * @param month the month to be checked","lastModifiedDate":"2023-10-20"},{"lineNumber":88,"author":{"gitId":"Remy9926"},"content":" * @return the Month object of the specified month","lastModifiedDate":"2023-10-20"},{"lineNumber":89,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":90,"author":{"gitId":"Remy9926"},"content":" public Month getMonth(int month) {","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"Remy9926"},"content":" return exerciseLog.get(month - 1);","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":95,"author":{"gitId":"Remy9926"},"content":" * Returns the Day object of the specified day.","lastModifiedDate":"2023-10-20"},{"lineNumber":96,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":97,"author":{"gitId":"Remy9926"},"content":" * @param month the month to be checked","lastModifiedDate":"2023-10-20"},{"lineNumber":98,"author":{"gitId":"Remy9926"},"content":" * @param day the day of the month to be checked","lastModifiedDate":"2023-10-20"},{"lineNumber":99,"author":{"gitId":"Remy9926"},"content":" * @return the Day object of the specified month and day","lastModifiedDate":"2023-10-20"},{"lineNumber":100,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":101,"author":{"gitId":"Remy9926"},"content":" public Day getDay(int month, int day) {","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"Remy9926"},"content":" return exerciseLog.get(month - 1).getDay(day - 1);","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":106,"author":{"gitId":"Remy9926"},"content":" * The string representation of the exercise log, showing each month with their days and exercises","lastModifiedDate":"2023-10-20"},{"lineNumber":107,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":108,"author":{"gitId":"Remy9926"},"content":" * @return the string representation of the exercise log","lastModifiedDate":"2023-10-20"},{"lineNumber":109,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":110,"author":{"gitId":"Remy9926"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"Remy9926"},"content":" String newString \u003d \"\";","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"Remy9926"},"content":" for (Month m: exerciseLog) {","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"Remy9926"},"content":" newString +\u003d m.toString() + \"\\n\";","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"Remy9926"},"content":" return newString;","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Remy9926":117}},{"path":"src/main/java/seedu/duke/exerciselog/Month.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.exerciselog;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":"public class Month {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":" private final ArrayList\u003cDay\u003e dates;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":" private String name;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":" public Month(int days, String name) {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" dates \u003d new ArrayList\u003cDay\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" for (int i \u003d 0; i \u003c days; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":" dates.add(new Day());","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" * Adds an exercise with the specified name and calories burned to the specified day.","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" * @param day the day to add the exercise to","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" * @param exerciseName the name of the exercise","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" * @param caloriesBurned the number of calories burned by the exercise","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" * @return the string representation of the new exercise created","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" public String addExercise(int day, String exerciseName, int caloriesBurned) {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" return dates.get(day - 1).addExercise(exerciseName, caloriesBurned);","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" * Attempts to remove the specified exercise at the specified day of the month","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" * @param day the day to remove the exercise from","lastModifiedDate":"2023-10-20"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" * @param exerciseName the name of the exercise to be removed","lastModifiedDate":"2023-10-20"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" * @param caloriesBurned the number of calories burned by the exercise","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":" * @return true if the exercise was removed, false otherwise","lastModifiedDate":"2023-10-20"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":" public boolean removeExercise(int day, String exerciseName, int caloriesBurned) {","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" return dates.get(day - 1).removeExercise(exerciseName, caloriesBurned);","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"Remy9926"},"content":" * Returns the total number of exercises for the month","lastModifiedDate":"2023-10-20"},{"lineNumber":43,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":44,"author":{"gitId":"Remy9926"},"content":" * @return the total number of exercises for the month","lastModifiedDate":"2023-10-20"},{"lineNumber":45,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":46,"author":{"gitId":"Remy9926"},"content":" public int getTotalNumberOfExercises() {","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Remy9926"},"content":" int totalExercises \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Remy9926"},"content":" for (Day d: dates) {","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"Remy9926"},"content":" totalExercises +\u003d d.getNumberOfExercises();","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"Remy9926"},"content":" return totalExercises;","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":55,"author":{"gitId":"Remy9926"},"content":" * Returns a Day object of the day specified","lastModifiedDate":"2023-10-20"},{"lineNumber":56,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":57,"author":{"gitId":"Remy9926"},"content":" * @param day the number of the day to be returned","lastModifiedDate":"2023-10-20"},{"lineNumber":58,"author":{"gitId":"Remy9926"},"content":" * @return a Day object of the specified day","lastModifiedDate":"2023-10-20"},{"lineNumber":59,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":60,"author":{"gitId":"Remy9926"},"content":" public Day getDay(int day) {","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"Remy9926"},"content":" return dates.get(day - 1);","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":65,"author":{"gitId":"Remy9926"},"content":" * Returns the total number of exercises for the specified day","lastModifiedDate":"2023-10-20"},{"lineNumber":66,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":67,"author":{"gitId":"Remy9926"},"content":" * @param day the day to be checked","lastModifiedDate":"2023-10-20"},{"lineNumber":68,"author":{"gitId":"Remy9926"},"content":" * @return the total number of exercises for the specified day","lastModifiedDate":"2023-10-20"},{"lineNumber":69,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":70,"author":{"gitId":"Remy9926"},"content":" public int getNumberOfExercisesForDay(int day) {","lastModifiedDate":"2023-10-19"},{"lineNumber":71,"author":{"gitId":"Remy9926"},"content":" return dates.get(day - 1).getNumberOfExercises();","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":75,"author":{"gitId":"Remy9926"},"content":" * Returns the name of the month","lastModifiedDate":"2023-10-20"},{"lineNumber":76,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":77,"author":{"gitId":"Remy9926"},"content":" * @return the name of the month","lastModifiedDate":"2023-10-20"},{"lineNumber":78,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":79,"author":{"gitId":"Remy9926"},"content":" public String getName() {","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"Remy9926"},"content":" return name;","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":84,"author":{"gitId":"Remy9926"},"content":" * Returns the number of days in the month","lastModifiedDate":"2023-10-20"},{"lineNumber":85,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":86,"author":{"gitId":"Remy9926"},"content":" * @return the number of days in the month","lastModifiedDate":"2023-10-20"},{"lineNumber":87,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":88,"author":{"gitId":"Remy9926"},"content":" public int getNumberOfDays() {","lastModifiedDate":"2023-10-19"},{"lineNumber":89,"author":{"gitId":"Remy9926"},"content":" return dates.size();","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"Remy9926"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":93,"author":{"gitId":"Remy9926"},"content":" * Returns the string representation of the month by showing the name of the month and each of its days and","lastModifiedDate":"2023-10-20"},{"lineNumber":94,"author":{"gitId":"Remy9926"},"content":" * exercises","lastModifiedDate":"2023-10-20"},{"lineNumber":95,"author":{"gitId":"Remy9926"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":96,"author":{"gitId":"Remy9926"},"content":" * @return the string representation of the month","lastModifiedDate":"2023-10-20"},{"lineNumber":97,"author":{"gitId":"Remy9926"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":98,"author":{"gitId":"Remy9926"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"Remy9926"},"content":" String newString \u003d \"Month: \" + name.toUpperCase() + \"\\n\";","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"Remy9926"},"content":" for (int i \u003d 0; i \u003c dates.size(); i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"Remy9926"},"content":" String day \u003d Integer.toString(i + 1);","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"Remy9926"},"content":" newString +\u003d \"Day \" + day + \":\\n\";","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"Remy9926"},"content":" newString +\u003d dates.get(i).toString();","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"Remy9926"},"content":" return newString;","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Remy9926":107}},{"path":"src/main/java/seedu/duke/parser/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"import static seedu.duke.common.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"kevinz420"},"content":"import java.util.Collection;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":"import java.util.Collections;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"kevinz420"},"content":"import java.util.HashSet;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":"import java.util.Set;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.Command;","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.ExitCommand;","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.GoalCommand;","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.HelpCommand;","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.IncorrectCommand;","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.logcommands.LogCommand;","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.logcommands.DeleteLogCommand;","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":"import seedu.duke.commands.logcommands.ViewLogCommand;","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.data.exception.IllegalValueException;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"kevinz420"},"content":" * Parses user input.","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"kevinz420"},"content":"public class Parser {","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"kevinz420"},"content":" public static final Pattern PERSON_INDEX_ARGS_FORMAT \u003d Pattern.compile(\"(?\u003ctargetIndex\u003e.+)\");","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"MrOPPA1"},"content":" public static final Pattern KEYWORDS_ARGS_FORMAT \u003d Pattern.compile(\"(?\u003ckeywords\u003e\\\\S+(?:\\\\s+\\\\S+)*)\");","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"MrOPPA1"},"content":" // one or more keywords separated by whitespace","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"kevinz420"},"content":" * Used for initial separation of command word and args.","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"kevinz420"},"content":" public static final Pattern BASIC_COMMAND_FORMAT \u003d Pattern.compile(\"(?\u003ccommandWord\u003e\\\\S+)(?\u003carguments\u003e.*)\");","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"kevinz420"},"content":" * Parses user input into command for execution.","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"kevinz420"},"content":" * @param userInput full user input string","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"kevinz420"},"content":" * @return the command based on the user input","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"kevinz420"},"content":" public Command parseCommand(String userInput) {","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"kevinz420"},"content":" final Matcher matcher \u003d BASIC_COMMAND_FORMAT.matcher(userInput.trim());","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"kevinz420"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"kevinz420"},"content":" return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"kevinz420"},"content":" final String commandWord \u003d matcher.group(\"commandWord\");","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"kevinz420"},"content":" final String arguments \u003d matcher.group(\"arguments\");","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"kevinz420"},"content":" switch (commandWord) {","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"kevinz420"},"content":" // case AddCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"kevinz420"},"content":" // return prepareAdd(arguments);","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"kevinz420"},"content":" // case DeleteCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"kevinz420"},"content":" // return prepareDelete(arguments);","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"kevinz420"},"content":" // case ClearCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"kevinz420"},"content":" // return new ClearCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"kevinz420"},"content":" // case FindCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"kevinz420"},"content":" // return prepareFind(arguments);","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"kevinz420"},"content":" // case ListCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"kevinz420"},"content":" // return new ListCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"kevinz420"},"content":" // case ViewCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"kevinz420"},"content":" // return prepareView(arguments);","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"kevinz420"},"content":" // case ViewAllCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"kevinz420"},"content":" // return prepareViewAll(arguments);","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":77,"author":{"gitId":"Remy9926"},"content":" case LogCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"Remy9926"},"content":" return new LogCommand(Arrays.asList(arguments.trim().split(\" \")));","lastModifiedDate":"2023-10-20"},{"lineNumber":79,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"Remy9926"},"content":" case DeleteLogCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"Remy9926"},"content":" return new DeleteLogCommand(Arrays.asList(arguments.trim().split(\" \")));","lastModifiedDate":"2023-10-20"},{"lineNumber":82,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"Remy9926"},"content":" case ViewLogCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"Remy9926"},"content":" return new ViewLogCommand(Arrays.asList(arguments.trim().split(\" \")));","lastModifiedDate":"2023-10-20"},{"lineNumber":85,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"J-Y-Yan"},"content":" case GoalCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-19"},{"lineNumber":87,"author":{"gitId":"J-Y-Yan"},"content":" return new GoalCommand(userInput);","lastModifiedDate":"2023-10-19"},{"lineNumber":88,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":89,"author":{"gitId":"kevinz420"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"kevinz420"},"content":" return new ExitCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"kevinz420"},"content":" case HelpCommand.COMMAND_WORD: // Fallthrough","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":94,"author":{"gitId":"kevinz420"},"content":" default:","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"kevinz420"},"content":" return new HelpCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"kevinz420"},"content":" // /**","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"kevinz420"},"content":" // * Parses arguments in the context of the add person command.","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"kevinz420"},"content":" // *","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"kevinz420"},"content":" // * @param args full command args string","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"kevinz420"},"content":" // * @return the prepared command","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"kevinz420"},"content":" // */","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"kevinz420"},"content":" // private Command prepareAdd(String args) {","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"kevinz420"},"content":" // final Matcher matcher \u003d PERSON_DATA_ARGS_FORMAT.matcher(args.trim());","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"kevinz420"},"content":" // // Validate arg string format","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"kevinz420"},"content":" // if (!matcher.matches()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"MrOPPA1"},"content":" // return new IncorrectCommand(String.format(MESSAGE_INVALID_COMMAND_FORMAT,","lastModifiedDate":"2023-10-20"},{"lineNumber":110,"author":{"gitId":"MrOPPA1"},"content":" // AddCommand.MESSAGE_USAGE));","lastModifiedDate":"2023-10-20"},{"lineNumber":111,"author":{"gitId":"kevinz420"},"content":" // }","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"kevinz420"},"content":" // try {","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"kevinz420"},"content":" // return new AddCommand(","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"kevinz420"},"content":" // matcher.group(\"name\"),","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"kevinz420"},"content":" // matcher.group(\"phone\"),","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"kevinz420"},"content":" // isPrivatePrefixPresent(matcher.group(\"isPhonePrivate\")),","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"kevinz420"},"content":" // matcher.group(\"email\"),","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"kevinz420"},"content":" // isPrivatePrefixPresent(matcher.group(\"isEmailPrivate\")),","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":122,"author":{"gitId":"kevinz420"},"content":" // matcher.group(\"address\"),","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"kevinz420"},"content":" // isPrivatePrefixPresent(matcher.group(\"isAddressPrivate\")),","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"kevinz420"},"content":" //","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"kevinz420"},"content":" // getTagsFromArgs(matcher.group(\"tagArguments\"))","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"kevinz420"},"content":" // );","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"kevinz420"},"content":" // } catch (IllegalValueException ive) {","lastModifiedDate":"2023-10-15"},{"lineNumber":128,"author":{"gitId":"kevinz420"},"content":" // return new IncorrectCommand(ive.getMessage());","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"kevinz420"},"content":" // }","lastModifiedDate":"2023-10-15"},{"lineNumber":130,"author":{"gitId":"kevinz420"},"content":" // }","lastModifiedDate":"2023-10-15"},{"lineNumber":131,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":132,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":133,"author":{"gitId":"MrOPPA1"},"content":" * Returns true if the private prefix is present for a contact detail in the add","lastModifiedDate":"2023-10-20"},{"lineNumber":134,"author":{"gitId":"MrOPPA1"},"content":" * command\u0027s arguments string.","lastModifiedDate":"2023-10-20"},{"lineNumber":135,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":136,"author":{"gitId":"kevinz420"},"content":" private static boolean isPrivatePrefixPresent(String matchedPrefix) {","lastModifiedDate":"2023-10-15"},{"lineNumber":137,"author":{"gitId":"kevinz420"},"content":" return matchedPrefix.equals(\"p\");","lastModifiedDate":"2023-10-15"},{"lineNumber":138,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":139,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":140,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":141,"author":{"gitId":"kevinz420"},"content":" * Extracts the new person\u0027s tags from the add command\u0027s tag arguments string.","lastModifiedDate":"2023-10-15"},{"lineNumber":142,"author":{"gitId":"kevinz420"},"content":" * Merges duplicate tag strings.","lastModifiedDate":"2023-10-15"},{"lineNumber":143,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":144,"author":{"gitId":"kevinz420"},"content":" private static Set\u003cString\u003e getTagsFromArgs(String tagArguments) throws IllegalValueException {","lastModifiedDate":"2023-10-15"},{"lineNumber":145,"author":{"gitId":"kevinz420"},"content":" // no tags","lastModifiedDate":"2023-10-15"},{"lineNumber":146,"author":{"gitId":"kevinz420"},"content":" if (tagArguments.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":147,"author":{"gitId":"kevinz420"},"content":" return Collections.emptySet();","lastModifiedDate":"2023-10-15"},{"lineNumber":148,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":149,"author":{"gitId":"kevinz420"},"content":" // replace first delimiter prefix, then split","lastModifiedDate":"2023-10-15"},{"lineNumber":150,"author":{"gitId":"kevinz420"},"content":" final Collection\u003cString\u003e tagStrings \u003d Arrays.asList(tagArguments.replaceFirst(\" t/\", \"\").split(\" t/\"));","lastModifiedDate":"2023-10-15"},{"lineNumber":151,"author":{"gitId":"kevinz420"},"content":" return new HashSet\u003c\u003e(tagStrings);","lastModifiedDate":"2023-10-15"},{"lineNumber":152,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":153,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":154,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":155,"author":{"gitId":"kevinz420"},"content":" * Parses the given arguments string as a single index number.","lastModifiedDate":"2023-10-15"},{"lineNumber":156,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":157,"author":{"gitId":"kevinz420"},"content":" * @param args arguments string to parse as index number","lastModifiedDate":"2023-10-15"},{"lineNumber":158,"author":{"gitId":"kevinz420"},"content":" * @return the parsed index number","lastModifiedDate":"2023-10-15"},{"lineNumber":159,"author":{"gitId":"MrOPPA1"},"content":" * @throws ParseException if no region of the args string could be found","lastModifiedDate":"2023-10-20"},{"lineNumber":160,"author":{"gitId":"MrOPPA1"},"content":" * for the index","lastModifiedDate":"2023-10-20"},{"lineNumber":161,"author":{"gitId":"kevinz420"},"content":" * @throws NumberFormatException the args string region is not a valid number","lastModifiedDate":"2023-10-15"},{"lineNumber":162,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":163,"author":{"gitId":"kevinz420"},"content":" private int parseArgsAsDisplayedIndex(String args) throws ParseException, NumberFormatException {","lastModifiedDate":"2023-10-15"},{"lineNumber":164,"author":{"gitId":"kevinz420"},"content":" final Matcher matcher \u003d PERSON_INDEX_ARGS_FORMAT.matcher(args.trim());","lastModifiedDate":"2023-10-15"},{"lineNumber":165,"author":{"gitId":"kevinz420"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":166,"author":{"gitId":"kevinz420"},"content":" throw new ParseException(\"Could not find index number to parse\");","lastModifiedDate":"2023-10-15"},{"lineNumber":167,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":168,"author":{"gitId":"kevinz420"},"content":" return Integer.parseInt(matcher.group(\"targetIndex\"));","lastModifiedDate":"2023-10-15"},{"lineNumber":169,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":170,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":171,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":172,"author":{"gitId":"kevinz420"},"content":" * Signals that the user input could not be parsed.","lastModifiedDate":"2023-10-15"},{"lineNumber":173,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":174,"author":{"gitId":"kevinz420"},"content":" public static class ParseException extends Exception {","lastModifiedDate":"2023-10-15"},{"lineNumber":175,"author":{"gitId":"kevinz420"},"content":" ParseException(String message) {","lastModifiedDate":"2023-10-15"},{"lineNumber":176,"author":{"gitId":"kevinz420"},"content":" super(message);","lastModifiedDate":"2023-10-15"},{"lineNumber":177,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":178,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":179,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":180,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"J-Y-Yan":3,"kevinz420":150,"MrOPPA1":8,"Remy9926":19}},{"path":"src/main/java/seedu/duke/ui/TextUi.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"import static seedu.duke.common.Messages.MESSAGE_GOODBYE;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":"import static seedu.duke.common.Messages.MESSAGE_INIT_FAILED;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":"import static seedu.duke.common.Messages.MESSAGE_PROGRAM_LAUNCH_ARGS_USAGE;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"kevinz420"},"content":"import static seedu.duke.common.Messages.MESSAGE_USING_STORAGE_FILE;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":"import static seedu.duke.common.Messages.MESSAGE_WELCOME;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":"import java.util.List;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"kevinz420"},"content":"import java.util.Optional;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"kevinz420"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.commands.CommandResult;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"J-Y-Yan"},"content":"import seedu.duke.data.Goal;","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"J-Y-Yan"},"content":"import seedu.duke.data.GoalList;","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.data.Printable;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"kevinz420"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"kevinz420"},"content":" * Text UI of the application.","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"kevinz420"},"content":"public class TextUi {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"kevinz420"},"content":" * Offset required to convert between 1-indexing and 0-indexing.","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"kevinz420"},"content":" public static final int DISPLAYED_INDEX_OFFSET \u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"kevinz420"},"content":" * A decorative prefix added to the beginning of lines printed by AddressBook","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"kevinz420"},"content":" private static final String LINE_PREFIX \u003d \"|| \";","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"kevinz420"},"content":" * A platform independent line separator.","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"kevinz420"},"content":" private static final String LS \u003d System.lineSeparator();","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"kevinz420"},"content":" private static final String DIVIDER \u003d \"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\";","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"kevinz420"},"content":" * Format of indexed list item","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"kevinz420"},"content":" private static final String MESSAGE_INDEXED_LIST_ITEM \u003d \"\\t%1$d. %2$s\";","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"kevinz420"},"content":" * Format of a comment input line. Comment lines are silently consumed when reading user input.","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"kevinz420"},"content":" private static final String COMMENT_LINE_FORMAT_REGEX \u003d \"#.*\";","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"kevinz420"},"content":" private final Scanner in;","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"kevinz420"},"content":" private final PrintStream out;","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"kevinz420"},"content":" public TextUi() {","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"kevinz420"},"content":" this(System.in, System.out);","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"kevinz420"},"content":" public TextUi(InputStream in, PrintStream out) {","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"kevinz420"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"kevinz420"},"content":" this.out \u003d out;","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"kevinz420"},"content":" * Returns true if the user input line should be ignored.","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"kevinz420"},"content":" * Input should be ignored if it is parsed as a comment, is only whitespace, or is empty.","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"kevinz420"},"content":" * @param rawInputLine full raw user input line.","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"kevinz420"},"content":" * @return true if the entire user input line should be ignored.","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"kevinz420"},"content":" private boolean shouldIgnore(String rawInputLine) {","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"kevinz420"},"content":" return rawInputLine.trim().isEmpty() || isCommentLine(rawInputLine);","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"kevinz420"},"content":" * Returns true if the user input line is a comment line.","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"kevinz420"},"content":" * @param rawInputLine full raw user input line.","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"kevinz420"},"content":" * @return true if input line is a comment.","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"kevinz420"},"content":" private boolean isCommentLine(String rawInputLine) {","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"kevinz420"},"content":" return rawInputLine.trim().matches(COMMENT_LINE_FORMAT_REGEX);","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"kevinz420"},"content":" * Prompts for the command and reads the text entered by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"kevinz420"},"content":" * Ignores empty, pure whitespace, and comment lines.","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"kevinz420"},"content":" * Echos the command back to the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"kevinz420"},"content":" * @return command (full line) entered by the user","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"kevinz420"},"content":" public String getUserCommand() {","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"kevinz420"},"content":" out.print(LINE_PREFIX + \"Enter command: \");","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"kevinz420"},"content":" String fullInputLine \u003d in.nextLine();","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"kevinz420"},"content":" // silently consume all ignored lines","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"kevinz420"},"content":" while (shouldIgnore(fullInputLine)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"kevinz420"},"content":" fullInputLine \u003d in.nextLine();","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"kevinz420"},"content":" showToUser(\"[Command entered:\" + fullInputLine + \"]\");","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"kevinz420"},"content":" return fullInputLine;","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"kevinz420"},"content":" * Generates and prints the welcome message upon the start of the application.","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"kevinz420"},"content":" * @param version current version of the application.","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"kevinz420"},"content":" * @param storageFilePath path to the storage file being used.","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"kevinz420"},"content":" public void showWelcomeMessage(String version, String storageFilePath) {","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"kevinz420"},"content":" String storageFileInfo \u003d String.format(MESSAGE_USING_STORAGE_FILE, storageFilePath);","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"kevinz420"},"content":" showToUser(","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"kevinz420"},"content":" DIVIDER,","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"kevinz420"},"content":" DIVIDER,","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"kevinz420"},"content":" MESSAGE_WELCOME,","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"kevinz420"},"content":" version,","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"kevinz420"},"content":" MESSAGE_PROGRAM_LAUNCH_ARGS_USAGE,","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"kevinz420"},"content":" storageFileInfo,","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"kevinz420"},"content":" DIVIDER);","lastModifiedDate":"2023-10-15"},{"lineNumber":122,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"kevinz420"},"content":" public void showGoodbyeMessage() {","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"kevinz420"},"content":" showToUser(MESSAGE_GOODBYE, DIVIDER, DIVIDER);","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":128,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"kevinz420"},"content":" public void showInitFailedMessage() {","lastModifiedDate":"2023-10-15"},{"lineNumber":130,"author":{"gitId":"kevinz420"},"content":" showToUser(MESSAGE_INIT_FAILED, DIVIDER, DIVIDER);","lastModifiedDate":"2023-10-15"},{"lineNumber":131,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":132,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":133,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":134,"author":{"gitId":"kevinz420"},"content":" * Shows message(s) to the user","lastModifiedDate":"2023-10-15"},{"lineNumber":135,"author":{"gitId":"Remy9926"},"content":" * @param message","lastModifiedDate":"2023-10-20"},{"lineNumber":136,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":137,"author":{"gitId":"kevinz420"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-15"},{"lineNumber":138,"author":{"gitId":"kevinz420"},"content":" for (String m : message) {","lastModifiedDate":"2023-10-15"},{"lineNumber":139,"author":{"gitId":"kevinz420"},"content":" out.println(LINE_PREFIX + m.replace(\"\\n\", LS + LINE_PREFIX));","lastModifiedDate":"2023-10-15"},{"lineNumber":140,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":141,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":142,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":143,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":144,"author":{"gitId":"kevinz420"},"content":" * Shows the result of a command execution to the user. Includes additional formatting to demarcate different","lastModifiedDate":"2023-10-15"},{"lineNumber":145,"author":{"gitId":"kevinz420"},"content":" * command execution segments.","lastModifiedDate":"2023-10-15"},{"lineNumber":146,"author":{"gitId":"Remy9926"},"content":" * @param result","lastModifiedDate":"2023-10-20"},{"lineNumber":147,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":148,"author":{"gitId":"kevinz420"},"content":" public void showResultToUser(CommandResult result) {","lastModifiedDate":"2023-10-15"},{"lineNumber":149,"author":{"gitId":"kevinz420"},"content":" final Optional\u003cList\u003c? extends Printable\u003e\u003e resultItems \u003d result.getRelevantItems();","lastModifiedDate":"2023-10-15"},{"lineNumber":150,"author":{"gitId":"kevinz420"},"content":" if (resultItems.isPresent()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":151,"author":{"gitId":"kevinz420"},"content":" showItemsListView(resultItems.get());","lastModifiedDate":"2023-10-15"},{"lineNumber":152,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":153,"author":{"gitId":"kevinz420"},"content":" showToUser(result.feedbackToUser, DIVIDER);","lastModifiedDate":"2023-10-15"},{"lineNumber":154,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":155,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":156,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":157,"author":{"gitId":"kevinz420"},"content":" * Shows a list of persons to the user, formatted as an indexed list.","lastModifiedDate":"2023-10-15"},{"lineNumber":158,"author":{"gitId":"kevinz420"},"content":" * Private contact details are hidden.","lastModifiedDate":"2023-10-15"},{"lineNumber":159,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":160,"author":{"gitId":"kevinz420"},"content":" private void showItemsListView(List\u003c? extends Printable\u003e items) {","lastModifiedDate":"2023-10-15"},{"lineNumber":161,"author":{"gitId":"kevinz420"},"content":" final List\u003cString\u003e formattedItems \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":162,"author":{"gitId":"kevinz420"},"content":" for (Printable person : items) {","lastModifiedDate":"2023-10-15"},{"lineNumber":163,"author":{"gitId":"kevinz420"},"content":" formattedItems.add(person.getAsText());","lastModifiedDate":"2023-10-15"},{"lineNumber":164,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":165,"author":{"gitId":"kevinz420"},"content":" showToUserAsIndexedList(formattedItems);","lastModifiedDate":"2023-10-15"},{"lineNumber":166,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":167,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":168,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":169,"author":{"gitId":"kevinz420"},"content":" * Shows a list of strings to the user, formatted as an indexed list.","lastModifiedDate":"2023-10-15"},{"lineNumber":170,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":171,"author":{"gitId":"kevinz420"},"content":" private void showToUserAsIndexedList(List\u003cString\u003e list) {","lastModifiedDate":"2023-10-15"},{"lineNumber":172,"author":{"gitId":"kevinz420"},"content":" showToUser(getIndexedListForViewing(list));","lastModifiedDate":"2023-10-15"},{"lineNumber":173,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":174,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":175,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":176,"author":{"gitId":"kevinz420"},"content":" * Formats a list of strings as a viewable indexed list.","lastModifiedDate":"2023-10-15"},{"lineNumber":177,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":178,"author":{"gitId":"kevinz420"},"content":" private static String getIndexedListForViewing(List\u003cString\u003e listItems) {","lastModifiedDate":"2023-10-15"},{"lineNumber":179,"author":{"gitId":"kevinz420"},"content":" final StringBuilder formatted \u003d new StringBuilder();","lastModifiedDate":"2023-10-15"},{"lineNumber":180,"author":{"gitId":"kevinz420"},"content":" int displayIndex \u003d 0 + DISPLAYED_INDEX_OFFSET;","lastModifiedDate":"2023-10-15"},{"lineNumber":181,"author":{"gitId":"kevinz420"},"content":" for (String listItem : listItems) {","lastModifiedDate":"2023-10-15"},{"lineNumber":182,"author":{"gitId":"kevinz420"},"content":" formatted.append(getIndexedListItem(displayIndex, listItem)).append(\"\\n\");","lastModifiedDate":"2023-10-15"},{"lineNumber":183,"author":{"gitId":"kevinz420"},"content":" displayIndex++;","lastModifiedDate":"2023-10-15"},{"lineNumber":184,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":185,"author":{"gitId":"kevinz420"},"content":" return formatted.toString();","lastModifiedDate":"2023-10-15"},{"lineNumber":186,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":187,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":188,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":189,"author":{"gitId":"kevinz420"},"content":" * Formats a string as a viewable indexed list item.","lastModifiedDate":"2023-10-15"},{"lineNumber":190,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":191,"author":{"gitId":"kevinz420"},"content":" * @param visibleIndex visible index for this listing","lastModifiedDate":"2023-10-15"},{"lineNumber":192,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":193,"author":{"gitId":"kevinz420"},"content":" private static String getIndexedListItem(int visibleIndex, String listItem) {","lastModifiedDate":"2023-10-15"},{"lineNumber":194,"author":{"gitId":"kevinz420"},"content":" return String.format(MESSAGE_INDEXED_LIST_ITEM, visibleIndex, listItem);","lastModifiedDate":"2023-10-15"},{"lineNumber":195,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":196,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":197,"author":{"gitId":"J-Y-Yan"},"content":" public void printNumberofGoal(int goalCount) {","lastModifiedDate":"2023-10-19"},{"lineNumber":198,"author":{"gitId":"J-Y-Yan"},"content":" System.out.println(\"You still have \" + goalCount + \" goals to accomplish. Add oil!\" );","lastModifiedDate":"2023-10-19"},{"lineNumber":199,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":200,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":201,"author":{"gitId":"J-Y-Yan"},"content":" public void printDeleteGoal(Goal deletedGoal) {","lastModifiedDate":"2023-10-19"},{"lineNumber":202,"author":{"gitId":"J-Y-Yan"},"content":" System.out.println(\"Good. I have removed this goal: \" + deletedGoal);","lastModifiedDate":"2023-10-19"},{"lineNumber":203,"author":{"gitId":"J-Y-Yan"},"content":" System.out.println(\"Remember not to give up unaccomplished goal! \");","lastModifiedDate":"2023-10-19"},{"lineNumber":204,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":205,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":206,"author":{"gitId":"J-Y-Yan"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":207,"author":{"gitId":"J-Y-Yan"},"content":" * This method is used to implement Goal commend execution, when adding a new goal","lastModifiedDate":"2023-10-19"},{"lineNumber":208,"author":{"gitId":"J-Y-Yan"},"content":" * @param goals the goals list which is under operation","lastModifiedDate":"2023-10-19"},{"lineNumber":209,"author":{"gitId":"J-Y-Yan"},"content":" * @return string contains information of generating a new goal successfully","lastModifiedDate":"2023-10-19"},{"lineNumber":210,"author":{"gitId":"J-Y-Yan"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":211,"author":{"gitId":"J-Y-Yan"},"content":" public static String addGoalSuccessMessage(GoalList goals) {","lastModifiedDate":"2023-10-19"},{"lineNumber":212,"author":{"gitId":"J-Y-Yan"},"content":" int currentNoOfGoal \u003d goals.getGoalCount();","lastModifiedDate":"2023-10-19"},{"lineNumber":213,"author":{"gitId":"J-Y-Yan"},"content":" Goal newlyAddedGoal \u003d goals.getGoal(currentNoOfGoal - 1);","lastModifiedDate":"2023-10-19"},{"lineNumber":214,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":215,"author":{"gitId":"J-Y-Yan"},"content":" return \"Nice! I have added the following goal to your goal lists: \\n\\t\" + newlyAddedGoal;","lastModifiedDate":"2023-10-19"},{"lineNumber":216,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":217,"author":{"gitId":"J-Y-Yan"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":218,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"J-Y-Yan":23,"kevinz420":193,"Remy9926":2}},{"path":"src/test/java/seedu/duke/exerciselog/DayTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.exerciselog;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":"public class DayTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":" DayTest test \u003d new DayTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":" test.containsExercisesTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" test.getExerciseTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" test.toStringTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" public void containsExercisesTest() {","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" Day day \u003d new Day();","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":" assertFalse(day.containsExercises());","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":" day.addExercise(\"Swimming\", 0);","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" assert day.containsExercises();","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" day.removeExercise(\"Swimming\", 0);","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" assert !day.containsExercises();","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" public void getExerciseTest() {","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" Day day \u003d new Day();","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" day.addExercise(\"Basketball\", 197);","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" assertEquals(day.getExercise(1), new Exercise(\"Basketball\", 197));","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":" assert day.getNumberOfExercises() \u003d\u003d 1;","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" public void toStringTest() {","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" Day day \u003d new Day();","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" assert day.toString().equals(\"\\tNO EXCERCISES FOR THIS DAY!\\n\");","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" System.out.println(day);","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" day.addExercise(\"chicken\", 28);","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":" System.out.println(day);","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":" assert day.toString().equals(\"\\tExercise: chicken, Calories Burned: 28 Calories\\n\");","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Remy9926":38}},{"path":"src/test/java/seedu/duke/exerciselog/ExerciseTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.exerciselog;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":"import static org.junit.jupiter.api.Assertions.assertNotEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":"public class ExerciseTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":" ExerciseTest test \u003d new ExerciseTest();","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":" test.initializeExerciseTest();","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" test.initializeExerciseTest2();","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" test.testEqualsMethod();","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" test.testToStringMethod();","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":" test.setNewExerciseNameTest();","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" test.setNewCaloriesBurnedTest();","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" assert true;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" public void initializeExerciseTest() {","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" Exercise testExercise \u003d new Exercise(\"Running\", 280);","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" assertEquals(testExercise.getExerciseName(), \"Running\");","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" assertEquals(testExercise.getCaloriesBurned(), 280);","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" public void initializeExerciseTest2() {","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" Exercise testExercise \u003d new Exercise(\"Running\", 280);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" assertNotEquals(testExercise.getExerciseName(), \"running\");","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":" assertNotEquals(testExercise.getCaloriesBurned(), 2800);","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" public void testEqualsMethod() {","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" Exercise testExercise \u003d new Exercise(\"Walking\", 100);","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" assertEquals(testExercise, new Exercise(\"Walking\", 100));","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" assertNotEquals(testExercise, new Exercise(\"Swimming\", 100));","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":" public void testToStringMethod() {","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"Remy9926"},"content":" Exercise testExercise \u003d new Exercise(\"Golfing\", 76);","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"Remy9926"},"content":" assertEquals(testExercise.toString(), \"Exercise: Golfing, Calories Burned: 76 Calories\\n\");","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"Remy9926"},"content":" public void setNewExerciseNameTest() {","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"Remy9926"},"content":" Exercise testExercise \u003d new Exercise(\"Floorball\", 143);","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"Remy9926"},"content":" testExercise.setExerciseName(\"hockey\");","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"Remy9926"},"content":" assertEquals(testExercise.getExerciseName(), \"hockey\");","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"Remy9926"},"content":" public void setNewCaloriesBurnedTest() {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"Remy9926"},"content":" Exercise testExercise \u003d new Exercise(\"Football\", 309);","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"Remy9926"},"content":" testExercise.setCaloriesBurned(229);","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"Remy9926"},"content":" assert testExercise.getCaloriesBurned() \u003d\u003d 229;","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Remy9926":52}},{"path":"src/test/java/seedu/duke/exerciselog/LogTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.exerciselog;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"public class LogTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":" LogTest test \u003d new LogTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":" test.getNumberOfExercisesTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":" test.addAndRemoveExerciseTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" public void getNumberOfExercisesTest() {","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" Log log \u003d new Log();","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":" assert log.getNumberOfExercises() \u003d\u003d 0;","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":" assert log.getNumberOfExercisesForMonth(1) \u003d\u003d 0;","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" assert log.getNumberOfExercisesForDay(1, 21) \u003d\u003d 0;","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":" public void addAndRemoveExerciseTest() {","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":" Log log \u003d new Log();","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" log.addExercise(6, 7, \"Exercise\", 8999999);","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" log.addExercise(8, 24, \"Exercise\", 112);","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" assert log.getNumberOfExercises() \u003d\u003d 2;","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" log.removeExercise(6, 7, \"Exercise\", 8999999);","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" assert log.getNumberOfExercises() \u003d\u003d 1;","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" log.removeExercise(8, 24, \"Exercise\", 112);","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" assert log.getNumberOfExercises() \u003d\u003d 0;","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Remy9926":27}},{"path":"src/test/java/seedu/duke/exerciselog/MonthTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"Remy9926"},"content":"package seedu.duke.exerciselog;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"Remy9926"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Remy9926"},"content":"public class MonthTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"Remy9926"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"Remy9926"},"content":" MonthTest test \u003d new MonthTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"Remy9926"},"content":" test.createMonthTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Remy9926"},"content":" test.addExerciseTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"Remy9926"},"content":" test.removeExerciseTest();","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Remy9926"},"content":" public void createMonthTest() {","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"Remy9926"},"content":" Month month \u003d new Month(31, \"JAN\");","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"Remy9926"},"content":" assert month.getName().equals(\"JAN\");","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"Remy9926"},"content":" assert month.getNumberOfDays() \u003d\u003d 31;","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"Remy9926"},"content":" public void addExerciseTest() {","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"Remy9926"},"content":" Month month \u003d new Month(28, \"FEB\");","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"Remy9926"},"content":" month.addExercise(3, \"Volleyball\", 79);","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"Remy9926"},"content":" assertEquals(month.getNumberOfExercisesForDay(3), 1);","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"Remy9926"},"content":" month.addExercise(14, \"Running\", 121);","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"Remy9926"},"content":" assert month.getNumberOfExercisesForDay(14) \u003d\u003d 1;","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"Remy9926"},"content":" assert month.getTotalNumberOfExercises() \u003d\u003d 2;","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"Remy9926"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"Remy9926"},"content":" public void removeExerciseTest() {","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"Remy9926"},"content":" Month month \u003d new Month(28, \"FEB\");","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"Remy9926"},"content":" month.addExercise(3, \"Volleyball\", 79);","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"Remy9926"},"content":" month.addExercise(14, \"Running\", 121);","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"Remy9926"},"content":" month.removeExercise(3, \"Volleyball\", 79);","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"Remy9926"},"content":" assert month.getNumberOfExercisesForDay(3) \u003d\u003d 0;","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"Remy9926"},"content":" assert month.getTotalNumberOfExercises() \u003d\u003d 1;","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"Remy9926"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"Remy9926"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Remy9926":36}},{"path":"src/test/java/seedu/duke/parser/ParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"kevinz420"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"kevinz420"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"kevinz420"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"kevinz420"},"content":"import static seedu.duke.common.Messages.MESSAGE_INVALID_COMMAND_FORMAT;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"kevinz420"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"kevinz420"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.commands.Command;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.commands.ExitCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.commands.HelpCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"kevinz420"},"content":"import seedu.duke.commands.IncorrectCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"kevinz420"},"content":"public class ParserTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"kevinz420"},"content":" private Parser parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"kevinz420"},"content":" @BeforeEach","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"kevinz420"},"content":" public void setUp() {","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"kevinz420"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"kevinz420"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"kevinz420"},"content":" public void parse_emptyInput_returnsIncorrect() {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"kevinz420"},"content":" final String[] emptyInputs \u003d { \"\", \" \", \"\\n \\n\" };","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"kevinz420"},"content":" final String resultMessage \u003d String.format(MESSAGE_INVALID_COMMAND_FORMAT, HelpCommand.MESSAGE_USAGE);","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"kevinz420"},"content":" parseAndAssertIncorrectWithMessage(resultMessage, emptyInputs);","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"kevinz420"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"kevinz420"},"content":" public void parse_unknownCommandWord_returnsHelp() {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"kevinz420"},"content":" final String input \u003d \"unknowncommandword arguments arguments\";","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"kevinz420"},"content":" parseAndAssertCommandType(input, HelpCommand.class);","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"kevinz420"},"content":" /*","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"kevinz420"},"content":" * Tests for 0-argument commands \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"kevinz420"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"kevinz420"},"content":" public void parse_helpCommand_parsedCorrectly() {","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"kevinz420"},"content":" final String input \u003d \"help\";","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"kevinz420"},"content":" parseAndAssertCommandType(input, HelpCommand.class);","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"kevinz420"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"kevinz420"},"content":" public void parse_exitCommand_parsedCorrectly() {","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"kevinz420"},"content":" final String input \u003d \"exit\";","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"kevinz420"},"content":" parseAndAssertCommandType(input, ExitCommand.class);","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"kevinz420"},"content":" /*","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"kevinz420"},"content":" * Utility methods \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"kevinz420"},"content":" * Asserts that parsing the given inputs will return IncorrectCommand with the given feedback message.","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"kevinz420"},"content":" private void parseAndAssertIncorrectWithMessage(String feedbackMessage, String... inputs) {","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"kevinz420"},"content":" for (String input : inputs) {","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"kevinz420"},"content":" final IncorrectCommand result \u003d parseAndAssertCommandType(input, IncorrectCommand.class);","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"kevinz420"},"content":" assertEquals(result.feedbackToUser, feedbackMessage);","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"kevinz420"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"kevinz420"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"kevinz420"},"content":" * Parses input and asserts the class/type of the returned command object.","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"kevinz420"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"kevinz420"},"content":" * @param input to be parsed","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"kevinz420"},"content":" * @param expectedCommandClass expected class of returned command","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"kevinz420"},"content":" * @return the parsed command object","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"kevinz420"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"kevinz420"},"content":" private \u003cT extends Command\u003e T parseAndAssertCommandType(String input, Class\u003cT\u003e expectedCommandClass) {","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"kevinz420"},"content":" final Command result \u003d parser.parseCommand(input);","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"kevinz420"},"content":" assertTrue(result.getClass().isAssignableFrom(expectedCommandClass));","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"kevinz420"},"content":" return (T) result;","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"kevinz420"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"kevinz420"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"kevinz420":78}},{"path":"text-ui-test/UploadCommand.cmd","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"MrOPPA1"},"content":"rem customize the tag name and message here","lastModifiedDate":"2023-10-06"},{"lineNumber":2,"author":{"gitId":"MrOPPA1"},"content":"set TAG_NAME\u003dfengguangyao","lastModifiedDate":"2023-10-06"},{"lineNumber":3,"author":{"gitId":"MrOPPA1"},"content":"set MESSAGE\u003d\"Personal Job\"","lastModifiedDate":"2023-10-06"},{"lineNumber":4,"author":{"gitId":"MrOPPA1"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":5,"author":{"gitId":"MrOPPA1"},"content":"rem create a branch","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"MrOPPA1"},"content":"git branch %TAG_NAME%","lastModifiedDate":"2023-10-06"},{"lineNumber":7,"author":{"gitId":"MrOPPA1"},"content":"git switch %TAG_NAME%","lastModifiedDate":"2023-10-06"},{"lineNumber":8,"author":{"gitId":"MrOPPA1"},"content":"rem commit all changes","lastModifiedDate":"2023-10-06"},{"lineNumber":9,"author":{"gitId":"MrOPPA1"},"content":"git add .","lastModifiedDate":"2023-10-06"},{"lineNumber":10,"author":{"gitId":"MrOPPA1"},"content":"git commit -m %MESSAGE%","lastModifiedDate":"2023-10-06"},{"lineNumber":11,"author":{"gitId":"MrOPPA1"},"content":"git push origin %TAG_NAME%","lastModifiedDate":"2023-10-06"}],"authorContributionMap":{"MrOPPA1":11}},{"path":"tp/.idea/checkstyle-idea.xml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"J-Y-Yan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"J-Y-Yan"},"content":"\u003cproject version\u003d\"4\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"CheckStyle-IDEA\" serialisationVersion\u003d\"2\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccheckstyleVersion\u003e10.12.3\u003c/checkstyleVersion\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"J-Y-Yan"},"content":" \u003cscanScope\u003eJavaOnly\u003c/scanScope\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccopyLibs\u003etrue\u003c/copyLibs\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"thirdPartyClasspath\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"activeLocationIds\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"locations\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"J-Y-Yan"},"content":" \u003clist\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"J-Y-Yan"},"content":" \u003cConfigurationLocation id\u003d\"bundled-sun-checks\" type\u003d\"BUNDLED\" scope\u003d\"All\" description\u003d\"Sun Checks\"\u003e(bundled)\u003c/ConfigurationLocation\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"J-Y-Yan"},"content":" \u003cConfigurationLocation id\u003d\"bundled-google-checks\" type\u003d\"BUNDLED\" scope\u003d\"All\" description\u003d\"Google Checks\"\u003e(bundled)\u003c/ConfigurationLocation\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/list\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/option\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"J-Y-Yan"},"content":"\u003c/project\u003e","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"J-Y-Yan":16}},{"path":"tp/.idea/vcs.xml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"J-Y-Yan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"J-Y-Yan"},"content":"\u003cproject version\u003d\"4\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"VcsDirectoryMappings\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"J-Y-Yan"},"content":" \u003cmapping directory\u003d\"$PROJECT_DIR$/..\" vcs\u003d\"Git\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"J-Y-Yan"},"content":"\u003c/project\u003e","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"J-Y-Yan":6}},{"path":"tp/.idea/workspace.xml","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"J-Y-Yan"},"content":"\u003c?xml version\u003d\"1.0\" encoding\u003d\"UTF-8\"?\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"J-Y-Yan"},"content":"\u003cproject version\u003d\"4\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"AutoImportSettings\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"autoReloadType\" value\u003d\"SELECTIVE\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"ChangeListManager\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"J-Y-Yan"},"content":" \u003clist default\u003d\"true\" id\u003d\"46305296-6e41-460c-93f6-a188eb9d1e4d\" name\u003d\"Changes\" comment\u003d\"\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"SHOW_DIALOG\" value\u003d\"false\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"HIGHLIGHT_CONFLICTS\" value\u003d\"true\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"HIGHLIGHT_NON_ACTIVE_CHANGELIST\" value\u003d\"false\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"LAST_RESOLUTION\" value\u003d\"IGNORE\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"ExternalProjectsData\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"J-Y-Yan"},"content":" \u003cprojectState path\u003d\"$PROJECT_DIR$\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"J-Y-Yan"},"content":" \u003cProjectState /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/projectState\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"ExternalProjectsManager\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"J-Y-Yan"},"content":" \u003csystem id\u003d\"GRADLE\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"J-Y-Yan"},"content":" \u003cstate\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"J-Y-Yan"},"content":" \u003cprojects_view\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"J-Y-Yan"},"content":" \u003ctree_state\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"J-Y-Yan"},"content":" \u003cexpand /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"J-Y-Yan"},"content":" \u003cselect /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/tree_state\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/projects_view\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/state\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/system\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"FileTemplateManagerImpl\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"RECENT_TEMPLATES\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"J-Y-Yan"},"content":" \u003clist\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption value\u003d\"Class\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/list\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/option\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"Git.Settings\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"RECENT_GIT_ROOT_PATH\" value\u003d\"$PROJECT_DIR$/..\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"MarkdownSettingsMigration\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"stateVersion\" value\u003d\"1\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"ProjectColorInfo\"\u003e{","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"J-Y-Yan"},"content":" \u0026quot;customColor\u0026quot;: \u0026quot;\u0026quot;,","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"J-Y-Yan"},"content":" \u0026quot;associatedIndex\u0026quot;: 3","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"J-Y-Yan"},"content":"}\u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":47,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"ProjectId\" id\u003d\"2Wv9jKq5KpsiP8JQSMJuBqpmuB1\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":48,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"ProjectLevelVcsManager\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":49,"author":{"gitId":"J-Y-Yan"},"content":" \u003cConfirmationsSetting value\u003d\"1\" id\u003d\"Add\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"ProjectViewState\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":52,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"hideEmptyMiddlePackages\" value\u003d\"true\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"showLibraryContents\" value\u003d\"true\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"PropertiesComponent\"\u003e\u003c![CDATA[{","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"J-Y-Yan"},"content":" \"keyToString\": {","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"J-Y-Yan"},"content":" \"RunOnceActivity.OpenProjectViewOnStart\": \"true\",","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"J-Y-Yan"},"content":" \"RunOnceActivity.ShowReadmeOnStart\": \"true\",","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"J-Y-Yan"},"content":" \"WebServerToolWindowFactoryState\": \"false\",","lastModifiedDate":"2023-10-19"},{"lineNumber":60,"author":{"gitId":"J-Y-Yan"},"content":" \"git-widget-placeholder\": \"goal\",","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"J-Y-Yan"},"content":" \"last_opened_file_path\": \"D:/Programming/CS2113/Team Project\",","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"J-Y-Yan"},"content":" \"node.js.detected.package.eslint\": \"true\",","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"J-Y-Yan"},"content":" \"node.js.detected.package.tslint\": \"true\",","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"J-Y-Yan"},"content":" \"node.js.selected.package.eslint\": \"(autodetect)\",","lastModifiedDate":"2023-10-19"},{"lineNumber":65,"author":{"gitId":"J-Y-Yan"},"content":" \"node.js.selected.package.tslint\": \"(autodetect)\",","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"J-Y-Yan"},"content":" \"nodejs_package_manager_path\": \"npm\",","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"J-Y-Yan"},"content":" \"vue.rearranger.settings.migration\": \"true\"","lastModifiedDate":"2023-10-19"},{"lineNumber":68,"author":{"gitId":"J-Y-Yan"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":69,"author":{"gitId":"J-Y-Yan"},"content":"}]]\u003e\u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":70,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"SpellCheckerSettings\" RuntimeDictionaries\u003d\"0\" Folders\u003d\"0\" CustomDictionaries\u003d\"0\" DefaultDictionary\u003d\"application-level\" UseSingleDictionary\u003d\"true\" transferred\u003d\"true\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":71,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"TaskManager\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":72,"author":{"gitId":"J-Y-Yan"},"content":" \u003ctask active\u003d\"true\" id\u003d\"Default\" summary\u003d\"Default task\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":73,"author":{"gitId":"J-Y-Yan"},"content":" \u003cchangelist id\u003d\"46305296-6e41-460c-93f6-a188eb9d1e4d\" name\u003d\"Changes\" comment\u003d\"\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":74,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccreated\u003e1697602324590\u003c/created\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":75,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"number\" value\u003d\"Default\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":76,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"presentableId\" value\u003d\"Default\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":77,"author":{"gitId":"J-Y-Yan"},"content":" \u003cupdated\u003e1697602324590\u003c/updated\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":78,"author":{"gitId":"J-Y-Yan"},"content":" \u003cworkItem from\u003d\"1697602329602\" duration\u003d\"41000\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":79,"author":{"gitId":"J-Y-Yan"},"content":" \u003cworkItem from\u003d\"1697602381500\" duration\u003d\"17642000\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":80,"author":{"gitId":"J-Y-Yan"},"content":" \u003cworkItem from\u003d\"1697648699355\" duration\u003d\"26000\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":81,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/task\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":82,"author":{"gitId":"J-Y-Yan"},"content":" \u003cservers /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":83,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":84,"author":{"gitId":"J-Y-Yan"},"content":" \u003ccomponent name\u003d\"TypeScriptGeneratedFilesManager\"\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":85,"author":{"gitId":"J-Y-Yan"},"content":" \u003coption name\u003d\"version\" value\u003d\"3\" /\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":86,"author":{"gitId":"J-Y-Yan"},"content":" \u003c/component\u003e","lastModifiedDate":"2023-10-19"},{"lineNumber":87,"author":{"gitId":"J-Y-Yan"},"content":"\u003c/project\u003e","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"J-Y-Yan":87}}] diff --git a/AY2324S1-CS2113-F11-1_tp_master/commits.json b/AY2324S1-CS2113-F11-1_tp_master/commits.json index 95db515..313eeca 100644 --- a/AY2324S1-CS2113-F11-1_tp_master/commits.json +++ b/AY2324S1-CS2113-F11-1_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"J-Y-Yan":[{"date":"2023-10-19","commitResults":[{"hash":"5f22d57a178e453d90da4715839d496b2815d6b6","isMergeCommit":false,"messageTitle":"Add new constructor for command class with String input parameter, representing user command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0},"other":{"insertions":109,"deletions":0}}},{"hash":"4b94d0d28de155d434528f4ee144a253318b5960","isMergeCommit":false,"messageTitle":"Add goal funationality * Add Goal class to represent goal object * Add GoalList class to represent goal list containing the goal objects * Add GoalCommand class to implement the execution of goal command","messageBody":"Noting that Goal and GoalList is created seperated in different class because they exhibit different properties. For example, a goal object have its fields like goal content and finished time, but a goalList object should have fields like the number of data inside a goal.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":137,"deletions":0}}},{"hash":"79ef7a2ea66fa876a5e40bbdcbc541c2e595ff80","isMergeCommit":false,"messageTitle":"Add exception class IncorrectFormatException to tackle the input format of the goal command from user","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":0}}},{"hash":"c7009a4977277a9bf85129306080149cb22f4993","isMergeCommit":false,"messageTitle":"Add more Ui related method to release messages about adding or deleting new goal successfully","messageBody":"Change the parent class of IllegalValueException class from Exception to IncorrectFormatException. This could reduces the number of signature when throwing exception and tidy up the code\n","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":1}}},{"hash":"88c61f6f274b5e518d07f25ee37a47fa08d02804","isMergeCommit":false,"messageTitle":"Correct error in coding style for GoalCommand class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":10}}},{"hash":"374777329b89b44a555b6eb48ef471ba52261d26","isMergeCommit":false,"messageTitle":"Improve the documentation to match with standard","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"3205e482e8bdebf42d6ac6185b2f0c091df1341a","isMergeCommit":true,"messageTitle":"Merge pull request #16 from AY2324S1-CS2113-F11-1/goal","messageBody":"Add goal functionality","fileTypesAndContributionMap":{}},{"hash":"2a2086f5ac4efc3ed1272d35b3b2a951d969ad69","isMergeCommit":false,"messageTitle":"Add new parser case for goal command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":4}}},{"hash":"807a80a349556af52320ce58050bce5f19079235","isMergeCommit":false,"messageTitle":"Change the execution method of goalCommand class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":6}}}]}],"kevinz420":[{"date":"2023-10-06","commitResults":[{"hash":"c66131313af3a0dbcd8c602250607835d738bf59","isMergeCommit":false,"messageTitle":"Add About Us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}}]},{"date":"2023-10-15","commitResults":[{"hash":"eb1ae54b61dd5bed80d0d9df4c621c086a2d81af","isMergeCommit":false,"messageTitle":"Added basic text UI and core commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":609,"deletions":25}}},{"hash":"36c6e30c185b9f80e55f4ec6b9638cf172f73c03","isMergeCommit":false,"messageTitle":"Added parser tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":9},"test-code":{"insertions":78,"deletions":0}}}]}],"MrOPPA1":[{"date":"2023-10-06","commitResults":[{"hash":"f0cf1bd55fd25b10ce0dca9f46bbdcaf9a591fa6","isMergeCommit":false,"messageTitle":"init","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":0}}}]},{"date":"2023-10-19","commitResults":[{"hash":"662746e2d6b5b343cf359c1c684cefc1822efc75","isMergeCommit":false,"messageTitle":"Add Meal class. Add Add Meal Command. (for integrating general functions of meal-related commands) Add Date class. Add DateTime class. Add \u0027throws Exception\u0027 to Command class.","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":239,"deletions":1}}}]},{"date":"2023-10-20","commitResults":[{"hash":"5106842b4468b0bf3c5a6493d8bda2d4671aea4b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c0899a9086a9bef624db627df2eaf2b98a7aede1","isMergeCommit":true,"messageTitle":"Merge pull request #14 from MrOPPA1/master","messageBody":"Meal Logging","fileTypesAndContributionMap":{}},{"hash":"223a438cffe373f7496459702b7962362601fbad","isMergeCommit":false,"messageTitle":"fix bugs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":96,"deletions":88}}}]}],"Remy9926":[{"date":"2023-10-06","commitResults":[{"hash":"5c8e51ad415cfc6d7d3e7035afac300a3c1be537","isMergeCommit":false,"messageTitle":"Add Ethan to docs/AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"ee26f976d47a7e4d6bd74e8f6023dc6083cfd0b7","isMergeCommit":true,"messageTitle":"Merge branch \u0027ethanHuang-AboutUs\u0027","messageBody":"Merge ethanHuang-AboutUs branch to master\n","fileTypesAndContributionMap":{}}]},{"date":"2023-10-07","commitResults":[{"hash":"8ab578e1d646eca743b9e63a986c47d7e9b00e4a","isMergeCommit":false,"messageTitle":"Take in user input and spit it back out to user","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":1}}},{"hash":"446c18151b5fcf69cf4f402ce261d0a4f0d20e6f","isMergeCommit":false,"messageTitle":"Add FitNUS logo","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":6}}}]},{"date":"2023-10-08","commitResults":[{"hash":"90b9c9838da03a478bd8c2820c859a543bf58177","isMergeCommit":false,"messageTitle":"Ask user for name Create greetUser method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":8}}},{"hash":"ca9d43fa3b4748ce181910b5a688633d9192c16c","isMergeCommit":false,"messageTitle":"Make user input case insensitive and strip any whitespace","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":6}}}]},{"date":"2023-10-12","commitResults":[{"hash":"8153fe15e48899f589484df59b507a85c8a288c9","isMergeCommit":true,"messageTitle":"Merge pull request #1 from kevinz420/kevinzhang-AboutUs","messageBody":"Add About Us","fileTypesAndContributionMap":{}},{"hash":"da19d11346e8cd6bd2f34c247c9fa3243db69de8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1a19a244189698cd2a7e1c318cbd977067c84c7c","isMergeCommit":true,"messageTitle":"Merge pull request #3 from Remy9926/master","messageBody":"Add Ethan to docs/AboutUs.md","fileTypesAndContributionMap":{}},{"hash":"abe5ecb3237d9ded49175c774128e1b874492ad4","isMergeCommit":true,"messageTitle":"Merge pull request #5 from Remy9926/take-user-input","messageBody":"Take user input and spit it back to user","fileTypesAndContributionMap":{}},{"hash":"bc396c118e9625114a04bd1c71587555080741ae","isMergeCommit":true,"messageTitle":"Update input.txt and EXPECTED.txt","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"00f9e7920cd6bd98575d8c88417d6c8b4813b9bc","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-F11-1/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"a1ad53f518ee683ce633886d89a218ef0c33434e","isMergeCommit":true,"messageTitle":"Merge pull request #10 from kevinz420/feature-project-setup","messageBody":"Implement initial project setup and core functionalities","fileTypesAndContributionMap":{}},{"hash":"5ea2a0d7bc0da1a4d70fac23fd8b4058a688463f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-F11-1/tp Implement initial project setup and core functionalities","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ce70a872c9a314035f3e3a45a68076b4de2a4b39","isMergeCommit":false,"messageTitle":"Add Log, Month, Day, Exercise classes and functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":170,"deletions":0}}},{"hash":"4929de954dd53c5dad4a2c31807d657d07682721","isMergeCommit":false,"messageTitle":"Add ExerciseLogTest Class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"522a5e358b43ec3b3983c894e4348c1fdccc6402","isMergeCommit":false,"messageTitle":"Add toString to all classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":77,"deletions":16}}}]},{"date":"2023-10-16","commitResults":[{"hash":"fc274231ac4b8e5e93a3b15e48ddc9b5a817c1b3","isMergeCommit":false,"messageTitle":"Create LogCommand class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"38db96ca3ba4455bd7d7ed7bbea54e9450a1d4d2","isMergeCommit":false,"messageTitle":"Add execute method to LogCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":1}}},{"hash":"adf775750c7e309a5c29805d162c4981a1fc234f","isMergeCommit":false,"messageTitle":"Create logcommands package and DeleteLogCommand class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0},"other":{"insertions":3,"deletions":1}}},{"hash":"36e08f785c3b2a892ae598f8522940e9050e7327","isMergeCommit":false,"messageTitle":"Add execute method to DeleteLogCommand class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":16}}},{"hash":"4e0332fbbb4b30041a6c18ffe5e26f2c46d00eb0","isMergeCommit":false,"messageTitle":"Add ViewLogCommand class, Refactor LogCommand and DeleteLogCommand classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":17,"deletions":2}}},{"hash":"b3934a3c339e6cbda3d70db6bd7301be3a99ac9f","isMergeCommit":false,"messageTitle":"Add ViewLogCommand execute method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":63,"deletions":1}}},{"hash":"469607e9b98b1d2110d7b0ff733730cae98d235d","isMergeCommit":false,"messageTitle":"Remove print method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":7}}}]},{"date":"2023-10-17","commitResults":[{"hash":"287b56f8bbf00af8b4533414fb302536f3afd7bf","isMergeCommit":false,"messageTitle":"Add COMMAND_WORD to LogCommand classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"95a7ff2b6041f1284eeae257ccd3d91c0e4ca5c7","isMergeCommit":false,"messageTitle":"Allow Parser to return LogCommands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":0}}},{"hash":"8c91cd2b5f0d9862ce361b5be53586ff10fe0691","isMergeCommit":false,"messageTitle":"Move ExerciseLogTest to test folder","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":10}}},{"hash":"8ce990f29e6d80496988b0fac5dd0608f7793c39","isMergeCommit":false,"messageTitle":"Add ExerciseLog class tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":22,"deletions":0}}},{"hash":"ea1c495be1e79c1c854259eb462e7aeb10eefe0d","isMergeCommit":false,"messageTitle":"Add Test Classes for exerciselog","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":8,"deletions":0}}},{"hash":"e8411d11e3763c676960c33131d8c377b2f41693","isMergeCommit":false,"messageTitle":"Rename Exercise name field to exerciseName","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":6}}},{"hash":"f2d00f6fa1b886f11a36948cdd1c7311dc7458c9","isMergeCommit":false,"messageTitle":"Fix getExerciseName method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"5cb514b0c4c443a3ae1b79dfdc5696befc5b75bd","isMergeCommit":false,"messageTitle":"Edit Exercise class equals method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":2}}},{"hash":"f3bbdecf2e2c4fb04aa4cd4d47c30d6ce9885a34","isMergeCommit":false,"messageTitle":"Add Exercise Tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":47,"deletions":0}}},{"hash":"34664cd62ac912690adccfca896a2f4c5806f2d5","isMergeCommit":false,"messageTitle":"Remove redundant import in ExerciseTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":2}}},{"hash":"f655b24820dd6577ea6b6f7f1db02d34aa0440f0","isMergeCommit":false,"messageTitle":"Remove unused imports from tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":7,"deletions":4}}}]},{"date":"2023-10-18","commitResults":[{"hash":"353e6bfd42f0259f43b3d3f8166a848f02f26033","isMergeCommit":false,"messageTitle":"Add asserts to ExerciseTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":0}}}]},{"date":"2023-10-19","commitResults":[{"hash":"6631c1de1e0c186922c92dac0fca53596699e75d","isMergeCommit":false,"messageTitle":"Add more asserts to ExerciseTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}},{"hash":"d5c361d22ddb346eda70b02a7edbdddee1f34583","isMergeCommit":false,"messageTitle":"Add containsExercises to Day Class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"5819ae61359de0302cc1dfb05dce4eca39c890f6","isMergeCommit":false,"messageTitle":"Remove getExercises method from Day","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4}}},{"hash":"13d95ec3191221af3cc58a835234e3aec5b0b336","isMergeCommit":false,"messageTitle":"Remove unnecessary methods from Day, Log, Month classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":21}}},{"hash":"15ccd19710de8236a503ac0e6f47c028ed7bbefd","isMergeCommit":false,"messageTitle":"Add tests to Day Class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":30,"deletions":1}}},{"hash":"05f6dfc7fcb565d866836a5e2f0f0b411cb7199a","isMergeCommit":false,"messageTitle":"Rename numberOfDays method to getNumberOfDays","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"a173eb0073fef3d98857829adeb806f5f7cdadc6","isMergeCommit":false,"messageTitle":"Rename methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":8}}},{"hash":"d03e7b422e7b14bda3bb6f4f8e52e86ad358585d","isMergeCommit":false,"messageTitle":"Add tests to Month class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":28,"deletions":1}}},{"hash":"ad189e88085884b2a0bd5c8792233896f0f7639d","isMergeCommit":false,"messageTitle":"Add tests to Log class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":21,"deletions":1}}}]},{"date":"2023-10-20","commitResults":[{"hash":"45ba6ffea03d3bdc9f916495b447ce6b4ba6f018","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into exercise-log-class","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2b1ec01e9b1f69a8ed8a3ee190b48a8f378c0e74","isMergeCommit":true,"messageTitle":"Merge pull request #11 from Remy9926/exercise-log-class","messageBody":"Add ExerciseLog class","fileTypesAndContributionMap":{}},{"hash":"8f246d9ee26c73c489e18dddb9ba7b7fd5de1b4f","isMergeCommit":false,"messageTitle":"Implement ExerciseLog into Duke","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":44,"deletions":40}}},{"hash":"945441b4068b4a38b800a63ba5aa9d1ce79c5d98","isMergeCommit":true,"messageTitle":"Resolve Merge Conflict in Parser Class","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"46d39d9919d80f1e81bf80f5b5d998706dc4aecd","isMergeCommit":false,"messageTitle":"Remove dummy assert false statement","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"43b922f067aa906710133160c6fd82c1f00b2a31","isMergeCommit":false,"messageTitle":"Refactor Parser Class for LogCommand handling","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"066cdd2c50ff54c36669b71b9866f4c283309c2c","isMergeCommit":false,"messageTitle":"Remove unused import","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4}}},{"hash":"540e4c11119d4a74b5df6863e0fac21435cc0070","isMergeCommit":false,"messageTitle":"Fix ViewLogCommand not displaying how amount of exercises logged","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":6}}},{"hash":"8f993273f2720ba220774070158e2d8b9f33fc5a","isMergeCommit":true,"messageTitle":"Merge pull request #18 from Remy9926/exercise-log-class","messageBody":"Implement ExerciseLog into Duke","fileTypesAndContributionMap":{}},{"hash":"3c1a3137b1ef73aee959ab850785ab34412d03f6","isMergeCommit":false,"messageTitle":"Fix checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":65,"deletions":58}}},{"hash":"d127d10003da8aae3f4c489a05c8891244b74838","isMergeCommit":false,"messageTitle":"Fix checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":2}}},{"hash":"cf3dc544adde0deca8d2e2d06f6cb68dfd05dd5f","isMergeCommit":true,"messageTitle":"Merge pull request #19 from Remy9926/fix-checkstyle-errors","messageBody":"Fix checkstyle errors","fileTypesAndContributionMap":{}},{"hash":"2c24bddfb83d18727d4adf0cb6f3c5a1625f5c0a","isMergeCommit":false,"messageTitle":"Enable assertions in build.gradle","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":0}}},{"hash":"15f9e6c6e5326bd711e069959c0edd5b84b6ec5b","isMergeCommit":true,"messageTitle":"Merge pull request #20 from Remy9926/enable-assertions","messageBody":"Enable assertions in build.gradle","tags":["v1.0"],"fileTypesAndContributionMap":{}},{"hash":"29e56e763550350f54ba0ae3ff09ccbf62130c51","isMergeCommit":false,"messageTitle":"Add comments to ExerciseLog and associated classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":158,"deletions":0}}},{"hash":"2a84d82dc93cc997f100d920fab78bb135e27835","isMergeCommit":true,"messageTitle":"Merge pull request #21 from Remy9926/exercise-log-class","messageBody":"Add comments to ExerciseLog and associated classes","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"J-Y-Yan":{"docs":0,"functional-code":187,"test-code":0,"other":109},"kevinz420":{"docs":2,"functional-code":573,"test-code":78},"MrOPPA1":{"docs":2,"functional-code":212,"test-code":0,"other":11},"Remy9926":{"docs":1,"functional-code":581,"test-code":153,"other":1}},"authorContributionVariance":{"J-Y-Yan":4008.861,"kevinz420":17386.037,"MrOPPA1":2938.0073,"Remy9926":8623.513},"authorDisplayNameMap":{"J-Y-Yan":"CS2113-F11-1 TIAN..AYAN","kevinz420":"CS2113-F11-1 ZHAN..EVIN","MrOPPA1":"CS2113-F11-1 FENG..GYAO","Remy9926":"CS2113-F11-1 HUAN..AMES"}} +{"authorDailyContributionsMap":{"J-Y-Yan":[{"date":"2023-10-19","commitResults":[{"hash":"5f22d57a178e453d90da4715839d496b2815d6b6","isMergeCommit":false,"messageTitle":"Add new constructor for command class with String input parameter, representing user command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0},"other":{"insertions":109,"deletions":0}}},{"hash":"4b94d0d28de155d434528f4ee144a253318b5960","isMergeCommit":false,"messageTitle":"Add goal funationality * Add Goal class to represent goal object * Add GoalList class to represent goal list containing the goal objects * Add GoalCommand class to implement the execution of goal command","messageBody":"Noting that Goal and GoalList is created seperated in different class because they exhibit different properties. For example, a goal object have its fields like goal content and finished time, but a goalList object should have fields like the number of data inside a goal.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":137,"deletions":0}}},{"hash":"79ef7a2ea66fa876a5e40bbdcbc541c2e595ff80","isMergeCommit":false,"messageTitle":"Add exception class IncorrectFormatException to tackle the input format of the goal command from user","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":0}}},{"hash":"c7009a4977277a9bf85129306080149cb22f4993","isMergeCommit":false,"messageTitle":"Add more Ui related method to release messages about adding or deleting new goal successfully","messageBody":"Change the parent class of IllegalValueException class from Exception to IncorrectFormatException. This could reduces the number of signature when throwing exception and tidy up the code\n","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":1}}},{"hash":"88c61f6f274b5e518d07f25ee37a47fa08d02804","isMergeCommit":false,"messageTitle":"Correct error in coding style for GoalCommand class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":10}}},{"hash":"374777329b89b44a555b6eb48ef471ba52261d26","isMergeCommit":false,"messageTitle":"Improve the documentation to match with standard","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"3205e482e8bdebf42d6ac6185b2f0c091df1341a","isMergeCommit":true,"messageTitle":"Merge pull request #16 from AY2324S1-CS2113-F11-1/goal","messageBody":"Add goal functionality","fileTypesAndContributionMap":{}},{"hash":"2a2086f5ac4efc3ed1272d35b3b2a951d969ad69","isMergeCommit":false,"messageTitle":"Add new parser case for goal command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":4}}},{"hash":"807a80a349556af52320ce58050bce5f19079235","isMergeCommit":false,"messageTitle":"Change the execution method of goalCommand class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":6}}}]}],"kevinz420":[{"date":"2023-10-06","commitResults":[{"hash":"c66131313af3a0dbcd8c602250607835d738bf59","isMergeCommit":false,"messageTitle":"Add About Us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}}]},{"date":"2023-10-15","commitResults":[{"hash":"eb1ae54b61dd5bed80d0d9df4c621c086a2d81af","isMergeCommit":false,"messageTitle":"Added basic text UI and core commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":609,"deletions":25}}},{"hash":"36c6e30c185b9f80e55f4ec6b9638cf172f73c03","isMergeCommit":false,"messageTitle":"Added parser tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":9},"test-code":{"insertions":78,"deletions":0}}}]}],"MrOPPA1":[{"date":"2023-10-06","commitResults":[{"hash":"f0cf1bd55fd25b10ce0dca9f46bbdcaf9a591fa6","isMergeCommit":false,"messageTitle":"init","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":0}}}]},{"date":"2023-10-19","commitResults":[{"hash":"662746e2d6b5b343cf359c1c684cefc1822efc75","isMergeCommit":false,"messageTitle":"Add Meal class. Add Add Meal Command. (for integrating general functions of meal-related commands) Add Date class. Add DateTime class. Add \u0027throws Exception\u0027 to Command class.","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":239,"deletions":1}}}]},{"date":"2023-10-20","commitResults":[{"hash":"5106842b4468b0bf3c5a6493d8bda2d4671aea4b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c0899a9086a9bef624db627df2eaf2b98a7aede1","isMergeCommit":true,"messageTitle":"Merge pull request #14 from MrOPPA1/master","messageBody":"Meal Logging","fileTypesAndContributionMap":{}},{"hash":"223a438cffe373f7496459702b7962362601fbad","isMergeCommit":false,"messageTitle":"fix bugs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":96,"deletions":88}}}]}],"Remy9926":[{"date":"2023-10-06","commitResults":[{"hash":"5c8e51ad415cfc6d7d3e7035afac300a3c1be537","isMergeCommit":false,"messageTitle":"Add Ethan to docs/AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"ee26f976d47a7e4d6bd74e8f6023dc6083cfd0b7","isMergeCommit":true,"messageTitle":"Merge branch \u0027ethanHuang-AboutUs\u0027","messageBody":"Merge ethanHuang-AboutUs branch to master\n","fileTypesAndContributionMap":{}}]},{"date":"2023-10-07","commitResults":[{"hash":"8ab578e1d646eca743b9e63a986c47d7e9b00e4a","isMergeCommit":false,"messageTitle":"Take in user input and spit it back out to user","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":1}}},{"hash":"446c18151b5fcf69cf4f402ce261d0a4f0d20e6f","isMergeCommit":false,"messageTitle":"Add FitNUS logo","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":6}}}]},{"date":"2023-10-08","commitResults":[{"hash":"90b9c9838da03a478bd8c2820c859a543bf58177","isMergeCommit":false,"messageTitle":"Ask user for name Create greetUser method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":8}}},{"hash":"ca9d43fa3b4748ce181910b5a688633d9192c16c","isMergeCommit":false,"messageTitle":"Make user input case insensitive and strip any whitespace","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":6}}}]},{"date":"2023-10-12","commitResults":[{"hash":"8153fe15e48899f589484df59b507a85c8a288c9","isMergeCommit":true,"messageTitle":"Merge pull request #1 from kevinz420/kevinzhang-AboutUs","messageBody":"Add About Us","fileTypesAndContributionMap":{}},{"hash":"da19d11346e8cd6bd2f34c247c9fa3243db69de8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1a19a244189698cd2a7e1c318cbd977067c84c7c","isMergeCommit":true,"messageTitle":"Merge pull request #3 from Remy9926/master","messageBody":"Add Ethan to docs/AboutUs.md","fileTypesAndContributionMap":{}},{"hash":"abe5ecb3237d9ded49175c774128e1b874492ad4","isMergeCommit":true,"messageTitle":"Merge pull request #5 from Remy9926/take-user-input","messageBody":"Take user input and spit it back to user","fileTypesAndContributionMap":{}},{"hash":"bc396c118e9625114a04bd1c71587555080741ae","isMergeCommit":true,"messageTitle":"Update input.txt and EXPECTED.txt","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"00f9e7920cd6bd98575d8c88417d6c8b4813b9bc","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-F11-1/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"a1ad53f518ee683ce633886d89a218ef0c33434e","isMergeCommit":true,"messageTitle":"Merge pull request #10 from kevinz420/feature-project-setup","messageBody":"Implement initial project setup and core functionalities","fileTypesAndContributionMap":{}},{"hash":"5ea2a0d7bc0da1a4d70fac23fd8b4058a688463f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-F11-1/tp Implement initial project setup and core functionalities","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ce70a872c9a314035f3e3a45a68076b4de2a4b39","isMergeCommit":false,"messageTitle":"Add Log, Month, Day, Exercise classes and functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":170,"deletions":0}}},{"hash":"4929de954dd53c5dad4a2c31807d657d07682721","isMergeCommit":false,"messageTitle":"Add ExerciseLogTest Class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"522a5e358b43ec3b3983c894e4348c1fdccc6402","isMergeCommit":false,"messageTitle":"Add toString to all classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":77,"deletions":16}}}]},{"date":"2023-10-16","commitResults":[{"hash":"fc274231ac4b8e5e93a3b15e48ddc9b5a817c1b3","isMergeCommit":false,"messageTitle":"Create LogCommand class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"38db96ca3ba4455bd7d7ed7bbea54e9450a1d4d2","isMergeCommit":false,"messageTitle":"Add execute method to LogCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":1}}},{"hash":"adf775750c7e309a5c29805d162c4981a1fc234f","isMergeCommit":false,"messageTitle":"Create logcommands package and DeleteLogCommand class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0},"other":{"insertions":3,"deletions":1}}},{"hash":"36e08f785c3b2a892ae598f8522940e9050e7327","isMergeCommit":false,"messageTitle":"Add execute method to DeleteLogCommand class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":16}}},{"hash":"4e0332fbbb4b30041a6c18ffe5e26f2c46d00eb0","isMergeCommit":false,"messageTitle":"Add ViewLogCommand class, Refactor LogCommand and DeleteLogCommand classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":17,"deletions":2}}},{"hash":"b3934a3c339e6cbda3d70db6bd7301be3a99ac9f","isMergeCommit":false,"messageTitle":"Add ViewLogCommand execute method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":63,"deletions":1}}},{"hash":"469607e9b98b1d2110d7b0ff733730cae98d235d","isMergeCommit":false,"messageTitle":"Remove print method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":7}}}]},{"date":"2023-10-17","commitResults":[{"hash":"287b56f8bbf00af8b4533414fb302536f3afd7bf","isMergeCommit":false,"messageTitle":"Add COMMAND_WORD to LogCommand classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"95a7ff2b6041f1284eeae257ccd3d91c0e4ca5c7","isMergeCommit":false,"messageTitle":"Allow Parser to return LogCommands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":0}}},{"hash":"8c91cd2b5f0d9862ce361b5be53586ff10fe0691","isMergeCommit":false,"messageTitle":"Move ExerciseLogTest to test folder","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":10}}},{"hash":"8ce990f29e6d80496988b0fac5dd0608f7793c39","isMergeCommit":false,"messageTitle":"Add ExerciseLog class tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":22,"deletions":0}}},{"hash":"ea1c495be1e79c1c854259eb462e7aeb10eefe0d","isMergeCommit":false,"messageTitle":"Add Test Classes for exerciselog","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":8,"deletions":0}}},{"hash":"e8411d11e3763c676960c33131d8c377b2f41693","isMergeCommit":false,"messageTitle":"Rename Exercise name field to exerciseName","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":6}}},{"hash":"f2d00f6fa1b886f11a36948cdd1c7311dc7458c9","isMergeCommit":false,"messageTitle":"Fix getExerciseName method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"5cb514b0c4c443a3ae1b79dfdc5696befc5b75bd","isMergeCommit":false,"messageTitle":"Edit Exercise class equals method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":2}}},{"hash":"f3bbdecf2e2c4fb04aa4cd4d47c30d6ce9885a34","isMergeCommit":false,"messageTitle":"Add Exercise Tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":47,"deletions":0}}},{"hash":"34664cd62ac912690adccfca896a2f4c5806f2d5","isMergeCommit":false,"messageTitle":"Remove redundant import in ExerciseTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":2}}},{"hash":"f655b24820dd6577ea6b6f7f1db02d34aa0440f0","isMergeCommit":false,"messageTitle":"Remove unused imports from tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":7,"deletions":4}}}]},{"date":"2023-10-18","commitResults":[{"hash":"353e6bfd42f0259f43b3d3f8166a848f02f26033","isMergeCommit":false,"messageTitle":"Add asserts to ExerciseTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":0}}}]},{"date":"2023-10-19","commitResults":[{"hash":"6631c1de1e0c186922c92dac0fca53596699e75d","isMergeCommit":false,"messageTitle":"Add more asserts to ExerciseTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}},{"hash":"d5c361d22ddb346eda70b02a7edbdddee1f34583","isMergeCommit":false,"messageTitle":"Add containsExercises to Day Class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"5819ae61359de0302cc1dfb05dce4eca39c890f6","isMergeCommit":false,"messageTitle":"Remove getExercises method from Day","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4}}},{"hash":"13d95ec3191221af3cc58a835234e3aec5b0b336","isMergeCommit":false,"messageTitle":"Remove unnecessary methods from Day, Log, Month classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":21}}},{"hash":"15ccd19710de8236a503ac0e6f47c028ed7bbefd","isMergeCommit":false,"messageTitle":"Add tests to Day Class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":30,"deletions":1}}},{"hash":"05f6dfc7fcb565d866836a5e2f0f0b411cb7199a","isMergeCommit":false,"messageTitle":"Rename numberOfDays method to getNumberOfDays","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"a173eb0073fef3d98857829adeb806f5f7cdadc6","isMergeCommit":false,"messageTitle":"Rename methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":8}}},{"hash":"d03e7b422e7b14bda3bb6f4f8e52e86ad358585d","isMergeCommit":false,"messageTitle":"Add tests to Month class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":28,"deletions":1}}},{"hash":"ad189e88085884b2a0bd5c8792233896f0f7639d","isMergeCommit":false,"messageTitle":"Add tests to Log class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":21,"deletions":1}}}]},{"date":"2023-10-20","commitResults":[{"hash":"45ba6ffea03d3bdc9f916495b447ce6b4ba6f018","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into exercise-log-class","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2b1ec01e9b1f69a8ed8a3ee190b48a8f378c0e74","isMergeCommit":true,"messageTitle":"Merge pull request #11 from Remy9926/exercise-log-class","messageBody":"Add ExerciseLog class","fileTypesAndContributionMap":{}},{"hash":"8f246d9ee26c73c489e18dddb9ba7b7fd5de1b4f","isMergeCommit":false,"messageTitle":"Implement ExerciseLog into Duke","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":44,"deletions":40}}},{"hash":"945441b4068b4a38b800a63ba5aa9d1ce79c5d98","isMergeCommit":true,"messageTitle":"Resolve Merge Conflict in Parser Class","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"46d39d9919d80f1e81bf80f5b5d998706dc4aecd","isMergeCommit":false,"messageTitle":"Remove dummy assert false statement","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"43b922f067aa906710133160c6fd82c1f00b2a31","isMergeCommit":false,"messageTitle":"Refactor Parser Class for LogCommand handling","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"066cdd2c50ff54c36669b71b9866f4c283309c2c","isMergeCommit":false,"messageTitle":"Remove unused import","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4}}},{"hash":"540e4c11119d4a74b5df6863e0fac21435cc0070","isMergeCommit":false,"messageTitle":"Fix ViewLogCommand not displaying how amount of exercises logged","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":6}}},{"hash":"8f993273f2720ba220774070158e2d8b9f33fc5a","isMergeCommit":true,"messageTitle":"Merge pull request #18 from Remy9926/exercise-log-class","messageBody":"Implement ExerciseLog into Duke","fileTypesAndContributionMap":{}},{"hash":"3c1a3137b1ef73aee959ab850785ab34412d03f6","isMergeCommit":false,"messageTitle":"Fix checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":65,"deletions":58}}},{"hash":"d127d10003da8aae3f4c489a05c8891244b74838","isMergeCommit":false,"messageTitle":"Fix checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":2}}},{"hash":"cf3dc544adde0deca8d2e2d06f6cb68dfd05dd5f","isMergeCommit":true,"messageTitle":"Merge pull request #19 from Remy9926/fix-checkstyle-errors","messageBody":"Fix checkstyle errors","fileTypesAndContributionMap":{}},{"hash":"2c24bddfb83d18727d4adf0cb6f3c5a1625f5c0a","isMergeCommit":false,"messageTitle":"Enable assertions in build.gradle","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":0}}},{"hash":"15f9e6c6e5326bd711e069959c0edd5b84b6ec5b","isMergeCommit":true,"messageTitle":"Merge pull request #20 from Remy9926/enable-assertions","messageBody":"Enable assertions in build.gradle","tags":["v1.0"],"fileTypesAndContributionMap":{}},{"hash":"29e56e763550350f54ba0ae3ff09ccbf62130c51","isMergeCommit":false,"messageTitle":"Add comments to ExerciseLog and associated classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":158,"deletions":0}}},{"hash":"2a84d82dc93cc997f100d920fab78bb135e27835","isMergeCommit":true,"messageTitle":"Merge pull request #21 from Remy9926/exercise-log-class","messageBody":"Add comments to ExerciseLog and associated classes","fileTypesAndContributionMap":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"a0bdfd18eebcfb3274dfe12e28cfa5f85b194888","isMergeCommit":false,"messageTitle":"Update DG with Log update feature (#22)","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":18,"deletions":1}}}]}]},"authorFileTypeContributionMap":{"J-Y-Yan":{"docs":0,"functional-code":187,"test-code":0,"other":109},"kevinz420":{"docs":2,"functional-code":573,"test-code":78},"MrOPPA1":{"docs":2,"functional-code":212,"test-code":0,"other":11},"Remy9926":{"docs":19,"functional-code":581,"test-code":153,"other":1}},"authorContributionVariance":{"J-Y-Yan":3758.866,"kevinz420":16303.339,"MrOPPA1":2761.482,"Remy9926":8132.603},"authorDisplayNameMap":{"J-Y-Yan":"CS2113-F11-1 TIAN..AYAN","kevinz420":"CS2113-F11-1 ZHAN..EVIN","MrOPPA1":"CS2113-F11-1 FENG..GYAO","Remy9926":"CS2113-F11-1 HUAN..AMES"}} diff --git a/AY2324S1-CS2113-F11-3_tp_master/authorship.json b/AY2324S1-CS2113-F11-3_tp_master/authorship.json index d421ab8..6646cbd 100644 --- a/AY2324S1-CS2113-F11-3_tp_master/authorship.json +++ b/AY2324S1-CS2113-F11-3_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"docs","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 (use the exact version), update Intellij to the most recent version.","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. **Ensure Intellij JDK 11 is defined as an SDK**, as described [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk) -- this step is not needed if you have used JDK 11 in a previous Intellij project.","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. **Import the project _as a Gradle project_**, as described [here](https://se-education.org/guides/tutorials/intellijImportGradleProject.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"1. **Verify the set up**: After the importing is complete, locate the `src/main/java/seedu/duke/Duke.java` file, right-click it, and choose `Run Duke.main()`. If the setup is correct, you should see something like the below:","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003e Task :compileJava","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003e Task :processResources NO-SOURCE","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003e Task :classes","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003e Task :Duke.main()","lastModifiedDate":"2020-05-24"},{"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-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":" What is your name?","lastModifiedDate":"2020-05-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" Type some word and press enter to let the execution proceed to the end.","lastModifiedDate":"2020-05-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":"## Build automation using Gradle","lastModifiedDate":"2020-05-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":"* This project uses Gradle for build automation and dependency management. It includes a basic build script as well (i.e. the `build.gradle` file).","lastModifiedDate":"2020-05-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":"* If you are new to Gradle, refer to the [Gradle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/gradle.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":"## Testing","lastModifiedDate":"2020-05-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":"### I/O redirection tests","lastModifiedDate":"2020-05-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"* To run _I/O redirection_ tests (aka _Text UI tests_), navigate to the `text-ui-test` and run the `runtest(.bat/.sh)` script.","lastModifiedDate":"2020-05-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":"### JUnit tests","lastModifiedDate":"2020-05-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":42,"author":{"gitId":"-"},"content":"* A skeleton JUnit test (`src/test/java/seedu/duke/DukeTest.java`) is provided with this project template. ","lastModifiedDate":"2020-05-24"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* If you are new to JUnit, refer to the [JUnit Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/junit.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":"## Checkstyle","lastModifiedDate":"2020-05-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* A sample CheckStyle rule configuration is provided in this project.","lastModifiedDate":"2020-05-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* If you are new to Checkstyle, refer to the [Checkstyle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/checkstyle.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":"## CI using GitHub Actions","lastModifiedDate":"2020-05-24"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":52,"author":{"gitId":"-"},"content":"The project uses [GitHub actions](https://github.com/features/actions) for CI. When you push a commit to this repo or PR against it, GitHub actions will run automatically to build and verify the code as updated by the commit/PR.","lastModifiedDate":"2020-05-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":"## Documentation","lastModifiedDate":"2020-05-24"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":56,"author":{"gitId":"-"},"content":"`/docs` folder contains a skeleton version of the project documentation.","lastModifiedDate":"2020-05-24"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":58,"author":{"gitId":"-"},"content":"Steps for publishing documentation to the public: ","lastModifiedDate":"2020-05-24"},{"lineNumber":59,"author":{"gitId":"-"},"content":"1. If you are using this project template for an individual project, go your fork on GitHub.\u003cbr\u003e","lastModifiedDate":"2020-05-24"},{"lineNumber":60,"author":{"gitId":"-"},"content":" If you are using this project template for a team project, go to the team fork on GitHub.","lastModifiedDate":"2020-05-24"},{"lineNumber":61,"author":{"gitId":"-"},"content":"1. Click on the `settings` tab.","lastModifiedDate":"2020-05-24"},{"lineNumber":62,"author":{"gitId":"-"},"content":"1. Scroll down to the `GitHub Pages` section.","lastModifiedDate":"2020-05-24"},{"lineNumber":63,"author":{"gitId":"-"},"content":"1. Set the `source` as `master branch /docs folder`.","lastModifiedDate":"2020-05-24"},{"lineNumber":64,"author":{"gitId":"-"},"content":"1. Optionally, use the `choose a theme` button to choose a theme for your documentation.","lastModifiedDate":"2020-05-24"},{"lineNumber":65,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"wendelinwemhoener":1,"-":64}},{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName.set(\"duke\")","lastModifiedDate":"2023-09-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"wendelinwemhoener"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"wendelinwemhoener":1,"-":46}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":4,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Portfolio ","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"--------|:------------------:|:--------------:|:---------:","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"![](https://media.licdn.com/dms/image/C4D03AQGTLbALYjG82Q/profile-displayphoto-shrink_800_800/0/1580629728751?e\u003d1701907200\u0026v\u003dbeta\u0026t\u003dPEfw_qZfZA39rJRfo5_Pg4o_RmbPwdneiPX3ftNt9dA) | Wendelin Wemhoener | [Github](https://github.com/wendelinwemhoener/) | [Portfolio](docs/team/wendelinwemhoener.md)","lastModifiedDate":"2023-10-06"},{"lineNumber":7,"author":{"gitId":"Cheezeblokz"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Zhu Jingxi | [Github](https://github.com/Cheezeblokz) | [Portfolio](docs/team/zhujingxi.md)","lastModifiedDate":"2023-10-06"},{"lineNumber":8,"author":{"gitId":"Brian030601"},"content":"![](/Users/brian/Desktop/Colgate/NUS Fall 2023/CS2113/Team Project/docs/photo/kherlenbayasgalan.jpg) | Kherlen Bayasgalan | [Github](https://github.com/Brian030601) | [Portfolio](docs/team/kherlenbayasgalan.md)","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"junhyeong0411"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Bang Junhyeong | [Github](https://github.com/junhyeong0411) | [Portfolio](docs/team/bangjunhyeong.md)","lastModifiedDate":"2023-10-06"},{"lineNumber":10,"author":{"gitId":"-"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"wendelinwemhoener":2,"Cheezeblokz":2,"-":4,"junhyeong0411":1,"Brian030601":1}},{"path":"docs/team/bangjunhyeong.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"junhyeong0411"},"content":"# Bang Junhyeong - Project Portfolio Page","lastModifiedDate":"2023-10-06"},{"lineNumber":2,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":3,"author":{"gitId":"junhyeong0411"},"content":"## Overview","lastModifiedDate":"2023-10-06"},{"lineNumber":4,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":5,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"junhyeong0411"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-06"}],"authorContributionMap":{"junhyeong0411":6}},{"path":"docs/team/kherlenbayasgalan.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Brian030601"},"content":"# Kherlen Bayasgalan - Project Portfolio Page","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"Brian030601"},"content":"## Overview","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"Brian030601"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"Brian030601":6}},{"path":"docs/team/wendelinwemhoener.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"# Wendelin Wemhoener - Project Portfolio Page","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"## Overview","lastModifiedDate":"2023-10-06"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-06"}],"authorContributionMap":{"wendelinwemhoener":6}},{"path":"docs/team/zhujingxi.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Cheezeblokz"},"content":"# Zhu Jingxi - Project Portfolio Page","lastModifiedDate":"2023-10-06"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Overview","lastModifiedDate":"2023-10-06"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"-"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-06"}],"authorContributionMap":{"Cheezeblokz":1,"-":5}},{"path":"src/main/java/seedu/duke/Duke.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke;","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.calendar.CalendarManager;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardComponent;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Scanner;","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" public Duke() {}","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" new Duke().run();","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":" private void run() {","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" FlashcardComponent fc \u003d new FlashcardComponent();","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":" CalendarManager cm \u003d new CalendarManager(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"wendelinwemhoener"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"wendelinwemhoener"},"content":" String input;","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"wendelinwemhoener"},"content":" boolean shouldTerminate \u003d false;","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"wendelinwemhoener"},"content":" while (!shouldTerminate) {","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"wendelinwemhoener"},"content":" input \u003d scanner.nextLine();","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"wendelinwemhoener"},"content":" if (fc.isResponsible(input)) {","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"wendelinwemhoener"},"content":" fc.processInput(input);","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"wendelinwemhoener"},"content":" } else if (cm.isResponsible(input)) {","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"wendelinwemhoener"},"content":" cm.processInput(input);","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"wendelinwemhoener"},"content":" } else {","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" Invalid command! Please try again.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":40,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"wendelinwemhoener":40}},{"path":"src/main/java/seedu/duke/calendar/Calendar.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Brian030601"},"content":"//@@ kherlenbayasgalan \u0026 jingxizhu","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"Cheezeblokz"},"content":"package seedu.duke.calendar;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Cheezeblokz"},"content":"public class Calendar {","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"Brian030601"},"content":" EventList eventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"Cheezeblokz"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Cheezeblokz":4,"Brian030601":3}},{"path":"src/main/java/seedu/duke/calendar/CalendarCommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Brian030601"},"content":"//@@ kherlenbayasgalan \u0026 jingxizhu","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"Cheezeblokz"},"content":"package seedu.duke.calendar;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.command.AddEventCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.command.DeleteEventCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.command.EventCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.command.ListCalendarEventsCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.command.UnknownCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"Cheezeblokz"},"content":"public class CalendarCommandParser {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"Brian030601"},"content":" public EventCommand parseInput(String input) {","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"Brian030601"},"content":" assert input !\u003d null : \"input is null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"Brian030601"},"content":" if (input.startsWith(\"add event\")) {","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"Brian030601"},"content":" return new AddEventCommand();","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"Brian030601"},"content":" } else if (input.startsWith(\"delete event\")) {","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"Brian030601"},"content":" return new DeleteEventCommand();","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"Brian030601"},"content":" } else if (input.startsWith(\"list event\")) {","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"Brian030601"},"content":" return new ListCalendarEventsCommand();","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"Brian030601"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"Cheezeblokz"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Cheezeblokz":4,"Brian030601":21}},{"path":"src/main/java/seedu/duke/calendar/CalendarManager.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Brian030601"},"content":"//@@ kherlenbayasgalan \u0026 jingxizhu","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"Cheezeblokz"},"content":"package seedu.duke.calendar;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.command.EventCommand;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.command.UnknownCommand;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.Event;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"junhyeong0411"},"content":"import seedu.duke.flashcard.FlashcardStorage;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"junhyeong0411"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Brian030601"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"Cheezeblokz"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"Cheezeblokz"},"content":"public class CalendarManager {","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"Cheezeblokz"},"content":" Calendar calendar;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"Cheezeblokz"},"content":" CalendarUi calendarUi;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"Brian030601"},"content":" EventList eventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Cheezeblokz"},"content":" CalendarCommandParser calendarCommandParser;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"Cheezeblokz"},"content":" Scanner scanner;","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"junhyeong0411"},"content":" private EventStorage storage;","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"Brian030601"},"content":" public CalendarManager(ArrayList\u003cEvent\u003e events) {","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"junhyeong0411"},"content":" EventDirectory eventdirectory \u003d new EventDirectory();","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"junhyeong0411"},"content":" eventdirectory.listEventFiles();","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"junhyeong0411"},"content":" storage \u003d new EventStorage(\"./data/events/event.txt\");","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"junhyeong0411"},"content":" try{","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"junhyeong0411"},"content":" eventList \u003d storage.loadEvents();","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"junhyeong0411"},"content":" } catch (FileNotFoundException e){","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"Making new file for Events\");","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"Brian030601"},"content":" eventList \u003d new EventList(events);","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"Cheezeblokz"},"content":" calendar \u003d new Calendar();","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"Brian030601"},"content":" calendarUi \u003d new CalendarUi(eventList);","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"Cheezeblokz"},"content":" calendarCommandParser \u003d new CalendarCommandParser();","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"Cheezeblokz"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"junhyeong0411"},"content":" public EventStorage getStorage(){","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"junhyeong0411"},"content":" return this.storage;","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"Cheezeblokz"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"Brian030601"},"content":" public boolean validCommand(String input) {","lastModifiedDate":"2023-10-19"},{"lineNumber":49,"author":{"gitId":"Brian030601"},"content":" EventCommand command \u003d calendarCommandParser.parseInput(input);","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"Brian030601"},"content":" return !(command instanceof UnknownCommand);","lastModifiedDate":"2023-10-19"},{"lineNumber":52,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"wendelinwemhoener"},"content":" public boolean isResponsible(String input) {","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"wendelinwemhoener"},"content":" return validCommand(input);","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"wendelinwemhoener"},"content":" public void processInput(String input) {","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"wendelinwemhoener"},"content":" startCalendar(input);","lastModifiedDate":"2023-10-19"},{"lineNumber":60,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"junhyeong0411"},"content":" storage.saveEvents(eventList.getEvent());","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"Brian030601"},"content":" public void startCalendar(String input) {","lastModifiedDate":"2023-10-19"},{"lineNumber":65,"author":{"gitId":"Brian030601"},"content":" EventCommand command \u003d calendarCommandParser.parseInput(input);","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"Brian030601"},"content":" assert !(command instanceof seedu.duke.calendar.command.UnknownCommand) :","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"Brian030601"},"content":" \"Command cannot be \" + \"unknown\";","lastModifiedDate":"2023-10-19"},{"lineNumber":68,"author":{"gitId":"Brian030601"},"content":" calendarUi.executeCommand(command);","lastModifiedDate":"2023-10-19"},{"lineNumber":69,"author":{"gitId":"Brian030601"},"content":" //calendarCommandParser.parseInput(command);","lastModifiedDate":"2023-10-19"},{"lineNumber":70,"author":{"gitId":"Cheezeblokz"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"Cheezeblokz"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"wendelinwemhoener":8,"Cheezeblokz":18,"junhyeong0411":23,"Brian030601":23}},{"path":"src/main/java/seedu/duke/calendar/CalendarUi.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Cheezeblokz"},"content":"package seedu.duke.calendar;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.command.EventCommand;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"Brian030601"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"Cheezeblokz"},"content":"public class CalendarUi {","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"Brian030601"},"content":" private Scanner scanner;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Brian030601"},"content":" private EventList eventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Brian030601"},"content":" public CalendarUi (EventList eventList) {","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"Brian030601"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Brian030601"},"content":" this.eventList \u003d eventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"Brian030601"},"content":" public void executeCommand(EventCommand command) {","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"Brian030601"},"content":" command.execute(scanner, eventList);","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Cheezeblokz"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"Cheezeblokz"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Cheezeblokz":5,"Brian030601":14}},{"path":"src/main/java/seedu/duke/calendar/EventDirectory.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"junhyeong0411"},"content":"package seedu.duke.calendar;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"junhyeong0411"},"content":"import java.io.File;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"junhyeong0411"},"content":"/**","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"junhyeong0411"},"content":" * directory for directory","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"junhyeong0411"},"content":" * can list-up txt files in text folder","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"junhyeong0411"},"content":" * In version 1, using only event.txt","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"junhyeong0411"},"content":" * In version 2, can select or create","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"junhyeong0411"},"content":"public class EventDirectory {","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"junhyeong0411"},"content":" String path;","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"junhyeong0411"},"content":" File file;","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"junhyeong0411"},"content":" public EventDirectory(){","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"junhyeong0411"},"content":" path \u003d \"./data/events\";","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"junhyeong0411"},"content":" file \u003d new File(path);","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"junhyeong0411"},"content":" if(!file.exists()){","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"junhyeong0411"},"content":" if(file.mkdir()){","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\" Created events directory\");","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"junhyeong0411"},"content":" } else{","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\" Failed to create directory\");","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"junhyeong0411"},"content":" } else{","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\" Using data/events directory\");","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"junhyeong0411"},"content":" * list-up saved files","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"junhyeong0411"},"content":" * selecting file is for version 2","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"junhyeong0411"},"content":" public void listEventFiles(){","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"junhyeong0411"},"content":" String[] eventFiles \u003d file.list();","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"junhyeong0411"},"content":" if(eventFiles \u003d\u003d null){","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"Failed to find files\");","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"junhyeong0411"},"content":" } else if(eventFiles.length \u003d\u003d 0){","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"No files exist\");","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"junhyeong0411"},"content":" } else{","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"junhyeong0411"},"content":" for(String eventFile : eventFiles){","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\" \"+eventFile);","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":47,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":48,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":49,"author":{"gitId":"junhyeong0411"},"content":" * return default directory","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"junhyeong0411"},"content":" * for version 1","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"junhyeong0411"},"content":" * @return directory for flashcard txt file","lastModifiedDate":"2023-10-19"},{"lineNumber":52,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"junhyeong0411"},"content":" public String defaultDirectory() {","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"junhyeong0411"},"content":" return this.path + \"/event.txt\";","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"junhyeong0411"},"content":" * return directory of flashcard txt file","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"junhyeong0411"},"content":" * for version 2","lastModifiedDate":"2023-10-19"},{"lineNumber":60,"author":{"gitId":"junhyeong0411"},"content":" * @param path","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"junhyeong0411"},"content":" * @return","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"junhyeong0411"},"content":" public String eventDirectory(String path) {","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"junhyeong0411"},"content":" return this.path + path;","lastModifiedDate":"2023-10-19"},{"lineNumber":65,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"junhyeong0411"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"junhyeong0411":67}},{"path":"src/main/java/seedu/duke/calendar/EventList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Brian030601"},"content":"package seedu.duke.calendar;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"Brian030601"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"Brian030601"},"content":"public class EventList {","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"Brian030601"},"content":" private ArrayList\u003cEvent\u003e eventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Brian030601"},"content":" public EventList(ArrayList\u003cEvent\u003e eventList) {","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"Brian030601"},"content":" this.eventList \u003d eventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Brian030601"},"content":" public void addEvent(Event event) {","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"Brian030601"},"content":" eventList.add(event);","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"Brian030601"},"content":" public ArrayList\u003cEvent\u003e getEvent() {","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Brian030601"},"content":" return eventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"junhyeong0411"},"content":" public int getSize(){ return eventList.size();}","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"Brian030601"},"content":" public void deleteEvent(String name) {","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"Brian030601"},"content":" eventList.removeIf(event -\u003e event.getName().equals(name));","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"Brian030601"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"Brian030601"},"content":" public String toString() {","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"Brian030601"},"content":" return \"EventStorage{\" +","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"Brian030601"},"content":" \"events\u003d\" + eventList +","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"Brian030601"},"content":" \u0027}\u0027;","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"Brian030601"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"junhyeong0411":2,"Brian030601":30}},{"path":"src/main/java/seedu/duke/calendar/EventStorage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"junhyeong0411"},"content":"package seedu.duke.calendar;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"junhyeong0411"},"content":"import java.io.File;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"junhyeong0411"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"junhyeong0411"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"junhyeong0411"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"junhyeong0411"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"junhyeong0411"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"junhyeong0411"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"junhyeong0411"},"content":"/**","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"junhyeong0411"},"content":" * storage for Events","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"junhyeong0411"},"content":" * One storage manages one file","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"junhyeong0411"},"content":"public class EventStorage {","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"junhyeong0411"},"content":" protected String path;","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"junhyeong0411"},"content":" public EventStorage(String path){","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"junhyeong0411"},"content":" this.path \u003d path;","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"junhyeong0411"},"content":" public boolean isStorageAvailable(){","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"junhyeong0411"},"content":" File f \u003d new File(this.path);","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"junhyeong0411"},"content":" return f.exists();","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"junhyeong0411"},"content":" * load a event from certain format","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"junhyeong0411"},"content":" * Tokens includes attributes of Event","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"junhyeong0411"},"content":" * @param tokens","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"junhyeong0411"},"content":" * @return Event object","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"junhyeong0411"},"content":" private Event loadEvent(String[] tokens){","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"junhyeong0411"},"content":" assert tokens.length \u003d\u003d 3: \"Token length should be 3\";","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"junhyeong0411"},"content":" String name \u003d tokens[0].trim();","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"junhyeong0411"},"content":" LocalDateTime from \u003d LocalDateTime.parse(tokens[1].trim());","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"junhyeong0411"},"content":" LocalDateTime to \u003d LocalDateTime.parse(tokens[2].trim());","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"junhyeong0411"},"content":" return new Event(name, from, to);","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"junhyeong0411"},"content":" * load list of events","lastModifiedDate":"2023-10-19"},{"lineNumber":47,"author":{"gitId":"junhyeong0411"},"content":" * from this.path","lastModifiedDate":"2023-10-19"},{"lineNumber":48,"author":{"gitId":"junhyeong0411"},"content":" * @return list of Events","lastModifiedDate":"2023-10-19"},{"lineNumber":49,"author":{"gitId":"junhyeong0411"},"content":" * @throws FileNotFoundException","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"junhyeong0411"},"content":" public EventList loadEvents() throws FileNotFoundException{","lastModifiedDate":"2023-10-19"},{"lineNumber":52,"author":{"gitId":"junhyeong0411"},"content":" EventList eventList \u003d new EventList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"junhyeong0411"},"content":" File f \u003d new File (this.path);","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"junhyeong0411"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"junhyeong0411"},"content":" while(s.hasNext()){","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"junhyeong0411"},"content":" String[] eventTokens \u003d s.nextLine().split(\" \\\\| \");","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"junhyeong0411"},"content":" eventList.addEvent(loadEvent(eventTokens));","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":60,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(String.format(","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"junhyeong0411"},"content":" \" There are currently %d events in the savefile\",","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"junhyeong0411"},"content":" eventList.getSize()));","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":65,"author":{"gitId":"junhyeong0411"},"content":" return eventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":68,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":69,"author":{"gitId":"junhyeong0411"},"content":" public void saveEvents(ArrayList\u003cEvent\u003e eventList) {","lastModifiedDate":"2023-10-19"},{"lineNumber":70,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":71,"author":{"gitId":"junhyeong0411"},"content":" try {","lastModifiedDate":"2023-10-19"},{"lineNumber":72,"author":{"gitId":"junhyeong0411"},"content":" FileWriter fw \u003d new FileWriter(path);","lastModifiedDate":"2023-10-19"},{"lineNumber":73,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":74,"author":{"gitId":"junhyeong0411"},"content":" for (int i \u003d 0; i \u003c eventList.size(); i++) {","lastModifiedDate":"2023-10-19"},{"lineNumber":75,"author":{"gitId":"junhyeong0411"},"content":" Event event \u003d eventList.get(i);","lastModifiedDate":"2023-10-19"},{"lineNumber":76,"author":{"gitId":"junhyeong0411"},"content":" fw.write(String.format(\"%s | %s | %s \\r\\n\",","lastModifiedDate":"2023-10-19"},{"lineNumber":77,"author":{"gitId":"junhyeong0411"},"content":" event.getName(), event.getFrom(), event.getTo()));","lastModifiedDate":"2023-10-19"},{"lineNumber":78,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":79,"author":{"gitId":"junhyeong0411"},"content":" fw.close();","lastModifiedDate":"2023-10-19"},{"lineNumber":80,"author":{"gitId":"junhyeong0411"},"content":" } catch (IOException e){","lastModifiedDate":"2023-10-19"},{"lineNumber":81,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"Failed to save.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":82,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":83,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":84,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":85,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":86,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":87,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":88,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":89,"author":{"gitId":"junhyeong0411"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"junhyeong0411":89}},{"path":"src/main/java/seedu/duke/calendar/command/AddEventCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Brian030601"},"content":"//@@ kherlenbayasgalan \u0026 jingxizhu","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"Cheezeblokz"},"content":"package seedu.duke.calendar.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.Event;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.EventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"Cheezeblokz"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Brian030601"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Cheezeblokz"},"content":"public class AddEventCommand extends EventCommand{","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"Brian030601"},"content":" public void execute(Scanner scanner, EventList eventList) {","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Brian030601"},"content":" System.out.print(\"What\u0027s the event?: \");","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"Cheezeblokz"},"content":" String eventName \u003d scanner.nextLine();","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"Brian030601"},"content":" System.out.print(\"When does it start? (yyyy-mm-ddThh:mm:ss) (eg. 2023-12-20T12:30:30): \");","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"Brian030601"},"content":" LocalDateTime startTime \u003d LocalDateTime.parse(scanner.nextLine());","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"Brian030601"},"content":" System.out.print(\"When does it end? (yyyy-mm-ddThh:mm:ss) (eg. 2023-12-20T12:30:30): \");","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Brian030601"},"content":" LocalDateTime endTime \u003d LocalDateTime.parse(scanner.nextLine());","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"Brian030601"},"content":" Event event \u003d new Event(eventName, startTime, endTime);","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"Brian030601"},"content":" eventList.addEvent(event);","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"Brian030601"},"content":" System.out.println(event + \" has been added to you calendar\");","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"Brian030601"},"content":" System.out.print(\"Enter your command: \");","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"Cheezeblokz"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"Cheezeblokz"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Cheezeblokz":10,"Brian030601":17}},{"path":"src/main/java/seedu/duke/calendar/command/DeleteEventCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Brian030601"},"content":"//@@ kherlenbayasgalan \u0026 jingxizhu","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"Cheezeblokz"},"content":"package seedu.duke.calendar.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.EventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"Cheezeblokz"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Cheezeblokz"},"content":"public class DeleteEventCommand extends EventCommand{","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"Brian030601"},"content":" public void execute(Scanner scanner, EventList eventList) {","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Cheezeblokz"},"content":" System.out.print(\"Enter the event name: \");","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"Cheezeblokz"},"content":" String eventName \u003d scanner.nextLine();","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"Brian030601"},"content":" eventList.deleteEvent(eventName);","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"Brian030601"},"content":" System.out.println(eventName + \" has been deleted from your Calendar!\");","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"Brian030601"},"content":" System.out.print(\"Enter your command: \");","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"Cheezeblokz"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Cheezeblokz"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Cheezeblokz":10,"Brian030601":8}},{"path":"src/main/java/seedu/duke/calendar/command/ListCalendarEventsCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Brian030601"},"content":"//@@ kherlenbayasgalan \u0026 jingxizhu","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"Cheezeblokz"},"content":"package seedu.duke.calendar.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.Event;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.EventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"Brian030601"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"Cheezeblokz"},"content":"public class ListCalendarEventsCommand extends EventCommand{","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"Brian030601"},"content":" public void execute(Scanner scanner, EventList eventList) {","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"Brian030601"},"content":" System.out.println(\"Here is a list of all your events: \");","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Brian030601"},"content":" printLine();","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"Brian030601"},"content":" for (Event event : eventList.getEvent()) {","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"Brian030601"},"content":" System.out.println(event);","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"Brian030601"},"content":" printLine();","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"Brian030601"},"content":" System.out.print(\"Enter your command: \");","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"Brian030601"},"content":" public void printLine() {","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"Brian030601"},"content":" System.out.println(\"-------------------\");","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"Cheezeblokz"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Cheezeblokz":4,"Brian030601":21}},{"path":"src/main/java/seedu/duke/calendar/command/UnknownCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Brian030601"},"content":"//@@ kherlenbayasgalan \u0026 jingxizhu","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"Cheezeblokz"},"content":"package seedu.duke.calendar.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.EventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"Cheezeblokz"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Cheezeblokz"},"content":"public class UnknownCommand extends EventCommand{","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"Brian030601"},"content":" public void execute(Scanner scanner, EventList eventList) {","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Brian030601"},"content":" System.out.println(\"Unknown command! Please enter a valid command.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"Cheezeblokz"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Cheezeblokz"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Cheezeblokz":8,"Brian030601":5}},{"path":"src/main/java/seedu/duke/flashcard/Flashcard.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.review.FlashcardReview;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"public class Flashcard {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":" private String frontText;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" private String backText;","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" private ArrayList\u003cString\u003e tags;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" private ArrayList\u003cFlashcardReview\u003e reviews;","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" private LocalDateTime lastReviewOn;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" public Flashcard(String frontText, String backText) {","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":" this.frontText \u003d frontText;","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":" this.backText \u003d backText;","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"wendelinwemhoener"},"content":" tags \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"wendelinwemhoener"},"content":" reviews \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"wendelinwemhoener"},"content":" lastReviewOn \u003d null;","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"wendelinwemhoener"},"content":" public void setLastReviewOn(LocalDateTime lastReviewOn) {","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"wendelinwemhoener"},"content":" this.lastReviewOn \u003d lastReviewOn;","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"wendelinwemhoener"},"content":" public String getFrontText() {","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"wendelinwemhoener"},"content":" return frontText;","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"wendelinwemhoener"},"content":" public String getBackText() {","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"wendelinwemhoener"},"content":" return backText;","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"wendelinwemhoener"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"wendelinwemhoener"},"content":" return \"front text: \" + frontText + System.lineSeparator()","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"wendelinwemhoener"},"content":" + \"back text: \" + backText + System.lineSeparator()","lastModifiedDate":"2023-10-13"},{"lineNumber":44,"author":{"gitId":"wendelinwemhoener"},"content":" + \"tags: \" + tags.toString() + System.lineSeparator()","lastModifiedDate":"2023-10-13"},{"lineNumber":45,"author":{"gitId":"wendelinwemhoener"},"content":" + \"next review due on: \" + lastReviewOn + System.lineSeparator();","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":47}},{"path":"src/main/java/seedu/duke/flashcard/FlashcardCommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.command.FlashcardCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.command.CreateFlashcardCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.command.ListFlashcardsCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.command.StartReviewCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.command.UnknownCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":"public class FlashcardCommandParser {","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" public FlashcardCommand parseInput(String input) {","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" assert input !\u003d null : \"input is null\";","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" if (input.startsWith(\"create flashcard\")) {","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":" return new CreateFlashcardCommand();","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":" } else if (input.startsWith(\"list flashcards\")) {","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":" return new ListFlashcardsCommand();","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" } else if (input.startsWith(\"review flashcards\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":" return new StartReviewCommand();","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"wendelinwemhoener"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":25}},{"path":"src/main/java/seedu/duke/flashcard/FlashcardComponent.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.command.FlashcardCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.command.UnknownCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":"public class FlashcardComponent {","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" private FlashcardCommandParser parser;","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" private FlashcardList flashcardList;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" private FlashcardUi ui;","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":" private FlashcardStorage storage;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" public FlashcardComponent() {","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":" parser \u003d new FlashcardCommandParser();","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"junhyeong0411"},"content":" //@@author junhyeong0411","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"junhyeong0411"},"content":" FlashcardDirectory flashcarddirectory \u003d new FlashcardDirectory();","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"junhyeong0411"},"content":" flashcarddirectory.listFlashcardFiles();","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"junhyeong0411"},"content":" storage \u003d new FlashcardStorage(\"./data/flashcards/flashcard.txt\");","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"junhyeong0411"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"junhyeong0411"},"content":" flashcardList \u003d storage.loadFlashcards();","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"junhyeong0411"},"content":" } catch (FileNotFoundException e){","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"Making New file for Flashcards\");","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"junhyeong0411"},"content":" flashcardList \u003d new FlashcardList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"wendelinwemhoener"},"content":" //@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"wendelinwemhoener"},"content":" ui \u003d new FlashcardUi(flashcardList);","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"junhyeong0411"},"content":" //@@author junhyeong0411","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"junhyeong0411"},"content":" public FlashcardStorage getStorage(){","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"junhyeong0411"},"content":" return this.storage;","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"wendelinwemhoener"},"content":" //@@author wendelinwemhoener","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"wendelinwemhoener"},"content":" public boolean isResponsible(String input) {","lastModifiedDate":"2023-10-13"},{"lineNumber":45,"author":{"gitId":"wendelinwemhoener"},"content":" FlashcardCommand command \u003d parser.parseInput(input);","lastModifiedDate":"2023-10-13"},{"lineNumber":46,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"wendelinwemhoener"},"content":" if (command instanceof UnknownCommand) {","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"wendelinwemhoener"},"content":" return false;","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"wendelinwemhoener"},"content":" } else {","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"wendelinwemhoener"},"content":" return true;","lastModifiedDate":"2023-10-13"},{"lineNumber":51,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":52,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":53,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":54,"author":{"gitId":"wendelinwemhoener"},"content":" public void processInput(String input) {","lastModifiedDate":"2023-10-13"},{"lineNumber":55,"author":{"gitId":"wendelinwemhoener"},"content":" FlashcardCommand command \u003d parser.parseInput(input);","lastModifiedDate":"2023-10-13"},{"lineNumber":56,"author":{"gitId":"wendelinwemhoener"},"content":" assert !(command instanceof UnknownCommand) : \"Command cannot be \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"wendelinwemhoener"},"content":" \"unknown\";","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"wendelinwemhoener"},"content":" ui.executeCommand(command);","lastModifiedDate":"2023-10-13"},{"lineNumber":60,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"junhyeong0411"},"content":" //@@author junhyeong0411","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"junhyeong0411"},"content":" // save after every commands","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"junhyeong0411"},"content":" storage.saveFlashcards(flashcardList.getFlashcards());","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"wendelinwemhoener"},"content":" //@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":67,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":46,"junhyeong0411":21}},{"path":"src/main/java/seedu/duke/flashcard/FlashcardDirectory.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"junhyeong0411"},"content":"package seedu.duke.flashcard;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"junhyeong0411"},"content":"import java.io.File;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"junhyeong0411"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"junhyeong0411"},"content":" * directory for flashcards","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"junhyeong0411"},"content":" * can list-up txt files in text folder","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"junhyeong0411"},"content":" * In version 1, using only flashcard.txt","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"junhyeong0411"},"content":" * In version 2, can select or create","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"junhyeong0411"},"content":"public class FlashcardDirectory {","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"junhyeong0411"},"content":" String path;","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"junhyeong0411"},"content":" File file;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"junhyeong0411"},"content":" public FlashcardDirectory(){","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"junhyeong0411"},"content":" path \u003d \"./data/flashcards\";","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"junhyeong0411"},"content":" file \u003d new File(path);","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"junhyeong0411"},"content":" if(!file.exists()){","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"junhyeong0411"},"content":" if(file.mkdir()){","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\" Created flashcards directory\");","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"junhyeong0411"},"content":" } else{","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\" Failed to create directory\");","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"junhyeong0411"},"content":" } else{","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\" Using data/flashcards directory\");","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"junhyeong0411"},"content":" * list-up saved files","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"junhyeong0411"},"content":" * selecting file is for version 2","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"junhyeong0411"},"content":" public void listFlashcardFiles(){","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"junhyeong0411"},"content":" String[] flashcardFiles \u003d file.list();","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"junhyeong0411"},"content":" if(flashcardFiles \u003d\u003d null){","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"Failed to find files\");","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"junhyeong0411"},"content":" } else if(flashcardFiles.length \u003d\u003d 0){","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"No files exist\");","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"wendelinwemhoener"},"content":" } else{","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"junhyeong0411"},"content":" for(String flashcardFile : flashcardFiles){","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\" \"+flashcardFile);","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"junhyeong0411"},"content":" * return default directory","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"junhyeong0411"},"content":" * for version 1","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"junhyeong0411"},"content":" * @return directory for flashcard txt file","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"junhyeong0411"},"content":" public String defaultDirectory() {","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"junhyeong0411"},"content":" return this.path + \"/flashcard.txt\";","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"junhyeong0411"},"content":" * return directory of flashcard txt file","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"junhyeong0411"},"content":" * for version 2","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"junhyeong0411"},"content":" * @param path","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"junhyeong0411"},"content":" * @return","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"junhyeong0411"},"content":" public String flashcardDirectory(String path) {","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"junhyeong0411"},"content":" return this.path + path;","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"junhyeong0411"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"wendelinwemhoener":1,"junhyeong0411":67}},{"path":"src/main/java/seedu/duke/flashcard/FlashcardList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"public class FlashcardList {","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":" private ArrayList\u003cFlashcard\u003e flashcards;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":" public FlashcardList(ArrayList\u003cFlashcard\u003e flashcards) {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":" this.flashcards \u003d flashcards;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" public ArrayList\u003cFlashcard\u003e getFlashcards() {","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" return flashcards;","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"junhyeong0411"},"content":" // @@author junhyeong0411","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"junhyeong0411"},"content":" public int getSize(){","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"junhyeong0411"},"content":" return flashcards.size();","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"junhyeong0411"},"content":" public void add(Flashcard flashcard) {","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"junhyeong0411"},"content":" flashcards.add(flashcard);","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"junhyeong0411"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":17,"junhyeong0411":10}},{"path":"src/main/java/seedu/duke/flashcard/FlashcardStorage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"junhyeong0411"},"content":"package seedu.duke.flashcard;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"junhyeong0411"},"content":"import java.io.File;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"junhyeong0411"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"junhyeong0411"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"junhyeong0411"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"junhyeong0411"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"junhyeong0411"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"junhyeong0411"},"content":"import java.util.logging.*;","lastModifiedDate":"2023-10-20"},{"lineNumber":10,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"junhyeong0411"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"junhyeong0411"},"content":" * storage for flashcards","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"junhyeong0411"},"content":" * One storage manages one file","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"junhyeong0411"},"content":"public class FlashcardStorage {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"junhyeong0411"},"content":" // simply implemented for save \u0026 load first","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"junhyeong0411"},"content":" protected String path;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"junhyeong0411"},"content":" private static Logger flashlogger; // for logging","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"junhyeong0411"},"content":" public FlashcardStorage(String path){","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"junhyeong0411"},"content":" this.path \u003d path;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"junhyeong0411"},"content":" flashlogger \u003d Logger.getLogger(\"flash\");","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"junhyeong0411"},"content":" public boolean isStorageAvailable(){","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"junhyeong0411"},"content":" File f \u003d new File(this.path);","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"junhyeong0411"},"content":" return f.exists();","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"junhyeong0411"},"content":" ","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"junhyeong0411"},"content":" * load a flash card from certain format","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"junhyeong0411"},"content":" * Tokens includes attributes of Flashcard","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"junhyeong0411"},"content":" * @param tokens","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"junhyeong0411"},"content":" * @return Flashcard object","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"junhyeong0411"},"content":" private Flashcard loadFlashcard(String[] tokens){","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"junhyeong0411"},"content":" assert tokens.length \u003d\u003d 5 : \"Token length should be 5\";","lastModifiedDate":"2023-10-20"},{"lineNumber":41,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"junhyeong0411"},"content":" //flashlogger.log(Level.INFO, \"token length is\", tokens.length);","lastModifiedDate":"2023-10-20"},{"lineNumber":43,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":44,"author":{"gitId":"junhyeong0411"},"content":" String frontText \u003d tokens[0].trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"junhyeong0411"},"content":" String backText \u003d tokens[1].trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"junhyeong0411"},"content":" String[] tags \u003d tokens[2].trim().split(\"/\");","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"junhyeong0411"},"content":" String[] reviews \u003d tokens[3].trim().split(\"/\");","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"junhyeong0411"},"content":" String nextReviewOn \u003d tokens[4].trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"junhyeong0411"},"content":" Flashcard flashcard \u003d new Flashcard(frontText, backText);","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"junhyeong0411"},"content":" //flashlogger.log(Level.INFO, \"added flashcard\");","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":55,"author":{"gitId":"junhyeong0411"},"content":" for(String tag:tags){","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"wendelinwemhoener"},"content":" if (tag.trim().equals(\"-\")) {","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"wendelinwemhoener"},"content":" break;","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"wendelinwemhoener"},"content":" } else{","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"tags are not for v1\");","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"junhyeong0411"},"content":" for(String review: reviews){","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"wendelinwemhoener"},"content":" if (review.trim().equals(\"-\")) {","lastModifiedDate":"2023-10-19"},{"lineNumber":65,"author":{"gitId":"wendelinwemhoener"},"content":" break;","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"wendelinwemhoener"},"content":" } else{","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"reviews are not for v1\");","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"junhyeong0411"},"content":" if(!nextReviewOn.equals(\"-\")){","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"junhyeong0411"},"content":" //LocalDateTime.parse(nextReviewOn);","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"reviews are not for v1\");","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"junhyeong0411"},"content":" return flashcard;","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"junhyeong0411"},"content":" * load list of flashcards","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"junhyeong0411"},"content":" * from this.path","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"junhyeong0411"},"content":" * @return list of Flashcards","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"junhyeong0411"},"content":" * @throws FileNotFoundException","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"junhyeong0411"},"content":" public FlashcardList loadFlashcards() throws FileNotFoundException{","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":87,"author":{"gitId":"junhyeong0411"},"content":" flashlogger.log(Level.INFO, \"loading flashcard\");","lastModifiedDate":"2023-10-20"},{"lineNumber":88,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":89,"author":{"gitId":"junhyeong0411"},"content":" FlashcardList flashcardList \u003d new FlashcardList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"junhyeong0411"},"content":" File f \u003d new File (this.path);","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"junhyeong0411"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"junhyeong0411"},"content":" while(s.hasNext()){","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"junhyeong0411"},"content":" String[] flashTokens \u003d s.nextLine().split(\" \\\\| \");","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"junhyeong0411"},"content":" flashcardList.add(loadFlashcard(flashTokens));","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(String.format(","lastModifiedDate":"2023-10-19"},{"lineNumber":99,"author":{"gitId":"wendelinwemhoener"},"content":" \" There are currently %d flashcards in the savefile\",","lastModifiedDate":"2023-10-19"},{"lineNumber":100,"author":{"gitId":"wendelinwemhoener"},"content":" flashcardList.getSize()));","lastModifiedDate":"2023-10-19"},{"lineNumber":101,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":102,"author":{"gitId":"junhyeong0411"},"content":" return flashcardList;","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"junhyeong0411"},"content":" public void saveFlashcards(ArrayList\u003cFlashcard\u003e flashcardList) {","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":108,"author":{"gitId":"junhyeong0411"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"junhyeong0411"},"content":" FileWriter fw \u003d new FileWriter(path);","lastModifiedDate":"2023-10-16"},{"lineNumber":110,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":111,"author":{"gitId":"junhyeong0411"},"content":" for (int i \u003d 0; i \u003c flashcardList.size(); i++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"junhyeong0411"},"content":" Flashcard flashcard \u003d flashcardList.get(i);","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"junhyeong0411"},"content":" fw.write(String.format(\"%s | %s | - | - | -\\r\\n\",","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"junhyeong0411"},"content":" flashcard.getFrontText(), flashcard.getBackText()));","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"junhyeong0411"},"content":" fw.close();","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"junhyeong0411"},"content":" } catch (IOException e){","lastModifiedDate":"2023-10-16"},{"lineNumber":118,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"Failed to save.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":119,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":120,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":123,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":124,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":125,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":126,"author":{"gitId":"junhyeong0411"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"wendelinwemhoener":9,"junhyeong0411":117}},{"path":"src/main/java/seedu/duke/flashcard/FlashcardUi.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.command.FlashcardCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"public class FlashcardUi {","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":" private Scanner scanner;","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":" private FlashcardList flashcardList;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" public FlashcardUi(FlashcardList flashcardList) {","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" this.flashcardList \u003d flashcardList;","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":" public void executeCommand(FlashcardCommand command) {","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" command.execute(scanner, flashcardList);","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":21}},{"path":"src/main/java/seedu/duke/flashcard/command/CreateFlashcardCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.command;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.Flashcard;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardList;","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"public class CreateFlashcardCommand extends FlashcardCommand {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":" public void execute(Scanner scanner, FlashcardList flashcardList) {","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.print(\" Enter the front page text: \");","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" String frontPageText \u003d scanner.nextLine();","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.print(\" Enter the back page text: \");","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" String backPageText \u003d scanner.nextLine();","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":" Flashcard flashcard \u003d new Flashcard(frontPageText, backPageText);","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" flashcardList.add(flashcard);","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println();","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" Success! Flashcard has been added to your \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"wendelinwemhoener"},"content":" \"collection.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":25}},{"path":"src/main/java/seedu/duke/flashcard/command/FlashcardCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.command;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardList;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"public abstract class FlashcardCommand {","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":" public abstract void execute(Scanner scanner, FlashcardList flashcardList);","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":11}},{"path":"src/main/java/seedu/duke/flashcard/command/ListFlashcardsCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.command;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.Flashcard;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardList;","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"public class ListFlashcardsCommand extends FlashcardCommand {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":" public void execute(Scanner scanner, FlashcardList flashcardList) {","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" Here is a list of all your flashcards: \");","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println();","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\"-\".repeat(80));","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":" for (Flashcard flashcard : flashcardList.getFlashcards()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.print(flashcard);","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\"-\".repeat(80));","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println();","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" Those were all your flashcards.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":24}},{"path":"src/main/java/seedu/duke/flashcard/command/StartReviewCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.command;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardList;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.review.RandomReviewMode;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.review.ReviewByTagMode;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.review.ReviewMode;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.review.SpacedRepetitionReviewMode;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":"public class StartReviewCommand extends FlashcardCommand {","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":" private final ArrayList\u003cString\u003e choices \u003d new ArrayList\u003c\u003e(Arrays.asList(","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":" \"a\", \"b\", \"c\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" private String getUserChoiceReviewMode(Scanner scanner) {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" How do you want to review your flashcards?\");","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" a) random mode\");","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" b) spaced repetition mode\");","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" c) review by tag mode\");","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"wendelinwemhoener"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"wendelinwemhoener"},"content":" public void execute(Scanner scanner, FlashcardList flashcardList) {","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"wendelinwemhoener"},"content":" String choice \u003d getUserChoiceReviewMode(scanner);","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"wendelinwemhoener"},"content":" while (!choices.contains(choice)) {","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" Invalid choice! Your choice must be a, b \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"wendelinwemhoener"},"content":" \"or c! Please try again.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"wendelinwemhoener"},"content":" choice \u003d getUserChoiceReviewMode(scanner);","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"wendelinwemhoener"},"content":" ReviewMode reviewMode \u003d createReviewMode(choice, flashcardList);","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"wendelinwemhoener"},"content":" if (reviewMode instanceof RandomReviewMode) {","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"wendelinwemhoener"},"content":" reviewMode.startReviewSession(scanner);","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"wendelinwemhoener"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" This review mode hasn\u0027t yet been \" +","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"wendelinwemhoener"},"content":" \"implemented. Sorry!\");","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"wendelinwemhoener"},"content":" private ReviewMode createReviewMode(String choice, FlashcardList flashcardList) {","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"wendelinwemhoener"},"content":" ReviewMode reviewMode \u003d null;","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"wendelinwemhoener"},"content":" if (choice.equals(\"a\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"wendelinwemhoener"},"content":" reviewMode \u003d new RandomReviewMode(flashcardList);","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"wendelinwemhoener"},"content":" } else if (choice.equals(\"b\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"wendelinwemhoener"},"content":" reviewMode \u003d new SpacedRepetitionReviewMode(flashcardList);","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"wendelinwemhoener"},"content":" } else if (choice.equals(\"c\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"wendelinwemhoener"},"content":" reviewMode \u003d new ReviewByTagMode(flashcardList);","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"wendelinwemhoener"},"content":" assert reviewMode !\u003d null;","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"wendelinwemhoener"},"content":" return reviewMode;","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":63,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":63}},{"path":"src/main/java/seedu/duke/flashcard/command/UnknownCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.command;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardList;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"public class UnknownCommand extends FlashcardCommand {","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":" public void execute(Scanner scanner, FlashcardList flashcardList) {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\"Unknown command! Please try again.\");","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":13}},{"path":"src/main/java/seedu/duke/flashcard/review/FlashcardReview.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.review;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"public class FlashcardReview {","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":" private LocalDateTime reviewDate;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":" private ReviewDifficulty reviewDifficulty;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":" public FlashcardReview(LocalDateTime reviewDate, ReviewDifficulty reviewDifficulty) {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" this.reviewDate \u003d reviewDate;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" this.reviewDifficulty \u003d reviewDifficulty;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"wendelinwemhoener":15}},{"path":"src/main/java/seedu/duke/flashcard/review/RandomReviewMode.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.review;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.Flashcard;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Random;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":"public class RandomReviewMode extends ReviewMode {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" public RandomReviewMode(FlashcardList flashcardList) {","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" super(flashcardList);","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":" public String getReviewModeName() {","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":" return \"random review mode\";","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":" protected Flashcard pickFlashcard() {","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":" ArrayList\u003cFlashcard\u003e flashcards \u003d flashcardList.getFlashcards();","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"wendelinwemhoener"},"content":" Random random \u003d new Random();","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"wendelinwemhoener"},"content":" return flashcards.get(random.nextInt(flashcards.size()));","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"wendelinwemhoener":26}},{"path":"src/main/java/seedu/duke/flashcard/review/ReviewByTagMode.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.review;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.Flashcard;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardList;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"public class ReviewByTagMode extends ReviewMode {","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":" public ReviewByTagMode(FlashcardList flashcardList) {","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":" super(flashcardList);","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":" public String getReviewModeName() {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" return \"review by tag mode\";","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" protected Flashcard pickFlashcard() {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":" return null;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"wendelinwemhoener":18}},{"path":"src/main/java/seedu/duke/flashcard/review/ReviewDifficulty.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.review;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"public enum ReviewDifficulty {","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":" EASY,","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":" GOOD,","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":" HARD,","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":" AGAIN","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":10}},{"path":"src/main/java/seedu/duke/flashcard/review/ReviewMode.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.review;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.Flashcard;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":"public abstract class ReviewMode {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" protected FlashcardList flashcardList;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" public ReviewMode(FlashcardList flashcardList) {","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" this.flashcardList \u003d flashcardList;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":" public abstract String getReviewModeName();","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":" public void startReviewSession(Scanner scanner) {","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" You have started a review session in \"","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"wendelinwemhoener"},"content":" + getReviewModeName());","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println();","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"wendelinwemhoener"},"content":" while (true) {","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"wendelinwemhoener"},"content":" Flashcard flashcardToReview \u003d pickFlashcard();","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"wendelinwemhoener"},"content":" printFlashcardFrontTextPrompt(flashcardToReview);","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"wendelinwemhoener"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"wendelinwemhoener"},"content":" boolean shouldTerminate \u003d input.equals(\"quit\") || input.equals(\"q\");","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"wendelinwemhoener"},"content":" if (shouldTerminate) {","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"wendelinwemhoener"},"content":" break;","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" The actual back text is: \" + flashcardToReview.getBackText());","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println();","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"wendelinwemhoener"},"content":" flashcardToReview.setLastReviewOn(LocalDateTime.now());","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" Success! You have ended this review session.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"wendelinwemhoener"},"content":" protected abstract Flashcard pickFlashcard();","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"wendelinwemhoener"},"content":" protected void printFlashcardFrontTextPrompt(Flashcard flashcardToReview) {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" \" + \"-\".repeat(76));","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" The front text is: \" + flashcardToReview.getFrontText());","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println();","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" [Think of the answer (the back text) in \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"wendelinwemhoener"},"content":" \"your head]\");","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" [Press \u003cENTER\u003e when you are ready to \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"wendelinwemhoener"},"content":" \"compare it, or enter \u0027q\u0027/\u0027quit\u0027 to end this \" +","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"wendelinwemhoener"},"content":" \"review session]\");","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"wendelinwemhoener":58}},{"path":"src/main/java/seedu/duke/flashcard/review/SpacedRepetitionReviewMode.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.review;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.Flashcard;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"public class SpacedRepetitionReviewMode extends ReviewMode {","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":" public SpacedRepetitionReviewMode(FlashcardList flashcardList) {","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":" super(flashcardList);","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" public String getReviewModeName() {","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" return \"spaced repetition mode\";","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":" protected Flashcard pickFlashcard() {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":" return null;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"wendelinwemhoener":20}},{"path":"src/test/java/seedu/duke/DukeTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.duke;","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardComponent;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"junhyeong0411"},"content":"import seedu.duke.flashcard.FlashcardStorage;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"class DukeTest {","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":" public void sampleTest() {","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" assertTrue(true);","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" public void testFlashcardComponent_isResponsible_notResponsible() {","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"junhyeong0411"},"content":" FlashcardComponent flashcardComponent \u003d new FlashcardComponent();","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"wendelinwemhoener"},"content":" assertFalse(flashcardComponent.isResponsible(\"dfdfdfdfdf\"));","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"wendelinwemhoener"},"content":" assertFalse(flashcardComponent.isResponsible(\"help me\"));","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"wendelinwemhoener"},"content":" assertFalse(flashcardComponent.isResponsible(\" \"));","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"wendelinwemhoener"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"wendelinwemhoener"},"content":" public void testFlashcardComponent_isResponsible_responsible() {","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"junhyeong0411"},"content":" FlashcardComponent flashcardComponent \u003d new FlashcardComponent();","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"wendelinwemhoener"},"content":" assertTrue(flashcardComponent.isResponsible(\"create flashcard\"));","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"wendelinwemhoener"},"content":" assertTrue(flashcardComponent.isResponsible(\"create flashcard \"));","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"wendelinwemhoener"},"content":" assertTrue(flashcardComponent.isResponsible(\"list flashcards\"));","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"junhyeong0411"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"junhyeong0411"},"content":" public void testFlashcardStorage_isAvailable(){","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"junhyeong0411"},"content":" FlashcardComponent flashcardComponent \u003d new FlashcardComponent();","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"junhyeong0411"},"content":" FlashcardStorage storage \u003d flashcardComponent.getStorage();","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"junhyeong0411"},"content":" assertTrue(storage.isStorageAvailable());","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"Brian030601"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"Brian030601"},"content":" public void testCalendar() {","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"Brian030601"},"content":" assertTrue(true);","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"wendelinwemhoener":20,"-":12,"junhyeong0411":10,"Brian030601":5}}] +[{"path":"README.md","fileType":"docs","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 (use the exact version), update Intellij to the most recent version.","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. **Ensure Intellij JDK 11 is defined as an SDK**, as described [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk) -- this step is not needed if you have used JDK 11 in a previous Intellij project.","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. **Import the project _as a Gradle project_**, as described [here](https://se-education.org/guides/tutorials/intellijImportGradleProject.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"1. **Verify the set up**: After the importing is complete, locate the `src/main/java/seedu/duke/Duke.java` file, right-click it, and choose `Run Duke.main()`. If the setup is correct, you should see something like the below:","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003e Task :compileJava","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003e Task :processResources NO-SOURCE","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003e Task :classes","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003e Task :Duke.main()","lastModifiedDate":"2020-05-24"},{"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-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":" What is your name?","lastModifiedDate":"2020-05-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" Type some word and press enter to let the execution proceed to the end.","lastModifiedDate":"2020-05-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":"## Build automation using Gradle","lastModifiedDate":"2020-05-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":"* This project uses Gradle for build automation and dependency management. It includes a basic build script as well (i.e. the `build.gradle` file).","lastModifiedDate":"2020-05-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":"* If you are new to Gradle, refer to the [Gradle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/gradle.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":"## Testing","lastModifiedDate":"2020-05-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":"### I/O redirection tests","lastModifiedDate":"2020-05-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"* To run _I/O redirection_ tests (aka _Text UI tests_), navigate to the `text-ui-test` and run the `runtest(.bat/.sh)` script.","lastModifiedDate":"2020-05-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":"### JUnit tests","lastModifiedDate":"2020-05-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":42,"author":{"gitId":"-"},"content":"* A skeleton JUnit test (`src/test/java/seedu/duke/DukeTest.java`) is provided with this project template. ","lastModifiedDate":"2020-05-24"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* If you are new to JUnit, refer to the [JUnit Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/junit.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":"## Checkstyle","lastModifiedDate":"2020-05-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* A sample CheckStyle rule configuration is provided in this project.","lastModifiedDate":"2020-05-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* If you are new to Checkstyle, refer to the [Checkstyle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/checkstyle.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":"## CI using GitHub Actions","lastModifiedDate":"2020-05-24"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":52,"author":{"gitId":"-"},"content":"The project uses [GitHub actions](https://github.com/features/actions) for CI. When you push a commit to this repo or PR against it, GitHub actions will run automatically to build and verify the code as updated by the commit/PR.","lastModifiedDate":"2020-05-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":"## Documentation","lastModifiedDate":"2020-05-24"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":56,"author":{"gitId":"-"},"content":"`/docs` folder contains a skeleton version of the project documentation.","lastModifiedDate":"2020-05-24"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":58,"author":{"gitId":"-"},"content":"Steps for publishing documentation to the public: ","lastModifiedDate":"2020-05-24"},{"lineNumber":59,"author":{"gitId":"-"},"content":"1. If you are using this project template for an individual project, go your fork on GitHub.\u003cbr\u003e","lastModifiedDate":"2020-05-24"},{"lineNumber":60,"author":{"gitId":"-"},"content":" If you are using this project template for a team project, go to the team fork on GitHub.","lastModifiedDate":"2020-05-24"},{"lineNumber":61,"author":{"gitId":"-"},"content":"1. Click on the `settings` tab.","lastModifiedDate":"2020-05-24"},{"lineNumber":62,"author":{"gitId":"-"},"content":"1. Scroll down to the `GitHub Pages` section.","lastModifiedDate":"2020-05-24"},{"lineNumber":63,"author":{"gitId":"-"},"content":"1. Set the `source` as `master branch /docs folder`.","lastModifiedDate":"2020-05-24"},{"lineNumber":64,"author":{"gitId":"-"},"content":"1. Optionally, use the `choose a theme` button to choose a theme for your documentation.","lastModifiedDate":"2020-05-24"},{"lineNumber":65,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"wendelinwemhoener":1,"-":64}},{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName.set(\"duke\")","lastModifiedDate":"2023-09-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run {","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"wendelinwemhoener"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"wendelinwemhoener":1,"-":46}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":4,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Portfolio ","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"--------|:------------------:|:--------------:|:---------:","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"![](https://media.licdn.com/dms/image/C4D03AQGTLbALYjG82Q/profile-displayphoto-shrink_800_800/0/1580629728751?e\u003d1701907200\u0026v\u003dbeta\u0026t\u003dPEfw_qZfZA39rJRfo5_Pg4o_RmbPwdneiPX3ftNt9dA) | Wendelin Wemhoener | [Github](https://github.com/wendelinwemhoener/) | [Portfolio](docs/team/wendelinwemhoener.md)","lastModifiedDate":"2023-10-06"},{"lineNumber":7,"author":{"gitId":"Cheezeblokz"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Zhu Jingxi | [Github](https://github.com/Cheezeblokz) | [Portfolio](docs/team/zhujingxi.md)","lastModifiedDate":"2023-10-06"},{"lineNumber":8,"author":{"gitId":"Brian030601"},"content":"![](/Users/brian/Desktop/Colgate/NUS Fall 2023/CS2113/Team Project/docs/photo/kherlenbayasgalan.jpg) | Kherlen Bayasgalan | [Github](https://github.com/Brian030601) | [Portfolio](docs/team/kherlenbayasgalan.md)","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"junhyeong0411"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Bang Junhyeong | [Github](https://github.com/junhyeong0411) | [Portfolio](docs/team/bangjunhyeong.md)","lastModifiedDate":"2023-10-06"},{"lineNumber":10,"author":{"gitId":"-"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Don Roe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"wendelinwemhoener":2,"Cheezeblokz":2,"-":4,"junhyeong0411":1,"Brian030601":1}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# User Guide","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Introduction","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"TaskLinker is a CLI-tool for helping students memorize flashcards and track ","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"their flashcard and generell academic progress in the courses they are taking.","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"## Quick Start","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. Ensure that you have Java 11 or above installed.","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":"1. Down the latest jar from [the latest release on GitHub]","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" (https://github.com/AY2324S1-CS2113-F11-3/tp/releases).","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":"1. Run the jar via `java -jar duke.jar`","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":"## General explanation of flashcards","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2020-05-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":"### Listing all flashcards: `list flashcards`","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"wendelinwemhoener"},"content":"Prints out a list of all flashcards.","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"wendelinwemhoener"},"content":"Format: `list flashcards`","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":27,"author":{"gitId":"-"},"content":"### Adding a todo: `todo`","lastModifiedDate":"2020-05-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"Adds a new item to the list of todo items.","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":"Format: `todo n/TODO_NAME d/DEADLINE`","lastModifiedDate":"2020-05-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":"* The `DEADLINE` can be in a natural language format.","lastModifiedDate":"2020-05-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"* The `TODO_NAME` cannot contain punctuation.","lastModifiedDate":"2020-05-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":"Example of usage:","lastModifiedDate":"2020-05-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":"`todo n/Write the rest of the User Guide d/next week`","lastModifiedDate":"2020-05-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":"`todo n/Refactor the User Guide to remove passive voice d/13/04/2020`","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":41,"author":{"gitId":"wendelinwemhoener"},"content":"### Creating a new flashcard: `create flashcard`","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"wendelinwemhoener"},"content":"Starts the process of adding a new flashcard.","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"wendelinwemhoener"},"content":"After entering this command, you are prompted to first input the front page ","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"wendelinwemhoener"},"content":"text (once you have typed it out, submit it by pressing \u003cENTER\u003e) and then the ","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"wendelinwemhoener"},"content":"back page text (once you have typed it out, submit it by pressing \u003cENTER\u003e) of ","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"wendelinwemhoener"},"content":"your new flashcard.","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"wendelinwemhoener"},"content":"After you\u0027ve done this, a success message will be printed out. This ","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"wendelinwemhoener"},"content":"indicates that a new flashcard has been successfully created and saved.","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"wendelinwemhoener"},"content":"Format: `create flashcard`","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"wendelinwemhoener"},"content":"### Reviewing your flashcards: `review flashcards`","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"wendelinwemhoener"},"content":"Starts the process of reviewing flashcard.","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"wendelinwemhoener"},"content":"After entering this command, you are prompted to select your exact review ","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"wendelinwemhoener"},"content":"mode from 3 choices:","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"wendelinwemhoener"},"content":"- `random mode`: Randomly selects flashcards to review","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"wendelinwemhoener"},"content":"- `spaced repetition mode`: Which flashcards are shown depends on how well ","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"wendelinwemhoener"},"content":" you previously knew them. Flashcards which you couldn\u0027t remember well are ","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"wendelinwemhoener"},"content":" shown more often, while flashcards which you remembered well are shown ","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"wendelinwemhoener"},"content":" less often.","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"wendelinwemhoener"},"content":"- `review by tag mode`: Randomly selects flashcards with a certain tag to review","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"wendelinwemhoener"},"content":"Input `a` to choose `random mode`, input `b` to choose `spaced repetition ","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"wendelinwemhoener"},"content":"mode` and input `c` to choose `review by tag mode`.","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"wendelinwemhoener"},"content":"Once you\u0027ve selected a review mode, the actual review begins: the front page ","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"wendelinwemhoener"},"content":"of a flashcard is shown to you. You should now try and think of the answer ","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"wendelinwemhoener"},"content":"(the text on the back page of the flashcard); and once you\u0027re ready, press ","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"wendelinwemhoener"},"content":"\u003cENTER\u003e to compare it to the actual back page.","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"wendelinwemhoener"},"content":"Now, the process repeats and the next flashcard is shown to you.","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"wendelinwemhoener"},"content":"If you want to quit the review process, simply input `q` or `quit` instead ","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"wendelinwemhoener"},"content":"of pressing \u003cENTER\u003e to reveal the back page.","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"wendelinwemhoener"},"content":"Format: `create flashcard`","lastModifiedDate":"2023-10-23"},{"lineNumber":83,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":84,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-24"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":86,"author":{"gitId":"-"},"content":"**Q**: How do I transfer my data to another computer? ","lastModifiedDate":"2020-05-24"},{"lineNumber":87,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":88,"author":{"gitId":"-"},"content":"**A**: {your answer here}","lastModifiedDate":"2020-05-24"},{"lineNumber":89,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":90,"author":{"gitId":"-"},"content":"## Command Summary","lastModifiedDate":"2020-05-24"},{"lineNumber":91,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":92,"author":{"gitId":"wendelinwemhoener"},"content":"* List all flashcards: `list flashcards`","lastModifiedDate":"2023-10-23"},{"lineNumber":93,"author":{"gitId":"wendelinwemhoener"},"content":"* Create a new flashcard: `create flashcard`","lastModifiedDate":"2023-10-23"},{"lineNumber":94,"author":{"gitId":"wendelinwemhoener"},"content":"* Review your flashcards: `review flashcards`","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"wendelinwemhoener":58,"-":36}},{"path":"docs/team/bangjunhyeong.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"junhyeong0411"},"content":"# Bang Junhyeong - Project Portfolio Page","lastModifiedDate":"2023-10-06"},{"lineNumber":2,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":3,"author":{"gitId":"junhyeong0411"},"content":"## Overview","lastModifiedDate":"2023-10-06"},{"lineNumber":4,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":5,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"junhyeong0411"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-06"}],"authorContributionMap":{"junhyeong0411":6}},{"path":"docs/team/kherlenbayasgalan.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Brian030601"},"content":"# Kherlen Bayasgalan - Project Portfolio Page","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"Brian030601"},"content":"## Overview","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"Brian030601"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"Brian030601":6}},{"path":"docs/team/wendelinwemhoener.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"# Wendelin Wemhoener - Project Portfolio Page","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"## Overview","lastModifiedDate":"2023-10-06"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-06"}],"authorContributionMap":{"wendelinwemhoener":6}},{"path":"docs/team/zhujingxi.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"Cheezeblokz"},"content":"# Zhu Jingxi - Project Portfolio Page","lastModifiedDate":"2023-10-06"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Overview","lastModifiedDate":"2023-10-06"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"-"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-06"}],"authorContributionMap":{"Cheezeblokz":1,"-":5}},{"path":"src/main/java/seedu/duke/Duke.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke;","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.calendar.CalendarManager;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardComponent;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Scanner;","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" public Duke() {}","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" new Duke().run();","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":" private void run() {","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" FlashcardComponent fc \u003d new FlashcardComponent();","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":" CalendarManager cm \u003d new CalendarManager(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"wendelinwemhoener"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"wendelinwemhoener"},"content":" String input;","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"wendelinwemhoener"},"content":" boolean shouldTerminate \u003d false;","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"wendelinwemhoener"},"content":" while (!shouldTerminate) {","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"wendelinwemhoener"},"content":" input \u003d scanner.nextLine();","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"wendelinwemhoener"},"content":" if (fc.isResponsible(input)) {","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"wendelinwemhoener"},"content":" fc.processInput(input);","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"wendelinwemhoener"},"content":" } else if (cm.isResponsible(input)) {","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"wendelinwemhoener"},"content":" cm.processInput(input);","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"wendelinwemhoener"},"content":" } else if (input.startsWith(\"help\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"wendelinwemhoener"},"content":" printHelp();","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"wendelinwemhoener"},"content":" } else {","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" Invalid command! Please try again.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":41,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"wendelinwemhoener"},"content":" private void printHelp() {","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" If you need help, please consult our \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"wendelinwemhoener"},"content":" \"user guide at https://ay2324s1-cs2113-f11-3.github\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"wendelinwemhoener"},"content":" \".io/tp/UserGuide.html\");","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println();","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" Here is a quick overview over all available \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"wendelinwemhoener"},"content":" \"commands: \");","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"wendelinwemhoener"},"content":" String[] commandFormats \u003d new String[] {","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"wendelinwemhoener"},"content":" \"list flashcards\",","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"wendelinwemhoener"},"content":" \"create flashcard\",","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"wendelinwemhoener"},"content":" \"review flashcards\",","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"wendelinwemhoener"},"content":" \"help\",","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"wendelinwemhoener"},"content":" };","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"wendelinwemhoener"},"content":" for (String commandFormat : commandFormats) {","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" - \" + commandFormat);","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"wendelinwemhoener":61}},{"path":"src/main/java/seedu/duke/calendar/Calendar.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Brian030601"},"content":"//@@ kherlenbayasgalan \u0026 jingxizhu","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"Cheezeblokz"},"content":"package seedu.duke.calendar;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Cheezeblokz"},"content":"public class Calendar {","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"Brian030601"},"content":" EventList eventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"Cheezeblokz"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Cheezeblokz":4,"Brian030601":3}},{"path":"src/main/java/seedu/duke/calendar/CalendarCommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Brian030601"},"content":"//@@ kherlenbayasgalan \u0026 jingxizhu","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"Cheezeblokz"},"content":"package seedu.duke.calendar;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.command.AddEventCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.command.DeleteEventCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.command.EventCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.command.ListCalendarEventsCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.command.UnknownCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"Cheezeblokz"},"content":"public class CalendarCommandParser {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"Brian030601"},"content":" public EventCommand parseInput(String input) {","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"Brian030601"},"content":" assert input !\u003d null : \"input is null\";","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"Brian030601"},"content":" if (input.startsWith(\"add event\")) {","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"Brian030601"},"content":" return new AddEventCommand();","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"Brian030601"},"content":" } else if (input.startsWith(\"delete event\")) {","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"Brian030601"},"content":" return new DeleteEventCommand();","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"Brian030601"},"content":" } else if (input.startsWith(\"list event\")) {","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"Brian030601"},"content":" return new ListCalendarEventsCommand();","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"Brian030601"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"Cheezeblokz"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Cheezeblokz":4,"Brian030601":21}},{"path":"src/main/java/seedu/duke/calendar/CalendarManager.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Brian030601"},"content":"//@@ kherlenbayasgalan \u0026 jingxizhu","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"Cheezeblokz"},"content":"package seedu.duke.calendar;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.command.EventCommand;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.command.UnknownCommand;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.Event;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"junhyeong0411"},"content":"import seedu.duke.flashcard.FlashcardStorage;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"junhyeong0411"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Brian030601"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"Cheezeblokz"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"Cheezeblokz"},"content":"public class CalendarManager {","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"Cheezeblokz"},"content":" Calendar calendar;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"Cheezeblokz"},"content":" CalendarUi calendarUi;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"Brian030601"},"content":" EventList eventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Cheezeblokz"},"content":" CalendarCommandParser calendarCommandParser;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"Cheezeblokz"},"content":" Scanner scanner;","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"junhyeong0411"},"content":" private EventStorage storage;","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"Brian030601"},"content":" public CalendarManager(ArrayList\u003cEvent\u003e events) {","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"junhyeong0411"},"content":" EventDirectory eventdirectory \u003d new EventDirectory();","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"junhyeong0411"},"content":" eventdirectory.listEventFiles();","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"junhyeong0411"},"content":" storage \u003d new EventStorage(\"./data/events/event.txt\");","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"junhyeong0411"},"content":" try{","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"junhyeong0411"},"content":" eventList \u003d storage.loadEvents();","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"junhyeong0411"},"content":" } catch (FileNotFoundException e){","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"Making new file for Events\");","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"Brian030601"},"content":" eventList \u003d new EventList(events);","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"Cheezeblokz"},"content":" calendar \u003d new Calendar();","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"Brian030601"},"content":" calendarUi \u003d new CalendarUi(eventList);","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"Cheezeblokz"},"content":" calendarCommandParser \u003d new CalendarCommandParser();","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"Cheezeblokz"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"junhyeong0411"},"content":" public EventStorage getStorage(){","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"junhyeong0411"},"content":" return this.storage;","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"Cheezeblokz"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"Brian030601"},"content":" public boolean validCommand(String input) {","lastModifiedDate":"2023-10-19"},{"lineNumber":49,"author":{"gitId":"Brian030601"},"content":" EventCommand command \u003d calendarCommandParser.parseInput(input);","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"Brian030601"},"content":" return !(command instanceof UnknownCommand);","lastModifiedDate":"2023-10-19"},{"lineNumber":52,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"wendelinwemhoener"},"content":" public boolean isResponsible(String input) {","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"wendelinwemhoener"},"content":" return validCommand(input);","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"wendelinwemhoener"},"content":" public void processInput(String input) {","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"wendelinwemhoener"},"content":" startCalendar(input);","lastModifiedDate":"2023-10-19"},{"lineNumber":60,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"junhyeong0411"},"content":" storage.saveEvents(eventList.getEvent());","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"Brian030601"},"content":" public void startCalendar(String input) {","lastModifiedDate":"2023-10-19"},{"lineNumber":65,"author":{"gitId":"Brian030601"},"content":" EventCommand command \u003d calendarCommandParser.parseInput(input);","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"Brian030601"},"content":" assert !(command instanceof seedu.duke.calendar.command.UnknownCommand) :","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"Brian030601"},"content":" \"Command cannot be \" + \"unknown\";","lastModifiedDate":"2023-10-19"},{"lineNumber":68,"author":{"gitId":"Brian030601"},"content":" calendarUi.executeCommand(command);","lastModifiedDate":"2023-10-19"},{"lineNumber":69,"author":{"gitId":"Brian030601"},"content":" //calendarCommandParser.parseInput(command);","lastModifiedDate":"2023-10-19"},{"lineNumber":70,"author":{"gitId":"Cheezeblokz"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"Cheezeblokz"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"wendelinwemhoener":8,"Cheezeblokz":18,"junhyeong0411":23,"Brian030601":23}},{"path":"src/main/java/seedu/duke/calendar/CalendarUi.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Cheezeblokz"},"content":"package seedu.duke.calendar;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.command.EventCommand;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"Brian030601"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"Cheezeblokz"},"content":"public class CalendarUi {","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"Brian030601"},"content":" private Scanner scanner;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Brian030601"},"content":" private EventList eventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Brian030601"},"content":" public CalendarUi (EventList eventList) {","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"Brian030601"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Brian030601"},"content":" this.eventList \u003d eventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"Brian030601"},"content":" public void executeCommand(EventCommand command) {","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"Brian030601"},"content":" command.execute(scanner, eventList);","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Cheezeblokz"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"Cheezeblokz"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Cheezeblokz":5,"Brian030601":14}},{"path":"src/main/java/seedu/duke/calendar/EventDirectory.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"junhyeong0411"},"content":"package seedu.duke.calendar;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"junhyeong0411"},"content":"import java.io.File;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"junhyeong0411"},"content":"/**","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"junhyeong0411"},"content":" * directory for directory","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"junhyeong0411"},"content":" * can list-up txt files in text folder","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"junhyeong0411"},"content":" * In version 1, using only event.txt","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"junhyeong0411"},"content":" * In version 2, can select or create","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"junhyeong0411"},"content":"public class EventDirectory {","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"junhyeong0411"},"content":" String path;","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"junhyeong0411"},"content":" File file;","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"junhyeong0411"},"content":" public EventDirectory(){","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"junhyeong0411"},"content":" path \u003d \"./data/events\";","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"junhyeong0411"},"content":" file \u003d new File(path);","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"junhyeong0411"},"content":" if(!file.exists()){","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"junhyeong0411"},"content":" if(file.mkdir()){","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\" Created events directory\");","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"junhyeong0411"},"content":" } else{","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\" Failed to create directory\");","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"junhyeong0411"},"content":" } else{","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\" Using data/events directory\");","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"junhyeong0411"},"content":" * list-up saved files","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"junhyeong0411"},"content":" * selecting file is for version 2","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"junhyeong0411"},"content":" public void listEventFiles(){","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"junhyeong0411"},"content":" String[] eventFiles \u003d file.list();","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"junhyeong0411"},"content":" if(eventFiles \u003d\u003d null){","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"Failed to find files\");","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"junhyeong0411"},"content":" } else if(eventFiles.length \u003d\u003d 0){","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"No files exist\");","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"junhyeong0411"},"content":" } else{","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"junhyeong0411"},"content":" for(String eventFile : eventFiles){","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\" \"+eventFile);","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":47,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":48,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":49,"author":{"gitId":"junhyeong0411"},"content":" * return default directory","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"junhyeong0411"},"content":" * for version 1","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"junhyeong0411"},"content":" * @return directory for flashcard txt file","lastModifiedDate":"2023-10-19"},{"lineNumber":52,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"junhyeong0411"},"content":" public String defaultDirectory() {","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"junhyeong0411"},"content":" return this.path + \"/event.txt\";","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"junhyeong0411"},"content":" * return directory of flashcard txt file","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"junhyeong0411"},"content":" * for version 2","lastModifiedDate":"2023-10-19"},{"lineNumber":60,"author":{"gitId":"junhyeong0411"},"content":" * @param path","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"junhyeong0411"},"content":" * @return","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"junhyeong0411"},"content":" public String eventDirectory(String path) {","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"junhyeong0411"},"content":" return this.path + path;","lastModifiedDate":"2023-10-19"},{"lineNumber":65,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"junhyeong0411"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"junhyeong0411":67}},{"path":"src/main/java/seedu/duke/calendar/EventList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Brian030601"},"content":"package seedu.duke.calendar;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"Brian030601"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"Brian030601"},"content":"public class EventList {","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"Brian030601"},"content":" private ArrayList\u003cEvent\u003e eventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Brian030601"},"content":" public EventList(ArrayList\u003cEvent\u003e eventList) {","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"Brian030601"},"content":" this.eventList \u003d eventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Brian030601"},"content":" public void addEvent(Event event) {","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"Brian030601"},"content":" eventList.add(event);","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"Brian030601"},"content":" public ArrayList\u003cEvent\u003e getEvent() {","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Brian030601"},"content":" return eventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"junhyeong0411"},"content":" public int getSize(){ return eventList.size();}","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"Brian030601"},"content":" public void deleteEvent(String name) {","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"Brian030601"},"content":" eventList.removeIf(event -\u003e event.getName().equals(name));","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"Brian030601"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"Brian030601"},"content":" public String toString() {","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"Brian030601"},"content":" return \"EventStorage{\" +","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"Brian030601"},"content":" \"events\u003d\" + eventList +","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"Brian030601"},"content":" \u0027}\u0027;","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"Brian030601"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"junhyeong0411":2,"Brian030601":30}},{"path":"src/main/java/seedu/duke/calendar/EventStorage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"junhyeong0411"},"content":"package seedu.duke.calendar;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"junhyeong0411"},"content":"import java.io.File;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"junhyeong0411"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"junhyeong0411"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"junhyeong0411"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"junhyeong0411"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"junhyeong0411"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"junhyeong0411"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"junhyeong0411"},"content":"/**","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"junhyeong0411"},"content":" * storage for Events","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"junhyeong0411"},"content":" * One storage manages one file","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"junhyeong0411"},"content":"public class EventStorage {","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"junhyeong0411"},"content":" protected String path;","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"junhyeong0411"},"content":" public EventStorage(String path){","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"junhyeong0411"},"content":" this.path \u003d path;","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"junhyeong0411"},"content":" public boolean isStorageAvailable(){","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"junhyeong0411"},"content":" File f \u003d new File(this.path);","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"junhyeong0411"},"content":" return f.exists();","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"junhyeong0411"},"content":" * load a event from certain format","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"junhyeong0411"},"content":" * Tokens includes attributes of Event","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"junhyeong0411"},"content":" * @param tokens","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"junhyeong0411"},"content":" * @return Event object","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"junhyeong0411"},"content":" private Event loadEvent(String[] tokens){","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"junhyeong0411"},"content":" assert tokens.length \u003d\u003d 3: \"Token length should be 3\";","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"junhyeong0411"},"content":" String name \u003d tokens[0].trim();","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"junhyeong0411"},"content":" LocalDateTime from \u003d LocalDateTime.parse(tokens[1].trim());","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"junhyeong0411"},"content":" LocalDateTime to \u003d LocalDateTime.parse(tokens[2].trim());","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"junhyeong0411"},"content":" return new Event(name, from, to);","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"junhyeong0411"},"content":" * load list of events","lastModifiedDate":"2023-10-19"},{"lineNumber":47,"author":{"gitId":"junhyeong0411"},"content":" * from this.path","lastModifiedDate":"2023-10-19"},{"lineNumber":48,"author":{"gitId":"junhyeong0411"},"content":" * @return list of Events","lastModifiedDate":"2023-10-19"},{"lineNumber":49,"author":{"gitId":"junhyeong0411"},"content":" * @throws FileNotFoundException","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"junhyeong0411"},"content":" public EventList loadEvents() throws FileNotFoundException{","lastModifiedDate":"2023-10-19"},{"lineNumber":52,"author":{"gitId":"junhyeong0411"},"content":" EventList eventList \u003d new EventList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"junhyeong0411"},"content":" File f \u003d new File (this.path);","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"junhyeong0411"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"junhyeong0411"},"content":" while(s.hasNext()){","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"junhyeong0411"},"content":" String[] eventTokens \u003d s.nextLine().split(\" \\\\| \");","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"junhyeong0411"},"content":" eventList.addEvent(loadEvent(eventTokens));","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":60,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(String.format(","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"junhyeong0411"},"content":" \" There are currently %d events in the savefile\",","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"junhyeong0411"},"content":" eventList.getSize()));","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":65,"author":{"gitId":"junhyeong0411"},"content":" return eventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":68,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":69,"author":{"gitId":"junhyeong0411"},"content":" public void saveEvents(ArrayList\u003cEvent\u003e eventList) {","lastModifiedDate":"2023-10-19"},{"lineNumber":70,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":71,"author":{"gitId":"junhyeong0411"},"content":" try {","lastModifiedDate":"2023-10-19"},{"lineNumber":72,"author":{"gitId":"junhyeong0411"},"content":" FileWriter fw \u003d new FileWriter(path);","lastModifiedDate":"2023-10-19"},{"lineNumber":73,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":74,"author":{"gitId":"junhyeong0411"},"content":" for (int i \u003d 0; i \u003c eventList.size(); i++) {","lastModifiedDate":"2023-10-19"},{"lineNumber":75,"author":{"gitId":"junhyeong0411"},"content":" Event event \u003d eventList.get(i);","lastModifiedDate":"2023-10-19"},{"lineNumber":76,"author":{"gitId":"junhyeong0411"},"content":" fw.write(String.format(\"%s | %s | %s \\r\\n\",","lastModifiedDate":"2023-10-19"},{"lineNumber":77,"author":{"gitId":"junhyeong0411"},"content":" event.getName(), event.getFrom(), event.getTo()));","lastModifiedDate":"2023-10-19"},{"lineNumber":78,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":79,"author":{"gitId":"junhyeong0411"},"content":" fw.close();","lastModifiedDate":"2023-10-19"},{"lineNumber":80,"author":{"gitId":"junhyeong0411"},"content":" } catch (IOException e){","lastModifiedDate":"2023-10-19"},{"lineNumber":81,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"Failed to save.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":82,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":83,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":84,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":85,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":86,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":87,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":88,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":89,"author":{"gitId":"junhyeong0411"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"junhyeong0411":89}},{"path":"src/main/java/seedu/duke/calendar/command/AddEventCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Brian030601"},"content":"//@@ kherlenbayasgalan \u0026 jingxizhu","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"Cheezeblokz"},"content":"package seedu.duke.calendar.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.Event;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.EventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"Cheezeblokz"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Brian030601"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Cheezeblokz"},"content":"public class AddEventCommand extends EventCommand{","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"Brian030601"},"content":" public void execute(Scanner scanner, EventList eventList) {","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Brian030601"},"content":" System.out.print(\"What\u0027s the event?: \");","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"Cheezeblokz"},"content":" String eventName \u003d scanner.nextLine();","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"Brian030601"},"content":" System.out.print(\"When does it start? (yyyy-mm-ddThh:mm:ss) (eg. 2023-12-20T12:30:30): \");","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"Brian030601"},"content":" LocalDateTime startTime \u003d LocalDateTime.parse(scanner.nextLine());","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"Brian030601"},"content":" System.out.print(\"When does it end? (yyyy-mm-ddThh:mm:ss) (eg. 2023-12-20T12:30:30): \");","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Brian030601"},"content":" LocalDateTime endTime \u003d LocalDateTime.parse(scanner.nextLine());","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"Brian030601"},"content":" Event event \u003d new Event(eventName, startTime, endTime);","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"Brian030601"},"content":" eventList.addEvent(event);","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"Brian030601"},"content":" System.out.println(event + \" has been added to you calendar\");","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"Brian030601"},"content":" System.out.print(\"Enter your command: \");","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"Cheezeblokz"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"Cheezeblokz"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Cheezeblokz":10,"Brian030601":17}},{"path":"src/main/java/seedu/duke/calendar/command/DeleteEventCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Brian030601"},"content":"//@@ kherlenbayasgalan \u0026 jingxizhu","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"Cheezeblokz"},"content":"package seedu.duke.calendar.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.EventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"Cheezeblokz"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Cheezeblokz"},"content":"public class DeleteEventCommand extends EventCommand{","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"Brian030601"},"content":" public void execute(Scanner scanner, EventList eventList) {","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Cheezeblokz"},"content":" System.out.print(\"Enter the event name: \");","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"Cheezeblokz"},"content":" String eventName \u003d scanner.nextLine();","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"Brian030601"},"content":" eventList.deleteEvent(eventName);","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"Brian030601"},"content":" System.out.println(eventName + \" has been deleted from your Calendar!\");","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"Brian030601"},"content":" System.out.print(\"Enter your command: \");","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"Cheezeblokz"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Cheezeblokz"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Cheezeblokz":10,"Brian030601":8}},{"path":"src/main/java/seedu/duke/calendar/command/ListCalendarEventsCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Brian030601"},"content":"//@@ kherlenbayasgalan \u0026 jingxizhu","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"Cheezeblokz"},"content":"package seedu.duke.calendar.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.Event;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.EventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"Brian030601"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"Cheezeblokz"},"content":"public class ListCalendarEventsCommand extends EventCommand{","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"Brian030601"},"content":" public void execute(Scanner scanner, EventList eventList) {","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"Brian030601"},"content":" System.out.println(\"Here is a list of all your events: \");","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Brian030601"},"content":" printLine();","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"Brian030601"},"content":" for (Event event : eventList.getEvent()) {","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"Brian030601"},"content":" System.out.println(event);","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"Brian030601"},"content":" printLine();","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"Brian030601"},"content":" System.out.print(\"Enter your command: \");","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"Brian030601"},"content":" public void printLine() {","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"Brian030601"},"content":" System.out.println(\"-------------------\");","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"Cheezeblokz"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Cheezeblokz":4,"Brian030601":21}},{"path":"src/main/java/seedu/duke/calendar/command/UnknownCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Brian030601"},"content":"//@@ kherlenbayasgalan \u0026 jingxizhu","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"Cheezeblokz"},"content":"package seedu.duke.calendar.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Brian030601"},"content":"import seedu.duke.calendar.EventList;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"Cheezeblokz"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"Cheezeblokz"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"Cheezeblokz"},"content":"public class UnknownCommand extends EventCommand{","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"Brian030601"},"content":" public void execute(Scanner scanner, EventList eventList) {","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"Brian030601"},"content":" System.out.println(\"Unknown command! Please enter a valid command.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"Cheezeblokz"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"Cheezeblokz"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Cheezeblokz":8,"Brian030601":5}},{"path":"src/main/java/seedu/duke/flashcard/Flashcard.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.review.FlashcardReview;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"public class Flashcard {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":" private String frontText;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" private String backText;","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" private ArrayList\u003cString\u003e tags;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" private ArrayList\u003cFlashcardReview\u003e reviews;","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" private LocalDateTime lastReviewOn;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" public Flashcard(String frontText, String backText) {","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":" this.frontText \u003d frontText;","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":" this.backText \u003d backText;","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"wendelinwemhoener"},"content":" tags \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"wendelinwemhoener"},"content":" reviews \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"wendelinwemhoener"},"content":" lastReviewOn \u003d null;","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"wendelinwemhoener"},"content":" public void setLastReviewOn(LocalDateTime lastReviewOn) {","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"wendelinwemhoener"},"content":" this.lastReviewOn \u003d lastReviewOn;","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"wendelinwemhoener"},"content":" public String getFrontText() {","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"wendelinwemhoener"},"content":" return frontText;","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"wendelinwemhoener"},"content":" public String getBackText() {","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"wendelinwemhoener"},"content":" return backText;","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"wendelinwemhoener"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"wendelinwemhoener"},"content":" return \"front text: \" + frontText + System.lineSeparator()","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"wendelinwemhoener"},"content":" + \"back text: \" + backText + System.lineSeparator()","lastModifiedDate":"2023-10-13"},{"lineNumber":44,"author":{"gitId":"wendelinwemhoener"},"content":" + \"tags: \" + tags.toString() + System.lineSeparator()","lastModifiedDate":"2023-10-13"},{"lineNumber":45,"author":{"gitId":"wendelinwemhoener"},"content":" + \"next review due on: \" + lastReviewOn + System.lineSeparator();","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"wendelinwemhoener"},"content":" public void addReview(FlashcardReview flashcardReview) {","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"wendelinwemhoener"},"content":" reviews.add(flashcardReview);","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":51}},{"path":"src/main/java/seedu/duke/flashcard/FlashcardCommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.command.FlashcardCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.command.CreateFlashcardCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.command.ListFlashcardsCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.command.StartReviewCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.command.UnknownCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":"public class FlashcardCommandParser {","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" public FlashcardCommand parseInput(String input) {","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" assert input !\u003d null : \"input is null\";","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" if (input.startsWith(\"create flashcard\")) {","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":" return new CreateFlashcardCommand();","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":" } else if (input.startsWith(\"list flashcards\")) {","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":" return new ListFlashcardsCommand();","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" } else if (input.startsWith(\"review flashcards\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":" return new StartReviewCommand();","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"wendelinwemhoener"},"content":" return new UnknownCommand();","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":25}},{"path":"src/main/java/seedu/duke/flashcard/FlashcardComponent.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.command.FlashcardCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.command.UnknownCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":"public class FlashcardComponent {","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" private FlashcardCommandParser parser;","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" private FlashcardList flashcardList;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" private FlashcardUi ui;","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" private FlashcardStorage storage;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":" public FlashcardComponent() {","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" parser \u003d new FlashcardCommandParser();","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"junhyeong0411"},"content":" //@@author junhyeong0411","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"junhyeong0411"},"content":" FlashcardDirectory flashcarddirectory \u003d new FlashcardDirectory();","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"junhyeong0411"},"content":" flashcarddirectory.listFlashcardFiles();","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"junhyeong0411"},"content":" storage \u003d new FlashcardStorage(\"./data/flashcards/flashcard.txt\");","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"junhyeong0411"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"junhyeong0411"},"content":" flashcardList \u003d storage.loadFlashcards();","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"junhyeong0411"},"content":" } catch (FileNotFoundException e){","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"Making New file for Flashcards\");","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"junhyeong0411"},"content":" flashcardList \u003d new FlashcardList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"wendelinwemhoener"},"content":" //@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"wendelinwemhoener"},"content":" ui \u003d new FlashcardUi(flashcardList);","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"junhyeong0411"},"content":" //@@author junhyeong0411","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"junhyeong0411"},"content":" public FlashcardStorage getStorage(){","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"junhyeong0411"},"content":" return this.storage;","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"wendelinwemhoener"},"content":" //@@author wendelinwemhoener","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"wendelinwemhoener"},"content":" public boolean isResponsible(String input) {","lastModifiedDate":"2023-10-13"},{"lineNumber":44,"author":{"gitId":"wendelinwemhoener"},"content":" FlashcardCommand command \u003d parser.parseInput(input);","lastModifiedDate":"2023-10-13"},{"lineNumber":45,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":46,"author":{"gitId":"wendelinwemhoener"},"content":" if (command instanceof UnknownCommand) {","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"wendelinwemhoener"},"content":" return false;","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"wendelinwemhoener"},"content":" } else {","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"wendelinwemhoener"},"content":" return true;","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":51,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":52,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":53,"author":{"gitId":"wendelinwemhoener"},"content":" public void processInput(String input) {","lastModifiedDate":"2023-10-13"},{"lineNumber":54,"author":{"gitId":"wendelinwemhoener"},"content":" FlashcardCommand command \u003d parser.parseInput(input);","lastModifiedDate":"2023-10-13"},{"lineNumber":55,"author":{"gitId":"wendelinwemhoener"},"content":" assert !(command instanceof UnknownCommand) : \"Command cannot be \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"wendelinwemhoener"},"content":" \"unknown\";","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"wendelinwemhoener"},"content":" ui.executeCommand(command);","lastModifiedDate":"2023-10-13"},{"lineNumber":59,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"junhyeong0411"},"content":" //@@author junhyeong0411","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"junhyeong0411"},"content":" // save after every commands","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"junhyeong0411"},"content":" storage.saveFlashcards(flashcardList.getFlashcards());","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"wendelinwemhoener"},"content":" //@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":66,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":45,"junhyeong0411":21}},{"path":"src/main/java/seedu/duke/flashcard/FlashcardDirectory.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"junhyeong0411"},"content":"package seedu.duke.flashcard;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"junhyeong0411"},"content":"import java.io.File;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"junhyeong0411"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"junhyeong0411"},"content":" * directory for flashcards","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"junhyeong0411"},"content":" * can list-up txt files in text folder","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"junhyeong0411"},"content":" * In version 1, using only flashcard.txt","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"junhyeong0411"},"content":" * In version 2, can select or create","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"junhyeong0411"},"content":"public class FlashcardDirectory {","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"junhyeong0411"},"content":" String path;","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"junhyeong0411"},"content":" File file;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"junhyeong0411"},"content":" public FlashcardDirectory(){","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"junhyeong0411"},"content":" path \u003d \"./data/flashcards\";","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"junhyeong0411"},"content":" file \u003d new File(path);","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"junhyeong0411"},"content":" if(!file.exists()){","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"junhyeong0411"},"content":" if(file.mkdir()){","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\" Created flashcards directory\");","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"junhyeong0411"},"content":" } else{","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\" Failed to create directory\");","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"junhyeong0411"},"content":" } else{","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\" Using data/flashcards directory\");","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"junhyeong0411"},"content":" * list-up saved files","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"junhyeong0411"},"content":" * selecting file is for version 2","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"junhyeong0411"},"content":" public void listFlashcardFiles(){","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"junhyeong0411"},"content":" String[] flashcardFiles \u003d file.list();","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"junhyeong0411"},"content":" if(flashcardFiles \u003d\u003d null){","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"Failed to find files\");","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"junhyeong0411"},"content":" } else if(flashcardFiles.length \u003d\u003d 0){","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"No files exist\");","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"wendelinwemhoener"},"content":" } else{","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"junhyeong0411"},"content":" for(String flashcardFile : flashcardFiles){","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\" \"+flashcardFile);","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"junhyeong0411"},"content":" * return default directory","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"junhyeong0411"},"content":" * for version 1","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"junhyeong0411"},"content":" * @return directory for flashcard txt file","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"junhyeong0411"},"content":" public String defaultDirectory() {","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"junhyeong0411"},"content":" return this.path + \"/flashcard.txt\";","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"junhyeong0411"},"content":" * return directory of flashcard txt file","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"junhyeong0411"},"content":" * for version 2","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"junhyeong0411"},"content":" * @param path","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"junhyeong0411"},"content":" * @return","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"junhyeong0411"},"content":" public String flashcardDirectory(String path) {","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"junhyeong0411"},"content":" return this.path + path;","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"junhyeong0411"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"wendelinwemhoener":1,"junhyeong0411":67}},{"path":"src/main/java/seedu/duke/flashcard/FlashcardList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"public class FlashcardList {","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":" private ArrayList\u003cFlashcard\u003e flashcards;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":" public FlashcardList(ArrayList\u003cFlashcard\u003e flashcards) {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":" this.flashcards \u003d flashcards;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" public ArrayList\u003cFlashcard\u003e getFlashcards() {","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" return flashcards;","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"junhyeong0411"},"content":" // @@author junhyeong0411","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"junhyeong0411"},"content":" public int getSize(){","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"junhyeong0411"},"content":" return flashcards.size();","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"junhyeong0411"},"content":" public void add(Flashcard flashcard) {","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"junhyeong0411"},"content":" flashcards.add(flashcard);","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"junhyeong0411"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":17,"junhyeong0411":10}},{"path":"src/main/java/seedu/duke/flashcard/FlashcardStorage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"junhyeong0411"},"content":"package seedu.duke.flashcard;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"junhyeong0411"},"content":"import java.io.File;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"junhyeong0411"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"junhyeong0411"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"junhyeong0411"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"junhyeong0411"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"junhyeong0411"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"junhyeong0411"},"content":"import java.util.logging.*;","lastModifiedDate":"2023-10-20"},{"lineNumber":10,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"junhyeong0411"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"junhyeong0411"},"content":" * storage for flashcards","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"junhyeong0411"},"content":" * One storage manages one file","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"junhyeong0411"},"content":"public class FlashcardStorage {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"junhyeong0411"},"content":" // simply implemented for save \u0026 load first","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"junhyeong0411"},"content":" protected String path;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"junhyeong0411"},"content":" private static Logger flashlogger; // for logging","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"junhyeong0411"},"content":" public FlashcardStorage(String path){","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"junhyeong0411"},"content":" this.path \u003d path;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"junhyeong0411"},"content":" flashlogger \u003d Logger.getLogger(\"flash\");","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"junhyeong0411"},"content":" public boolean isStorageAvailable(){","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"junhyeong0411"},"content":" File f \u003d new File(this.path);","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"junhyeong0411"},"content":" return f.exists();","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"junhyeong0411"},"content":" ","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"junhyeong0411"},"content":" * load a flash card from certain format","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"junhyeong0411"},"content":" * Tokens includes attributes of Flashcard","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"junhyeong0411"},"content":" * @param tokens","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"junhyeong0411"},"content":" * @return Flashcard object","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"junhyeong0411"},"content":" private Flashcard loadFlashcard(String[] tokens){","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"junhyeong0411"},"content":" assert tokens.length \u003d\u003d 5 : \"Token length should be 5\";","lastModifiedDate":"2023-10-20"},{"lineNumber":41,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"junhyeong0411"},"content":" //flashlogger.log(Level.INFO, \"token length is\", tokens.length);","lastModifiedDate":"2023-10-20"},{"lineNumber":43,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":44,"author":{"gitId":"junhyeong0411"},"content":" String frontText \u003d tokens[0].trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"junhyeong0411"},"content":" String backText \u003d tokens[1].trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"junhyeong0411"},"content":" String[] tags \u003d tokens[2].trim().split(\"/\");","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"junhyeong0411"},"content":" String[] reviews \u003d tokens[3].trim().split(\"/\");","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"junhyeong0411"},"content":" String nextReviewOn \u003d tokens[4].trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"junhyeong0411"},"content":" Flashcard flashcard \u003d new Flashcard(frontText, backText);","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"junhyeong0411"},"content":" //flashlogger.log(Level.INFO, \"added flashcard\");","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":55,"author":{"gitId":"junhyeong0411"},"content":" for(String tag:tags){","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"wendelinwemhoener"},"content":" if (tag.trim().equals(\"-\")) {","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"wendelinwemhoener"},"content":" break;","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"wendelinwemhoener"},"content":" } else{","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"tags are not for v1\");","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"junhyeong0411"},"content":" for(String review: reviews){","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"wendelinwemhoener"},"content":" if (review.trim().equals(\"-\")) {","lastModifiedDate":"2023-10-19"},{"lineNumber":65,"author":{"gitId":"wendelinwemhoener"},"content":" break;","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"wendelinwemhoener"},"content":" } else{","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"reviews are not for v1\");","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"junhyeong0411"},"content":" if(!nextReviewOn.equals(\"-\")){","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"junhyeong0411"},"content":" //LocalDateTime.parse(nextReviewOn);","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"reviews are not for v1\");","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"junhyeong0411"},"content":" return flashcard;","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"junhyeong0411"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"junhyeong0411"},"content":" * load list of flashcards","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"junhyeong0411"},"content":" * from this.path","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"junhyeong0411"},"content":" * @return list of Flashcards","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"junhyeong0411"},"content":" * @throws FileNotFoundException","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"junhyeong0411"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"junhyeong0411"},"content":" public FlashcardList loadFlashcards() throws FileNotFoundException{","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":87,"author":{"gitId":"junhyeong0411"},"content":" flashlogger.log(Level.INFO, \"loading flashcard\");","lastModifiedDate":"2023-10-20"},{"lineNumber":88,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":89,"author":{"gitId":"junhyeong0411"},"content":" FlashcardList flashcardList \u003d new FlashcardList(new ArrayList\u003c\u003e());","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"junhyeong0411"},"content":" File f \u003d new File (this.path);","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"junhyeong0411"},"content":" Scanner s \u003d new Scanner(f);","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"junhyeong0411"},"content":" while(s.hasNext()){","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"junhyeong0411"},"content":" String[] flashTokens \u003d s.nextLine().split(\" \\\\| \");","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"junhyeong0411"},"content":" flashcardList.add(loadFlashcard(flashTokens));","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(String.format(","lastModifiedDate":"2023-10-19"},{"lineNumber":99,"author":{"gitId":"wendelinwemhoener"},"content":" \" There are currently %d flashcards in the savefile\",","lastModifiedDate":"2023-10-19"},{"lineNumber":100,"author":{"gitId":"wendelinwemhoener"},"content":" flashcardList.getSize()));","lastModifiedDate":"2023-10-19"},{"lineNumber":101,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":102,"author":{"gitId":"junhyeong0411"},"content":" return flashcardList;","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"junhyeong0411"},"content":" public void saveFlashcards(ArrayList\u003cFlashcard\u003e flashcardList) {","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":108,"author":{"gitId":"junhyeong0411"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"junhyeong0411"},"content":" FileWriter fw \u003d new FileWriter(path);","lastModifiedDate":"2023-10-16"},{"lineNumber":110,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":111,"author":{"gitId":"junhyeong0411"},"content":" for (int i \u003d 0; i \u003c flashcardList.size(); i++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"junhyeong0411"},"content":" Flashcard flashcard \u003d flashcardList.get(i);","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"junhyeong0411"},"content":" fw.write(String.format(\"%s | %s | - | - | -\\r\\n\",","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"junhyeong0411"},"content":" flashcard.getFrontText(), flashcard.getBackText()));","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"junhyeong0411"},"content":" fw.close();","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"junhyeong0411"},"content":" } catch (IOException e){","lastModifiedDate":"2023-10-16"},{"lineNumber":118,"author":{"gitId":"junhyeong0411"},"content":" System.out.println(\"Failed to save.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":119,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":120,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":123,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":124,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":125,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":126,"author":{"gitId":"junhyeong0411"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"wendelinwemhoener":9,"junhyeong0411":117}},{"path":"src/main/java/seedu/duke/flashcard/FlashcardUi.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.command.FlashcardCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"public class FlashcardUi {","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":" private Scanner scanner;","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":" private FlashcardList flashcardList;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" public FlashcardUi(FlashcardList flashcardList) {","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" this.flashcardList \u003d flashcardList;","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":" public void executeCommand(FlashcardCommand command) {","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" command.execute(scanner, flashcardList);","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":21}},{"path":"src/main/java/seedu/duke/flashcard/command/CreateFlashcardCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.command;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.Flashcard;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardList;","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"public class CreateFlashcardCommand extends FlashcardCommand {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":" public void execute(Scanner scanner, FlashcardList flashcardList) {","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.print(\" Enter the front page text: \");","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" String frontPageText \u003d scanner.nextLine();","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.print(\" Enter the back page text: \");","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" String backPageText \u003d scanner.nextLine();","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":" Flashcard flashcard \u003d new Flashcard(frontPageText, backPageText);","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" flashcardList.add(flashcard);","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println();","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" Success! Flashcard has been added to your \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"wendelinwemhoener"},"content":" \"collection.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":25}},{"path":"src/main/java/seedu/duke/flashcard/command/FlashcardCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.command;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardList;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"public abstract class FlashcardCommand {","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":" public abstract void execute(Scanner scanner, FlashcardList flashcardList);","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":11}},{"path":"src/main/java/seedu/duke/flashcard/command/ListFlashcardsCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.command;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.Flashcard;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardList;","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"public class ListFlashcardsCommand extends FlashcardCommand {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":" public void execute(Scanner scanner, FlashcardList flashcardList) {","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" Here is a list of all your flashcards: \");","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println();","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\"-\".repeat(80));","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":" for (Flashcard flashcard : flashcardList.getFlashcards()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.print(flashcard);","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\"-\".repeat(80));","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println();","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" Those were all your flashcards.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":24}},{"path":"src/main/java/seedu/duke/flashcard/command/StartReviewCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.command;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardList;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.review.RandomReviewMode;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.review.ReviewByTagMode;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.review.ReviewMode;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.review.SpacedRepetitionReviewMode;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":"public class StartReviewCommand extends FlashcardCommand {","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":" private final ArrayList\u003cString\u003e choices \u003d new ArrayList\u003c\u003e(Arrays.asList(","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":" \"a\", \"b\", \"c\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" private String getUserChoiceReviewMode(Scanner scanner) {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" How do you want to review your flashcards?\");","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" a) random mode\");","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" b) spaced repetition mode\");","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" c) review by tag mode\");","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"wendelinwemhoener"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"wendelinwemhoener"},"content":" public void execute(Scanner scanner, FlashcardList flashcardList) {","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"wendelinwemhoener"},"content":" String choice \u003d getUserChoiceReviewMode(scanner);","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"wendelinwemhoener"},"content":" while (!choices.contains(choice.toLowerCase())) {","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" Invalid choice! Your choice must be a, b \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"wendelinwemhoener"},"content":" \"or c! Please try again.\");","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"wendelinwemhoener"},"content":" choice \u003d getUserChoiceReviewMode(scanner);","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"wendelinwemhoener"},"content":" ReviewMode reviewMode \u003d createReviewMode(choice.toLowerCase(), flashcardList);","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"wendelinwemhoener"},"content":" if (reviewMode instanceof RandomReviewMode) {","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"wendelinwemhoener"},"content":" reviewMode.startReviewSession(scanner);","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"wendelinwemhoener"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" This review mode hasn\u0027t yet been \" +","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"wendelinwemhoener"},"content":" \"implemented. Sorry!\");","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"wendelinwemhoener"},"content":" private ReviewMode createReviewMode(String choice, FlashcardList flashcardList) {","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"wendelinwemhoener"},"content":" ReviewMode reviewMode \u003d null;","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"wendelinwemhoener"},"content":" if (choice.equals(\"a\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"wendelinwemhoener"},"content":" reviewMode \u003d new RandomReviewMode(flashcardList);","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"wendelinwemhoener"},"content":" } else if (choice.equals(\"b\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"wendelinwemhoener"},"content":" reviewMode \u003d new SpacedRepetitionReviewMode(flashcardList);","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"wendelinwemhoener"},"content":" } else if (choice.equals(\"c\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"wendelinwemhoener"},"content":" reviewMode \u003d new ReviewByTagMode(flashcardList);","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"wendelinwemhoener"},"content":" assert reviewMode !\u003d null;","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"wendelinwemhoener"},"content":" return reviewMode;","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":63,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":63}},{"path":"src/main/java/seedu/duke/flashcard/command/UnknownCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.command;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardList;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"public class UnknownCommand extends FlashcardCommand {","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":" public void execute(Scanner scanner, FlashcardList flashcardList) {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\"Unknown command! Please try again.\");","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":13}},{"path":"src/main/java/seedu/duke/flashcard/review/FlashcardReview.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.review;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"public class FlashcardReview {","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":" private LocalDateTime reviewDate;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":" private ReviewDifficulty reviewDifficulty;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":" public FlashcardReview(LocalDateTime reviewDate, ReviewDifficulty reviewDifficulty) {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" this.reviewDate \u003d reviewDate;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" this.reviewDifficulty \u003d reviewDifficulty;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"wendelinwemhoener":15}},{"path":"src/main/java/seedu/duke/flashcard/review/RandomReviewMode.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.review;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.Flashcard;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Random;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":"public class RandomReviewMode extends ReviewMode {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" public RandomReviewMode(FlashcardList flashcardList) {","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" super(flashcardList);","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":" public String getReviewModeName() {","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":" return \"random review mode\";","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":" protected Flashcard pickFlashcard() {","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":" ArrayList\u003cFlashcard\u003e flashcards \u003d flashcardList.getFlashcards();","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"wendelinwemhoener"},"content":" Random random \u003d new Random();","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"wendelinwemhoener"},"content":" return flashcards.get(random.nextInt(flashcards.size()));","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"wendelinwemhoener":26}},{"path":"src/main/java/seedu/duke/flashcard/review/ReviewByTagMode.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.review;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.Flashcard;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardList;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"public class ReviewByTagMode extends ReviewMode {","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":" public ReviewByTagMode(FlashcardList flashcardList) {","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":" super(flashcardList);","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":" public String getReviewModeName() {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":" return \"review by tag mode\";","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" protected Flashcard pickFlashcard() {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":" return null;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"wendelinwemhoener":18}},{"path":"src/main/java/seedu/duke/flashcard/review/ReviewDifficulty.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.review;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"public enum ReviewDifficulty {","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":" EASY,","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":" MODERATE,","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":" HARD","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"wendelinwemhoener":9}},{"path":"src/main/java/seedu/duke/flashcard/review/ReviewMode.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.review;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.Flashcard;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":"public abstract class ReviewMode {","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" protected FlashcardList flashcardList;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":" public ReviewMode(FlashcardList flashcardList) {","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":" this.flashcardList \u003d flashcardList;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":" public abstract String getReviewModeName();","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"wendelinwemhoener"},"content":" public void startReviewSession(Scanner scanner) {","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" You have started a review session in \"","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"wendelinwemhoener"},"content":" + getReviewModeName());","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println();","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"wendelinwemhoener"},"content":" while (true) {","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"wendelinwemhoener"},"content":" Flashcard flashcardToReview \u003d pickFlashcard();","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"wendelinwemhoener"},"content":" printFlashcardFrontTextPrompt(flashcardToReview);","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"wendelinwemhoener"},"content":" String input \u003d scanner.nextLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"wendelinwemhoener"},"content":" boolean shouldTerminate \u003d input.startsWith(\"quit\") || input.equals(\"q\");","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"wendelinwemhoener"},"content":" if (shouldTerminate) {","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"wendelinwemhoener"},"content":" break;","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" The actual back text is: \" + flashcardToReview.getBackText());","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println();","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"wendelinwemhoener"},"content":" letUserRateReviewDifficulty(scanner, flashcardToReview);","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"wendelinwemhoener"},"content":" flashcardToReview.setLastReviewOn(LocalDateTime.now());","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" Success! You have ended this review session.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"wendelinwemhoener"},"content":" protected abstract Flashcard pickFlashcard();","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"wendelinwemhoener"},"content":" protected void printFlashcardFrontTextPrompt(Flashcard flashcardToReview) {","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" \" + \"-\".repeat(76));","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" The front text is: \" + flashcardToReview.getFrontText());","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println();","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" [Think of the answer (the back text) in \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"wendelinwemhoener"},"content":" \"your head]\");","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" [Press \u003cENTER\u003e when you are ready to \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"wendelinwemhoener"},"content":" \"compare it, or enter \u0027q\u0027/\u0027quit\u0027 to end this \" +","lastModifiedDate":"2023-10-19"},{"lineNumber":60,"author":{"gitId":"wendelinwemhoener"},"content":" \"review session]\");","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"wendelinwemhoener"},"content":" protected void letUserRateReviewDifficulty(Scanner scanner,","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"wendelinwemhoener"},"content":" Flashcard flashcard) {","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" How hard was it to remeber the back page of \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"wendelinwemhoener"},"content":" \"this flashcard?\");","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" Press \u003cE\u003e if it was easy, \u003cM\u003e if it was \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"wendelinwemhoener"},"content":" \"moderately challenging or \u003cH\u003e if it was quite hard.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"wendelinwemhoener"},"content":" final ArrayList\u003cString\u003e choices \u003d new ArrayList\u003c\u003e(Arrays.asList(","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"wendelinwemhoener"},"content":" \"e\", \"m\", \"h\"));","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"wendelinwemhoener"},"content":" String choice \u003d scanner.nextLine();","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"wendelinwemhoener"},"content":" while (!choices.contains(choice)) {","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"wendelinwemhoener"},"content":" System.out.println(\" Invalid choice! Your choice must be e, m \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":76,"author":{"gitId":"wendelinwemhoener"},"content":" \"or h! Please try again.\");","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":78,"author":{"gitId":"wendelinwemhoener"},"content":" choice \u003d scanner.nextLine();","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":80,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":81,"author":{"gitId":"wendelinwemhoener"},"content":" ReviewDifficulty reviewDifficulty;","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"wendelinwemhoener"},"content":" switch (choice.toLowerCase()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":83,"author":{"gitId":"wendelinwemhoener"},"content":" case \"e\":","lastModifiedDate":"2023-10-23"},{"lineNumber":84,"author":{"gitId":"wendelinwemhoener"},"content":" reviewDifficulty \u003d ReviewDifficulty.EASY;","lastModifiedDate":"2023-10-23"},{"lineNumber":85,"author":{"gitId":"wendelinwemhoener"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":86,"author":{"gitId":"wendelinwemhoener"},"content":" case \"m\":","lastModifiedDate":"2023-10-23"},{"lineNumber":87,"author":{"gitId":"wendelinwemhoener"},"content":" reviewDifficulty \u003d ReviewDifficulty.MODERATE;","lastModifiedDate":"2023-10-23"},{"lineNumber":88,"author":{"gitId":"wendelinwemhoener"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":89,"author":{"gitId":"wendelinwemhoener"},"content":" default:","lastModifiedDate":"2023-10-23"},{"lineNumber":90,"author":{"gitId":"wendelinwemhoener"},"content":" reviewDifficulty \u003d ReviewDifficulty.HARD;","lastModifiedDate":"2023-10-23"},{"lineNumber":91,"author":{"gitId":"wendelinwemhoener"},"content":" break;","lastModifiedDate":"2023-10-23"},{"lineNumber":92,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":93,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":94,"author":{"gitId":"wendelinwemhoener"},"content":" FlashcardReview flashcardReview \u003d","lastModifiedDate":"2023-10-23"},{"lineNumber":95,"author":{"gitId":"wendelinwemhoener"},"content":" new FlashcardReview(LocalDateTime.now(), reviewDifficulty);","lastModifiedDate":"2023-10-23"},{"lineNumber":96,"author":{"gitId":"wendelinwemhoener"},"content":" flashcard.addReview(flashcardReview);","lastModifiedDate":"2023-10-23"},{"lineNumber":97,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":98,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"wendelinwemhoener":98}},{"path":"src/main/java/seedu/duke/flashcard/review/SpacedRepetitionReviewMode.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wendelinwemhoener"},"content":"//@@author wendelinwemhoener","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"wendelinwemhoener"},"content":"package seedu.duke.flashcard.review;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.Flashcard;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"wendelinwemhoener"},"content":"public class SpacedRepetitionReviewMode extends ReviewMode {","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":" public SpacedRepetitionReviewMode(FlashcardList flashcardList) {","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":" super(flashcardList);","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"wendelinwemhoener"},"content":" public String getReviewModeName() {","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"wendelinwemhoener"},"content":" return \"spaced repetition mode\";","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":" protected Flashcard pickFlashcard() {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":" return null;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"wendelinwemhoener"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"wendelinwemhoener":20}},{"path":"src/test/java/seedu/duke/DukeTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.duke;","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"wendelinwemhoener"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"wendelinwemhoener"},"content":"import seedu.duke.flashcard.FlashcardComponent;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"junhyeong0411"},"content":"import seedu.duke.flashcard.FlashcardStorage;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"wendelinwemhoener"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"class DukeTest {","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":" public void sampleTest() {","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" assertTrue(true);","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"wendelinwemhoener"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"wendelinwemhoener"},"content":" public void testFlashcardComponent_isResponsible_notResponsible() {","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"junhyeong0411"},"content":" FlashcardComponent flashcardComponent \u003d new FlashcardComponent();","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"wendelinwemhoener"},"content":" assertFalse(flashcardComponent.isResponsible(\"dfdfdfdfdf\"));","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"wendelinwemhoener"},"content":" assertFalse(flashcardComponent.isResponsible(\"help me\"));","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"wendelinwemhoener"},"content":" assertFalse(flashcardComponent.isResponsible(\" \"));","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"wendelinwemhoener"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"wendelinwemhoener"},"content":" public void testFlashcardComponent_isResponsible_responsible() {","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"junhyeong0411"},"content":" FlashcardComponent flashcardComponent \u003d new FlashcardComponent();","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"wendelinwemhoener"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"wendelinwemhoener"},"content":" assertTrue(flashcardComponent.isResponsible(\"create flashcard\"));","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"wendelinwemhoener"},"content":" assertTrue(flashcardComponent.isResponsible(\"create flashcard \"));","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"wendelinwemhoener"},"content":" assertTrue(flashcardComponent.isResponsible(\"list flashcards\"));","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"wendelinwemhoener"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"Brian030601"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"junhyeong0411"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"junhyeong0411"},"content":" public void testFlashcardStorage_isAvailable(){","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"junhyeong0411"},"content":" FlashcardComponent flashcardComponent \u003d new FlashcardComponent();","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"junhyeong0411"},"content":" FlashcardStorage storage \u003d flashcardComponent.getStorage();","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"junhyeong0411"},"content":" assertTrue(storage.isStorageAvailable());","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"junhyeong0411"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"junhyeong0411"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"Brian030601"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"Brian030601"},"content":" public void testCalendar() {","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"Brian030601"},"content":" assertTrue(true);","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"Brian030601"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"wendelinwemhoener":20,"-":12,"junhyeong0411":10,"Brian030601":5}}] diff --git a/AY2324S1-CS2113-F11-3_tp_master/commits.json b/AY2324S1-CS2113-F11-3_tp_master/commits.json index 15b4df5..553e1a0 100644 --- a/AY2324S1-CS2113-F11-3_tp_master/commits.json +++ b/AY2324S1-CS2113-F11-3_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"wendelinwemhoener":[{"date":"2023-10-06","commitResults":[{"hash":"c7e6588e2dce504bcf497a5229fd6c2419c6249b","isMergeCommit":false,"messageTitle":"Add Wendelin to About us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":7}}},{"hash":"54e78fcc0c437940e00efc6b12972e27c14053ee","isMergeCommit":true,"messageTitle":"Merge pull request #1 from wendelinwemhoener/wendelinwemhoener-AboutUs","messageBody":"Add Wendelin to About us","fileTypesAndContributionMap":{}}]},{"date":"2023-10-13","commitResults":[{"hash":"e71b620060276c640151411188ba40ff8f31efb1","isMergeCommit":false,"messageTitle":"Start implementing flashcard functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":207,"deletions":13}}},{"hash":"df800131a084f378eff5007e88d469b7de9081e5","isMergeCommit":false,"messageTitle":"Outsource business logic from Ui to Commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":53,"deletions":29}}},{"hash":"0fa6a6d1c66a921f48feac9289e0ab5cbd4d9417","isMergeCommit":false,"messageTitle":"Fix codestyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":3}}},{"hash":"3e5f2e737476f78921dbad7568ea56445fa192ed","isMergeCommit":false,"messageTitle":"Remove star imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":1}}},{"hash":"adf0164a97ba9a74099f85e77e8ca9453d9aeda1","isMergeCommit":false,"messageTitle":"Add new testcases","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":25,"deletions":0}}},{"hash":"2af223bc90e6e0b5fe80a21325fe13fe890f3ba8","isMergeCommit":false,"messageTitle":"Fix codestyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1},"test-code":{"insertions":0,"deletions":1}}}]},{"date":"2023-10-17","commitResults":[{"hash":"ea51d5f56ff2414279d9b1b5405721356a8832df","isMergeCommit":false,"messageTitle":"Refactor structure of review","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":13},"other":{"insertions":2,"deletions":0}}},{"hash":"e09c0c2b042a7478c1fb1ddff173da5b61623e8d","isMergeCommit":false,"messageTitle":"Add code for different review modes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":138,"deletions":15},"other":{"insertions":1,"deletions":0},"docs":{"insertions":1,"deletions":1}}},{"hash":"eaa290162077ebcf91b4f51a025a43fbf842ef57","isMergeCommit":false,"messageTitle":"Implement random flashcard review mode","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":111,"deletions":11}}},{"hash":"1793052ce622e3db2bd1e9010fbd921538000fdc","isMergeCommit":true,"messageTitle":"Merge pull request #12 from wendelinwemhoener/improve-flashcard-support","messageBody":"Improve flashcard support","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"2dec26d4e51274748308a24e0f625e673de0072f","isMergeCommit":false,"messageTitle":"Fixed codestyle violations by team members","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":31}}},{"hash":"01c8382d3b9ee9e21402bcad8fad237eda06f578","isMergeCommit":true,"messageTitle":"Merge pull request #26 from wendelinwemhoener/clean-up-before-v1-release","messageBody":"Clean up before v1 release","fileTypesAndContributionMap":{}},{"hash":"a0c2a9732880b103eae2d0adcf2036331df11a53","isMergeCommit":false,"messageTitle":"Fix another violation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":3}}},{"hash":"5df026d7282945da4ddf772b17c6f6c40ffe6c80","isMergeCommit":true,"messageTitle":"Merge pull request #30 from wendelinwemhoener/master","messageBody":"Fix coding style violation","fileTypesAndContributionMap":{}},{"hash":"da87107de006b38a6ca7d87220f5e3eabd9632a3","isMergeCommit":false,"messageTitle":"Get IO test to pass","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"3a0803d89179da07b4f1cad6d0c388f6f026d7aa","isMergeCommit":true,"messageTitle":"Merge pull request #31 from wendelinwemhoener/master","messageBody":"Get IO test to pass","fileTypesAndContributionMap":{}},{"hash":"40459bf34f75c76f01020c20a75a07521fe6d2f0","isMergeCommit":false,"messageTitle":"Fix codestyle violation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1},"other":{"insertions":1,"deletions":1}}},{"hash":"b346920c7712198164c1166588de7cf55a28e007","isMergeCommit":true,"messageTitle":"Merge pull request #32 from wendelinwemhoener/master","messageBody":"Fix codestyle violation","tags":["v1.0"],"fileTypesAndContributionMap":{}},{"hash":"647b47e32eea8e87b539f7d387bc7318cd0a1088","isMergeCommit":false,"messageTitle":"Unify calendar and flashcard mode","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":61},"docs":{"insertions":1,"deletions":0}}},{"hash":"418ce4375269c4827a67359593cb32bde79d31e0","isMergeCommit":true,"messageTitle":"Merge pull request #34 from wendelinwemhoener/unify-flashcard-and-calendar-mode","messageBody":"Unify calendar and flashcard mode","fileTypesAndContributionMap":{}}]}],"Cheezeblokz":[{"date":"2023-10-06","commitResults":[{"hash":"4ed34d2adfabdde3055d77ada7525917bf497415","isMergeCommit":false,"messageTitle":"Added information for team member: Zhu Jingxi","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":7}}},{"hash":"dbb7be9183404e5cd045231aefae1803f4b37a8d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into ZhuJingxi-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"16390ac18f991df9e15ef8acf1dd2225e655618f","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Cheezeblokz/ZhuJingxi-AboutUs","messageBody":"Added information for team member: Zhu Jingxi","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"d9e8b607c6541b53d0195f53bba01c16439378f3","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AY2324S1-CS2113-F11-3/master","messageBody":"Update forked repo","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"58491538c8ae2837edad9d3e0de6ad2b20a13684","isMergeCommit":true,"messageTitle":"Merge pull request #2 from AY2324S1-CS2113-F11-3/master","messageBody":"Update","fileTypesAndContributionMap":{}},{"hash":"ce4f7212bdaca83db348764ac46f7d7bba9c85ad","isMergeCommit":false,"messageTitle":"Added empty shell classes for basic calendar functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":0}}},{"hash":"fb5dd71df4ed4b8634c9e497f514c672e3a1a3e7","isMergeCommit":false,"messageTitle":"Added extra utility classes for Calendar","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":0}}},{"hash":"7225f11149fc9b591de89481217db2fc8191e98f","isMergeCommit":false,"messageTitle":"Modified EventCommand subclasses to extend parent class EventCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"20c3a7e7937dad5750f2d0f4d3003a9ae922e08e","isMergeCommit":false,"messageTitle":"Added basic Event object capabilities for adding, deleting, printing and access","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":75,"deletions":0}}}]},{"date":"2023-10-18","commitResults":[{"hash":"f0693f590c71e5c808a8c2b13f2aca75b147bf14","isMergeCommit":true,"messageTitle":"Merge pull request #3 from AY2324S1-CS2113-F11-3/master","messageBody":"Update","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"7173ce454d7c5bead29af52a30c78d3bf0537f6d","isMergeCommit":false,"messageTitle":"Added basic Calendar parameters and capabilities for adding, deleting and listing events","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":13}}},{"hash":"9b0ac8bbc94da94ca0230fa52cfaaf857eabf6ca","isMergeCommit":false,"messageTitle":"Added basic functionality for CalendarManager to ask for user input","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":1}}},{"hash":"f9badc900095ad280fa24afff7fde2794a9f682a","isMergeCommit":false,"messageTitle":"Added processing for respective user commands in EventCommand subclasses AddEventCommand, DeleteEventCommand, ListCalendarEventsCommand and UnknownCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":43,"deletions":0}}}]}],"junhyeong0411":[{"date":"2023-10-06","commitResults":[{"hash":"d565214fb7a53b74781f7067e6d692162dae90c1","isMergeCommit":false,"messageTitle":"Added information for team member: Bang Junhyeong","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":1}}}]},{"date":"2023-10-11","commitResults":[{"hash":"a131e8075aa7ac74544dd121357b407ebc1dcd9f","isMergeCommit":false,"messageTitle":"Simple storage path","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":0}}}]},{"date":"2023-10-13","commitResults":[{"hash":"4ffead4816db65de7544eadc33f76dfab55b0d00","isMergeCommit":true,"messageTitle":"Merge pull request #4 from junhyeong0411/master","messageBody":"Added information for team member: Bang Junhyeong","fileTypesAndContributionMap":{}},{"hash":"314f377db62aaf8396a8ca82c4a4a92308027a45","isMergeCommit":true,"messageTitle":"Merge pull request #5 from wendelinwemhoener/add-flashcard-support","messageBody":"Add flashcard support","fileTypesAndContributionMap":{}},{"hash":"79d78c7b0f61c668d57a4cbcdb6d3d9bbda654f7","isMergeCommit":true,"messageTitle":"Merge pull request #6 from wendelinwemhoener/add-junit-tests","messageBody":"Add JUnit tests for flashcards","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"aeee78aeea0d9b4e1bcb4423a259707eff7160bf","isMergeCommit":false,"messageTitle":"Storage for flashcards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":114,"deletions":29}}},{"hash":"83dcbf3f4317db46c23580d0e32ae56201ca6516","isMergeCommit":true,"messageTitle":"Merge pull request #11 from junhyeong0411/master","messageBody":"Storage for flashcards","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"af8094f728aa97556e68406c4a7b28388fdc0c99","isMergeCommit":false,"messageTitle":"Added Selecting Storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":55,"deletions":2}}},{"hash":"85b3e8e059d32065ff5df836a13a1467c89abeca","isMergeCommit":true,"messageTitle":"Merge pull request #14 from junhyeong0411/master","messageBody":"Added Selecting Storage","fileTypesAndContributionMap":{}},{"hash":"ba639f38978c9cdab1d4d36ac3b334d0873e9b09","isMergeCommit":false,"messageTitle":"Make format of flashcard Directory","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":0}}},{"hash":"93ae4b172c88718bf7b4a27e9a9714da84063a32","isMergeCommit":true,"messageTitle":"Merge pull request #17 from junhyeong0411/master","messageBody":"Make format of flashcard Directory","fileTypesAndContributionMap":{}},{"hash":"64869bdb701fcc60125b0b456da9f1e381092af6","isMergeCommit":false,"messageTitle":"Test Storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":0},"test-code":{"insertions":9,"deletions":0}}},{"hash":"b6dd7c860ed97875d51fc12c1e2c317fe7f7b65b","isMergeCommit":true,"messageTitle":"Merge pull request #19 from junhyeong0411/master","messageBody":"Test Storage","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"1e492b43ee211aa9c5c9c934d914ea622453f4c8","isMergeCommit":false,"messageTitle":"Show saved flashcardList size","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":5}}},{"hash":"3c2c4e69102e70abdcb733fb9e6d2bc7e084efad","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0c057fa85ddc410aa4020d649e263c4f50e5f5c1","isMergeCommit":true,"messageTitle":"Merge pull request #29 from junhyeong0411/master","messageBody":"Show saved flashcardList size","fileTypesAndContributionMap":{}},{"hash":"3cf93fe91d4d70e6c5ce9ab21c7eb9692a346d3d","isMergeCommit":false,"messageTitle":"Format for Event Storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":161,"deletions":3}}},{"hash":"44cee0de40e1fbef9eb022d65681f002c40854a8","isMergeCommit":true,"messageTitle":"Format for Event Storage","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f62ccac189430a2b701aaae35e4a78ca7935895b","isMergeCommit":true,"messageTitle":"Merge pull request #36 from junhyeong0411/master","messageBody":"Making format for Event Storage","fileTypesAndContributionMap":{}},{"hash":"18e8f65c7d990565e0177716bef9e61c563d93da","isMergeCommit":false,"messageTitle":"Added Event Storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":4},"test-code":{"insertions":3,"deletions":6}}},{"hash":"913c42c4d7d12beec2244167f678f0c6817ef184","isMergeCommit":true,"messageTitle":"Merge pull request #37 from junhyeong0411/master","messageBody":"Added Event Storage","tags":["v0.9","preliminary"],"fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"77a2404c02bc0d557fa5d3493d6e21fb17475c35","isMergeCommit":false,"messageTitle":"delete assertion","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":3}}},{"hash":"fddc13494ec7055cb1119c9e64da9e39f3070b0c","isMergeCommit":false,"messageTitle":"re-add assertions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"051176a40e4b50d6fcad9e71c3a2ca8d2022e97a","isMergeCommit":false,"messageTitle":"Adding loggers","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":0}}},{"hash":"f2cf4665d4012966ab6c86e09b7076c203994d9b","isMergeCommit":false,"messageTitle":"Logging edited","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"fdc7f47d5aa8af3e4ab280ea545cc2838abb49ab","isMergeCommit":false,"messageTitle":"Logging edited 2","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"afff1d71d9f51c96c736c0f0dbaf440ad6d8f542","isMergeCommit":false,"messageTitle":"Get back to no-assertion","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":13}}},{"hash":"d0c716e76a8422c7f0a0a7aecd5cbccad1725160","isMergeCommit":false,"messageTitle":"Logging again","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":1}}},{"hash":"bfe60a329be3f8af38654fb3dbfda6471fc83204","isMergeCommit":true,"messageTitle":"Merge pull request #40 from junhyeong0411/master","messageBody":"Assertions problem resolving","fileTypesAndContributionMap":{}}]}],"Brian030601":[{"date":"2023-10-06","commitResults":[{"hash":"237e8479b812903adb03222e1555ddc9a8d885a3","isMergeCommit":false,"messageTitle":"Add Kherlen Bayasgalan About-Us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"7f101cf3c3d61cb3525d95baa99a18e0d483292f","isMergeCommit":true,"messageTitle":"Merge pull request #3 from Brian030601/KherlenBayasgalan-AboutUs","messageBody":"Add Kherlen Bayasgalan About-Us","fileTypesAndContributionMap":{}}]},{"date":"2023-10-13","commitResults":[{"hash":"677d96b9764933b4ecea4937b91eb16904e76102","isMergeCommit":false,"messageTitle":"Fix Profile/Picture/AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"38bd633508fcccc6411d55cff4091ec60105d9ff","isMergeCommit":true,"messageTitle":"Merge pull request #10 from Brian030601/master","messageBody":"Fix Profile/Picture/AboutUs","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"546953571545818521e49ded11bd8e4ade526947","isMergeCommit":true,"messageTitle":"Merge pull request #13 from Cheezeblokz/Jingxi-Calendar","messageBody":"Jingxi-Calendar","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"2675507cc7da3f526e28035632d0b430980c4118","isMergeCommit":false,"messageTitle":"Add JUnit Test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":0},"test-code":{"insertions":5,"deletions":0}}},{"hash":"0de527070994dd8f4964f01aefe908f64a44af0f","isMergeCommit":true,"messageTitle":"Merge pull request #15 from Brian030601/master","messageBody":"Add JUnit Test","fileTypesAndContributionMap":{}},{"hash":"4f083629e9883f982e7a1465aa020b4e7c159996","isMergeCommit":false,"messageTitle":"Fix Calendar","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":13}}},{"hash":"85ff53a4953cd07da22db548ac468ade341caf9a","isMergeCommit":true,"messageTitle":"Merge pull request #16 from Brian030601/master","messageBody":"Fix Calendar","fileTypesAndContributionMap":{}},{"hash":"16530fbe89b68e5a11662ece37e64e4c2e156990","isMergeCommit":false,"messageTitle":"Implement CalendarCommandParser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":0}}},{"hash":"a74ef394dc91d9aa62b344d501a1712e3fa1b1d9","isMergeCommit":true,"messageTitle":"Merge pull request #18 from Brian030601/master","messageBody":"Implement CalendarCommandParser","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"123419806cd1d20006f00d45f3c38d887a0e7e08","isMergeCommit":false,"messageTitle":"Implement Calendar Command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":106,"deletions":11}}},{"hash":"1381eef2921ab298b96d6d7e1b2d1b8e7e3ded37","isMergeCommit":true,"messageTitle":"Merge pull request #22 from Brian030601/master","messageBody":"Implement Calendar Command","fileTypesAndContributionMap":{}},{"hash":"b9667f388141a4092bd687f91b6c8b5e8dc6ec62","isMergeCommit":false,"messageTitle":"Change EventStorage Name","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":33}}},{"hash":"4e03314e7f7911f2ec9480657e465ac9dc56d8f7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Jingxi-Calendar_update","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a1131aae9aa56a4de14c78cff59a60a13ae645b2","isMergeCommit":true,"messageTitle":"Merge pull request #21 from Cheezeblokz/Jingxi-Calendar_update","messageBody":"Jingxi calendar update","fileTypesAndContributionMap":{}},{"hash":"045e454a471174c0cfa2871914b503423bee8552","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-F11-3/tp","messageBody":"* \u0027master\u0027 of https://github.com/AY2324S1-CS2113-F11-3/tp:\n Added processing for respective user commands in EventCommand subclasses AddEventCommand, DeleteEventCommand, ListCalendarEventsCommand and UnknownCommand\n Added basic functionality for CalendarManager to ask for user input\n Added basic Calendar parameters and capabilities for adding, deleting and listing events\n\n# Conflicts:\n#\tsrc/main/java/seedu/duke/calendar/EventStorage.java\n","fileTypesAndContributionMap":{}},{"hash":"3a53123591f69efa42a6e01b8b0d9e54f0339b35","isMergeCommit":true,"messageTitle":"Merge pull request #24 from Brian030601/master","messageBody":"Resolve Merge Conflicts","fileTypesAndContributionMap":{}},{"hash":"666869d6caa6b3995894b44f0fb4739295a9c117","isMergeCommit":false,"messageTitle":"Fix CodingStyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":15}}},{"hash":"8bfd0e8e70174296b4a0111a3ebecc962ad4c3e0","isMergeCommit":true,"messageTitle":"Merge pull request #25 from Brian030601/master","messageBody":"Fix CodingStyle","fileTypesAndContributionMap":{}},{"hash":"9b9db6bd96eed4e5a9efb15fa024dc8d8808454c","isMergeCommit":false,"messageTitle":"Connect Calendar with Duke","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":67,"deletions":8}}},{"hash":"f3d5405ed73079fdb5ba9f2cb29332b08a7f2644","isMergeCommit":true,"messageTitle":"Merge pull request #27 from Brian030601/master","messageBody":"Connect Calendar with Duke","fileTypesAndContributionMap":{}},{"hash":"8fea1da38f03c4d83a153f839eea3bea6002d9d3","isMergeCommit":false,"messageTitle":"Improve Calendar \u0026 Flashcard Integration","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":5}}},{"hash":"4d8184d0c0c05b21d2512739ce1779951d6f3726","isMergeCommit":true,"messageTitle":"Merge pull request #28 from Brian030601/master","messageBody":"Improve Calendar \u0026 Flashcard Integration","fileTypesAndContributionMap":{}},{"hash":"449157cdb9a3a077849e2b73178a048833d0f027","isMergeCommit":false,"messageTitle":"Fix Calendar Add/List/Delete Issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":12}}},{"hash":"8083d7cd25fd6a3f752a2f4560d97230cfb7f327","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Brian030601/A-CalendarIssues","messageBody":"Fix Calendar Add/List/Delete Issues","fileTypesAndContributionMap":{}},{"hash":"3e94866e89a62856ffdd09810aec1b808b460b23","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"012d36d4915527e20501ee219a13ceeb6e7c1d58","isMergeCommit":true,"messageTitle":"Merge pull request #33 from Brian030601/master","messageBody":"Fix Calendar Add/List/Delete Issues","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"wendelinwemhoener":{"docs":9,"functional-code":497,"test-code":20,"other":1},"Cheezeblokz":{"docs":3,"functional-code":63,"test-code":0},"junhyeong0411":{"docs":7,"functional-code":396,"test-code":10},"Brian030601":{"docs":7,"functional-code":142,"test-code":5}},"authorContributionVariance":{"wendelinwemhoener":7135.636,"Cheezeblokz":938.6017,"junhyeong0411":2633.2817,"Brian030601":3222.2021},"authorDisplayNameMap":{"wendelinwemhoener":"CS2113-F11-3 WEMH..ELIN","Cheezeblokz":"CS2113-F11-3 ZHU ..NGXI","junhyeong0411":"CS2113-F11-3 BANG..EONG","Brian030601":"CS2113-F11-3 KHER..ALAN"}} +{"authorDailyContributionsMap":{"wendelinwemhoener":[{"date":"2023-10-06","commitResults":[{"hash":"c7e6588e2dce504bcf497a5229fd6c2419c6249b","isMergeCommit":false,"messageTitle":"Add Wendelin to About us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":7}}},{"hash":"54e78fcc0c437940e00efc6b12972e27c14053ee","isMergeCommit":true,"messageTitle":"Merge pull request #1 from wendelinwemhoener/wendelinwemhoener-AboutUs","messageBody":"Add Wendelin to About us","fileTypesAndContributionMap":{}}]},{"date":"2023-10-13","commitResults":[{"hash":"e71b620060276c640151411188ba40ff8f31efb1","isMergeCommit":false,"messageTitle":"Start implementing flashcard functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":207,"deletions":13}}},{"hash":"df800131a084f378eff5007e88d469b7de9081e5","isMergeCommit":false,"messageTitle":"Outsource business logic from Ui to Commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":53,"deletions":29}}},{"hash":"0fa6a6d1c66a921f48feac9289e0ab5cbd4d9417","isMergeCommit":false,"messageTitle":"Fix codestyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":3}}},{"hash":"3e5f2e737476f78921dbad7568ea56445fa192ed","isMergeCommit":false,"messageTitle":"Remove star imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":1}}},{"hash":"adf0164a97ba9a74099f85e77e8ca9453d9aeda1","isMergeCommit":false,"messageTitle":"Add new testcases","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":25,"deletions":0}}},{"hash":"2af223bc90e6e0b5fe80a21325fe13fe890f3ba8","isMergeCommit":false,"messageTitle":"Fix codestyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1},"test-code":{"insertions":0,"deletions":1}}}]},{"date":"2023-10-17","commitResults":[{"hash":"ea51d5f56ff2414279d9b1b5405721356a8832df","isMergeCommit":false,"messageTitle":"Refactor structure of review","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":13},"other":{"insertions":2,"deletions":0}}},{"hash":"e09c0c2b042a7478c1fb1ddff173da5b61623e8d","isMergeCommit":false,"messageTitle":"Add code for different review modes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":138,"deletions":15},"other":{"insertions":1,"deletions":0},"docs":{"insertions":1,"deletions":1}}},{"hash":"eaa290162077ebcf91b4f51a025a43fbf842ef57","isMergeCommit":false,"messageTitle":"Implement random flashcard review mode","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":111,"deletions":11}}},{"hash":"1793052ce622e3db2bd1e9010fbd921538000fdc","isMergeCommit":true,"messageTitle":"Merge pull request #12 from wendelinwemhoener/improve-flashcard-support","messageBody":"Improve flashcard support","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"2dec26d4e51274748308a24e0f625e673de0072f","isMergeCommit":false,"messageTitle":"Fixed codestyle violations by team members","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":31}}},{"hash":"01c8382d3b9ee9e21402bcad8fad237eda06f578","isMergeCommit":true,"messageTitle":"Merge pull request #26 from wendelinwemhoener/clean-up-before-v1-release","messageBody":"Clean up before v1 release","fileTypesAndContributionMap":{}},{"hash":"a0c2a9732880b103eae2d0adcf2036331df11a53","isMergeCommit":false,"messageTitle":"Fix another violation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":3}}},{"hash":"5df026d7282945da4ddf772b17c6f6c40ffe6c80","isMergeCommit":true,"messageTitle":"Merge pull request #30 from wendelinwemhoener/master","messageBody":"Fix coding style violation","fileTypesAndContributionMap":{}},{"hash":"da87107de006b38a6ca7d87220f5e3eabd9632a3","isMergeCommit":false,"messageTitle":"Get IO test to pass","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"3a0803d89179da07b4f1cad6d0c388f6f026d7aa","isMergeCommit":true,"messageTitle":"Merge pull request #31 from wendelinwemhoener/master","messageBody":"Get IO test to pass","fileTypesAndContributionMap":{}},{"hash":"40459bf34f75c76f01020c20a75a07521fe6d2f0","isMergeCommit":false,"messageTitle":"Fix codestyle violation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":1},"other":{"insertions":1,"deletions":1}}},{"hash":"b346920c7712198164c1166588de7cf55a28e007","isMergeCommit":true,"messageTitle":"Merge pull request #32 from wendelinwemhoener/master","messageBody":"Fix codestyle violation","tags":["v1.0"],"fileTypesAndContributionMap":{}},{"hash":"647b47e32eea8e87b539f7d387bc7318cd0a1088","isMergeCommit":false,"messageTitle":"Unify calendar and flashcard mode","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":61},"docs":{"insertions":1,"deletions":0}}},{"hash":"418ce4375269c4827a67359593cb32bde79d31e0","isMergeCommit":true,"messageTitle":"Merge pull request #34 from wendelinwemhoener/unify-flashcard-and-calendar-mode","messageBody":"Unify calendar and flashcard mode","fileTypesAndContributionMap":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"93549d43508cbfe510c1554d356baa2e8894aab8","isMergeCommit":false,"messageTitle":"Explain how to use flashcards in the UG","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1},"docs":{"insertions":63,"deletions":11}}},{"hash":"f6aa40bae814cbee9b24fd853de552d128d44b9d","isMergeCommit":true,"messageTitle":"Merge pull request #48 from wendelinwemhoener/improve-flashcard-documentation","messageBody":"Explain how to use flashcards in the UG","fileTypesAndContributionMap":{}},{"hash":"f9406011e0e21093112ae35ffc2741104f66b746","isMergeCommit":false,"messageTitle":"Implement basic help command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":0}}},{"hash":"e813cf2a8fa3af58a3a272c4e0414fd62ed8960e","isMergeCommit":true,"messageTitle":"Merge pull request #49 from wendelinwemhoener/add-help-command","messageBody":"Implement help command","fileTypesAndContributionMap":{}},{"hash":"ff87f96f03bf474152f7ec95080e3450f6046916","isMergeCommit":false,"messageTitle":"Allow rating the difficulty of a review","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":49,"deletions":7}}},{"hash":"32bc6bb46376d6a897f5f5cf787649a26cf59d31","isMergeCommit":true,"messageTitle":"Merge pull request #51 from wendelinwemhoener/allow-rating-review-difficulty","messageBody":"Allow rating the difficulty of a review","fileTypesAndContributionMap":{}}]}],"Cheezeblokz":[{"date":"2023-10-06","commitResults":[{"hash":"4ed34d2adfabdde3055d77ada7525917bf497415","isMergeCommit":false,"messageTitle":"Added information for team member: Zhu Jingxi","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":7}}},{"hash":"dbb7be9183404e5cd045231aefae1803f4b37a8d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into ZhuJingxi-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"16390ac18f991df9e15ef8acf1dd2225e655618f","isMergeCommit":true,"messageTitle":"Merge pull request #2 from Cheezeblokz/ZhuJingxi-AboutUs","messageBody":"Added information for team member: Zhu Jingxi","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"d9e8b607c6541b53d0195f53bba01c16439378f3","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AY2324S1-CS2113-F11-3/master","messageBody":"Update forked repo","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"58491538c8ae2837edad9d3e0de6ad2b20a13684","isMergeCommit":true,"messageTitle":"Merge pull request #2 from AY2324S1-CS2113-F11-3/master","messageBody":"Update","fileTypesAndContributionMap":{}},{"hash":"ce4f7212bdaca83db348764ac46f7d7bba9c85ad","isMergeCommit":false,"messageTitle":"Added empty shell classes for basic calendar functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":0}}},{"hash":"fb5dd71df4ed4b8634c9e497f514c672e3a1a3e7","isMergeCommit":false,"messageTitle":"Added extra utility classes for Calendar","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":0}}},{"hash":"7225f11149fc9b591de89481217db2fc8191e98f","isMergeCommit":false,"messageTitle":"Modified EventCommand subclasses to extend parent class EventCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"20c3a7e7937dad5750f2d0f4d3003a9ae922e08e","isMergeCommit":false,"messageTitle":"Added basic Event object capabilities for adding, deleting, printing and access","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":75,"deletions":0}}}]},{"date":"2023-10-18","commitResults":[{"hash":"f0693f590c71e5c808a8c2b13f2aca75b147bf14","isMergeCommit":true,"messageTitle":"Merge pull request #3 from AY2324S1-CS2113-F11-3/master","messageBody":"Update","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"7173ce454d7c5bead29af52a30c78d3bf0537f6d","isMergeCommit":false,"messageTitle":"Added basic Calendar parameters and capabilities for adding, deleting and listing events","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":13}}},{"hash":"9b0ac8bbc94da94ca0230fa52cfaaf857eabf6ca","isMergeCommit":false,"messageTitle":"Added basic functionality for CalendarManager to ask for user input","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":1}}},{"hash":"f9badc900095ad280fa24afff7fde2794a9f682a","isMergeCommit":false,"messageTitle":"Added processing for respective user commands in EventCommand subclasses AddEventCommand, DeleteEventCommand, ListCalendarEventsCommand and UnknownCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":43,"deletions":0}}}]}],"junhyeong0411":[{"date":"2023-10-06","commitResults":[{"hash":"d565214fb7a53b74781f7067e6d692162dae90c1","isMergeCommit":false,"messageTitle":"Added information for team member: Bang Junhyeong","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":1}}}]},{"date":"2023-10-11","commitResults":[{"hash":"a131e8075aa7ac74544dd121357b407ebc1dcd9f","isMergeCommit":false,"messageTitle":"Simple storage path","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":0}}}]},{"date":"2023-10-13","commitResults":[{"hash":"4ffead4816db65de7544eadc33f76dfab55b0d00","isMergeCommit":true,"messageTitle":"Merge pull request #4 from junhyeong0411/master","messageBody":"Added information for team member: Bang Junhyeong","fileTypesAndContributionMap":{}},{"hash":"314f377db62aaf8396a8ca82c4a4a92308027a45","isMergeCommit":true,"messageTitle":"Merge pull request #5 from wendelinwemhoener/add-flashcard-support","messageBody":"Add flashcard support","fileTypesAndContributionMap":{}},{"hash":"79d78c7b0f61c668d57a4cbcdb6d3d9bbda654f7","isMergeCommit":true,"messageTitle":"Merge pull request #6 from wendelinwemhoener/add-junit-tests","messageBody":"Add JUnit tests for flashcards","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"aeee78aeea0d9b4e1bcb4423a259707eff7160bf","isMergeCommit":false,"messageTitle":"Storage for flashcards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":114,"deletions":29}}},{"hash":"83dcbf3f4317db46c23580d0e32ae56201ca6516","isMergeCommit":true,"messageTitle":"Merge pull request #11 from junhyeong0411/master","messageBody":"Storage for flashcards","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"af8094f728aa97556e68406c4a7b28388fdc0c99","isMergeCommit":false,"messageTitle":"Added Selecting Storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":55,"deletions":2}}},{"hash":"85b3e8e059d32065ff5df836a13a1467c89abeca","isMergeCommit":true,"messageTitle":"Merge pull request #14 from junhyeong0411/master","messageBody":"Added Selecting Storage","fileTypesAndContributionMap":{}},{"hash":"ba639f38978c9cdab1d4d36ac3b334d0873e9b09","isMergeCommit":false,"messageTitle":"Make format of flashcard Directory","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":0}}},{"hash":"93ae4b172c88718bf7b4a27e9a9714da84063a32","isMergeCommit":true,"messageTitle":"Merge pull request #17 from junhyeong0411/master","messageBody":"Make format of flashcard Directory","fileTypesAndContributionMap":{}},{"hash":"64869bdb701fcc60125b0b456da9f1e381092af6","isMergeCommit":false,"messageTitle":"Test Storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":0},"test-code":{"insertions":9,"deletions":0}}},{"hash":"b6dd7c860ed97875d51fc12c1e2c317fe7f7b65b","isMergeCommit":true,"messageTitle":"Merge pull request #19 from junhyeong0411/master","messageBody":"Test Storage","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"1e492b43ee211aa9c5c9c934d914ea622453f4c8","isMergeCommit":false,"messageTitle":"Show saved flashcardList size","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":5}}},{"hash":"3c2c4e69102e70abdcb733fb9e6d2bc7e084efad","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0c057fa85ddc410aa4020d649e263c4f50e5f5c1","isMergeCommit":true,"messageTitle":"Merge pull request #29 from junhyeong0411/master","messageBody":"Show saved flashcardList size","fileTypesAndContributionMap":{}},{"hash":"3cf93fe91d4d70e6c5ce9ab21c7eb9692a346d3d","isMergeCommit":false,"messageTitle":"Format for Event Storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":161,"deletions":3}}},{"hash":"44cee0de40e1fbef9eb022d65681f002c40854a8","isMergeCommit":true,"messageTitle":"Format for Event Storage","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f62ccac189430a2b701aaae35e4a78ca7935895b","isMergeCommit":true,"messageTitle":"Merge pull request #36 from junhyeong0411/master","messageBody":"Making format for Event Storage","fileTypesAndContributionMap":{}},{"hash":"18e8f65c7d990565e0177716bef9e61c563d93da","isMergeCommit":false,"messageTitle":"Added Event Storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":4},"test-code":{"insertions":3,"deletions":6}}},{"hash":"913c42c4d7d12beec2244167f678f0c6817ef184","isMergeCommit":true,"messageTitle":"Merge pull request #37 from junhyeong0411/master","messageBody":"Added Event Storage","tags":["v0.9","preliminary"],"fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"77a2404c02bc0d557fa5d3493d6e21fb17475c35","isMergeCommit":false,"messageTitle":"delete assertion","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":3}}},{"hash":"fddc13494ec7055cb1119c9e64da9e39f3070b0c","isMergeCommit":false,"messageTitle":"re-add assertions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"051176a40e4b50d6fcad9e71c3a2ca8d2022e97a","isMergeCommit":false,"messageTitle":"Adding loggers","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":0}}},{"hash":"f2cf4665d4012966ab6c86e09b7076c203994d9b","isMergeCommit":false,"messageTitle":"Logging edited","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"fdc7f47d5aa8af3e4ab280ea545cc2838abb49ab","isMergeCommit":false,"messageTitle":"Logging edited 2","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"afff1d71d9f51c96c736c0f0dbaf440ad6d8f542","isMergeCommit":false,"messageTitle":"Get back to no-assertion","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":13}}},{"hash":"d0c716e76a8422c7f0a0a7aecd5cbccad1725160","isMergeCommit":false,"messageTitle":"Logging again","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":1}}},{"hash":"bfe60a329be3f8af38654fb3dbfda6471fc83204","isMergeCommit":true,"messageTitle":"Merge pull request #40 from junhyeong0411/master","messageBody":"Assertions problem resolving","fileTypesAndContributionMap":{}}]}],"Brian030601":[{"date":"2023-10-06","commitResults":[{"hash":"237e8479b812903adb03222e1555ddc9a8d885a3","isMergeCommit":false,"messageTitle":"Add Kherlen Bayasgalan About-Us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"7f101cf3c3d61cb3525d95baa99a18e0d483292f","isMergeCommit":true,"messageTitle":"Merge pull request #3 from Brian030601/KherlenBayasgalan-AboutUs","messageBody":"Add Kherlen Bayasgalan About-Us","fileTypesAndContributionMap":{}}]},{"date":"2023-10-13","commitResults":[{"hash":"677d96b9764933b4ecea4937b91eb16904e76102","isMergeCommit":false,"messageTitle":"Fix Profile/Picture/AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"38bd633508fcccc6411d55cff4091ec60105d9ff","isMergeCommit":true,"messageTitle":"Merge pull request #10 from Brian030601/master","messageBody":"Fix Profile/Picture/AboutUs","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"546953571545818521e49ded11bd8e4ade526947","isMergeCommit":true,"messageTitle":"Merge pull request #13 from Cheezeblokz/Jingxi-Calendar","messageBody":"Jingxi-Calendar","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"2675507cc7da3f526e28035632d0b430980c4118","isMergeCommit":false,"messageTitle":"Add JUnit Test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":0},"test-code":{"insertions":5,"deletions":0}}},{"hash":"0de527070994dd8f4964f01aefe908f64a44af0f","isMergeCommit":true,"messageTitle":"Merge pull request #15 from Brian030601/master","messageBody":"Add JUnit Test","fileTypesAndContributionMap":{}},{"hash":"4f083629e9883f982e7a1465aa020b4e7c159996","isMergeCommit":false,"messageTitle":"Fix Calendar","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":13}}},{"hash":"85ff53a4953cd07da22db548ac468ade341caf9a","isMergeCommit":true,"messageTitle":"Merge pull request #16 from Brian030601/master","messageBody":"Fix Calendar","fileTypesAndContributionMap":{}},{"hash":"16530fbe89b68e5a11662ece37e64e4c2e156990","isMergeCommit":false,"messageTitle":"Implement CalendarCommandParser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":0}}},{"hash":"a74ef394dc91d9aa62b344d501a1712e3fa1b1d9","isMergeCommit":true,"messageTitle":"Merge pull request #18 from Brian030601/master","messageBody":"Implement CalendarCommandParser","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"123419806cd1d20006f00d45f3c38d887a0e7e08","isMergeCommit":false,"messageTitle":"Implement Calendar Command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":106,"deletions":11}}},{"hash":"1381eef2921ab298b96d6d7e1b2d1b8e7e3ded37","isMergeCommit":true,"messageTitle":"Merge pull request #22 from Brian030601/master","messageBody":"Implement Calendar Command","fileTypesAndContributionMap":{}},{"hash":"b9667f388141a4092bd687f91b6c8b5e8dc6ec62","isMergeCommit":false,"messageTitle":"Change EventStorage Name","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":33}}},{"hash":"4e03314e7f7911f2ec9480657e465ac9dc56d8f7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Jingxi-Calendar_update","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a1131aae9aa56a4de14c78cff59a60a13ae645b2","isMergeCommit":true,"messageTitle":"Merge pull request #21 from Cheezeblokz/Jingxi-Calendar_update","messageBody":"Jingxi calendar update","fileTypesAndContributionMap":{}},{"hash":"045e454a471174c0cfa2871914b503423bee8552","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-F11-3/tp","messageBody":"* \u0027master\u0027 of https://github.com/AY2324S1-CS2113-F11-3/tp:\n Added processing for respective user commands in EventCommand subclasses AddEventCommand, DeleteEventCommand, ListCalendarEventsCommand and UnknownCommand\n Added basic functionality for CalendarManager to ask for user input\n Added basic Calendar parameters and capabilities for adding, deleting and listing events\n\n# Conflicts:\n#\tsrc/main/java/seedu/duke/calendar/EventStorage.java\n","fileTypesAndContributionMap":{}},{"hash":"3a53123591f69efa42a6e01b8b0d9e54f0339b35","isMergeCommit":true,"messageTitle":"Merge pull request #24 from Brian030601/master","messageBody":"Resolve Merge Conflicts","fileTypesAndContributionMap":{}},{"hash":"666869d6caa6b3995894b44f0fb4739295a9c117","isMergeCommit":false,"messageTitle":"Fix CodingStyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":15}}},{"hash":"8bfd0e8e70174296b4a0111a3ebecc962ad4c3e0","isMergeCommit":true,"messageTitle":"Merge pull request #25 from Brian030601/master","messageBody":"Fix CodingStyle","fileTypesAndContributionMap":{}},{"hash":"9b9db6bd96eed4e5a9efb15fa024dc8d8808454c","isMergeCommit":false,"messageTitle":"Connect Calendar with Duke","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":67,"deletions":8}}},{"hash":"f3d5405ed73079fdb5ba9f2cb29332b08a7f2644","isMergeCommit":true,"messageTitle":"Merge pull request #27 from Brian030601/master","messageBody":"Connect Calendar with Duke","fileTypesAndContributionMap":{}},{"hash":"8fea1da38f03c4d83a153f839eea3bea6002d9d3","isMergeCommit":false,"messageTitle":"Improve Calendar \u0026 Flashcard Integration","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":5}}},{"hash":"4d8184d0c0c05b21d2512739ce1779951d6f3726","isMergeCommit":true,"messageTitle":"Merge pull request #28 from Brian030601/master","messageBody":"Improve Calendar \u0026 Flashcard Integration","fileTypesAndContributionMap":{}},{"hash":"449157cdb9a3a077849e2b73178a048833d0f027","isMergeCommit":false,"messageTitle":"Fix Calendar Add/List/Delete Issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":12}}},{"hash":"8083d7cd25fd6a3f752a2f4560d97230cfb7f327","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Brian030601/A-CalendarIssues","messageBody":"Fix Calendar Add/List/Delete Issues","fileTypesAndContributionMap":{}},{"hash":"3e94866e89a62856ffdd09810aec1b808b460b23","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"012d36d4915527e20501ee219a13ceeb6e7c1d58","isMergeCommit":true,"messageTitle":"Merge pull request #33 from Brian030601/master","messageBody":"Fix Calendar Add/List/Delete Issues","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"wendelinwemhoener":{"docs":67,"functional-code":560,"test-code":20,"other":1},"Cheezeblokz":{"docs":3,"functional-code":63,"test-code":0},"junhyeong0411":{"docs":7,"functional-code":396,"test-code":10},"Brian030601":{"docs":7,"functional-code":142,"test-code":5}},"authorContributionVariance":{"wendelinwemhoener":6998.7646,"Cheezeblokz":857.28015,"junhyeong0411":2418.8894,"Brian030601":2934.6318},"authorDisplayNameMap":{"wendelinwemhoener":"CS2113-F11-3 WEMH..ELIN","Cheezeblokz":"CS2113-F11-3 ZHU ..NGXI","junhyeong0411":"CS2113-F11-3 BANG..EONG","Brian030601":"CS2113-F11-3 KHER..ALAN"}} diff --git a/AY2324S1-CS2113-T17-1_tp_master/authorship.json b/AY2324S1-CS2113-T17-1_tp_master/authorship.json index 8d87ea9..3098d9c 100644 --- a/AY2324S1-CS2113-T17-1_tp_master/authorship.json +++ b/AY2324S1-CS2113-T17-1_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"# AthletiCLI project template","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11 (use the exact version), update Intellij to the most recent version.","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. **Ensure Intellij JDK 11 is defined as an SDK**, as described [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk) -- this step is not needed if you have used JDK 11 in a previous Intellij project.","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. **Import the project _as a Gradle project_**, as described [here](https://se-education.org/guides/tutorials/intellijImportGradleProject.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"1. **Verify the set up**: After the importing is complete, locate the `src/main/java/seedu/duke/Duke.java` file, right-click it, and choose `Run Duke.main()`. If the setup is correct, you should see something like the below:","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003e Task :compileJava","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003e Task :processResources NO-SOURCE","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003e Task :classes","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003e Task :Duke.main()","lastModifiedDate":"2020-05-24"},{"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-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":" What is your name?","lastModifiedDate":"2020-05-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" Type some word and press enter to let the execution proceed to the end.","lastModifiedDate":"2020-05-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":"## Build automation using Gradle","lastModifiedDate":"2020-05-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":"* This project uses Gradle for build automation and dependency management. It includes a basic build script as well (i.e. the `build.gradle` file).","lastModifiedDate":"2020-05-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":"* If you are new to Gradle, refer to the [Gradle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/gradle.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":"## Testing","lastModifiedDate":"2020-05-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":"### I/O redirection tests","lastModifiedDate":"2020-05-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"* To run _I/O redirection_ tests (aka _Text UI tests_), navigate to the `text-ui-test` and run the `runtest(.bat/.sh)` script.","lastModifiedDate":"2020-05-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":"### JUnit tests","lastModifiedDate":"2020-05-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":42,"author":{"gitId":"-"},"content":"* A skeleton JUnit test (`src/test/java/seedu/duke/DukeTest.java`) is provided with this project template. ","lastModifiedDate":"2020-05-24"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* If you are new to JUnit, refer to the [JUnit Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/junit.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":"## Checkstyle","lastModifiedDate":"2020-05-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* A sample CheckStyle rule configuration is provided in this project.","lastModifiedDate":"2020-05-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* If you are new to Checkstyle, refer to the [Checkstyle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/checkstyle.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":"## CI using GitHub Actions","lastModifiedDate":"2020-05-24"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":52,"author":{"gitId":"-"},"content":"The project uses [GitHub actions](https://github.com/features/actions) for CI. When you push a commit to this repo or PR against it, GitHub actions will run automatically to build and verify the code as updated by the commit/PR.","lastModifiedDate":"2020-05-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":"## Documentation","lastModifiedDate":"2020-05-24"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":56,"author":{"gitId":"-"},"content":"`/docs` folder contains a skeleton version of the project documentation.","lastModifiedDate":"2020-05-24"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":58,"author":{"gitId":"-"},"content":"Steps for publishing documentation to the public: ","lastModifiedDate":"2020-05-24"},{"lineNumber":59,"author":{"gitId":"-"},"content":"1. If you are using this project template for an individual project, go your fork on GitHub.\u003cbr\u003e","lastModifiedDate":"2020-05-24"},{"lineNumber":60,"author":{"gitId":"-"},"content":" If you are using this project template for a team project, go to the team fork on GitHub.","lastModifiedDate":"2020-05-24"},{"lineNumber":61,"author":{"gitId":"-"},"content":"1. Click on the `settings` tab.","lastModifiedDate":"2020-05-24"},{"lineNumber":62,"author":{"gitId":"-"},"content":"1. Scroll down to the `GitHub Pages` section.","lastModifiedDate":"2020-05-24"},{"lineNumber":63,"author":{"gitId":"-"},"content":"1. Set the `source` as `master branch /docs folder`.","lastModifiedDate":"2020-05-24"},{"lineNumber":64,"author":{"gitId":"-"},"content":"1. Optionally, use the `choose a theme` button to choose a theme for your documentation.","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"AlWo223":1,"-":63}},{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" mainClass.set(\"athleticli.AthletiCLI\")","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" archiveBaseName.set(\"athleticli\")","lastModifiedDate":"2023-10-08"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"skylee03":2,"yicheng-toh":1,"-":44}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"| Display | Name | Github Profile | Portfolio |","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"|-----------------------------------------------------------|:-----------------:|:----------------------------------------:|:-----------------------------------------:|","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"| ![](https://via.placeholder.com/100.png?text\u003dPhoto) | Alexander Wolters | [Github](https://github.com/AlWo223) | [Portfolio](docs/team/johndoe.md) |","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"| ![](https://via.placeholder.com/100.png?text\u003dPhoto) | Nihal | [Github](https://github.com/nihalzp) | [Portfolio](docs/team/nihalzp.md) |","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"| ![](https://github.com/DaDevChia) | Dylan Chia | [Github](https://github.com/DaDevChia) | [Portfolio](https://github.com/DaDevChia) |","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"| ![](https://via.placeholder.com/100.png?text\u003dPhoto) | Yi Cheng | [Github](https://github.com/yicheng-toh) | [Portfolio](docs/team/yicheng.md) |","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"| ![](https://avatars.githubusercontent.com/u/24489025?v\u003d4) | Yang Ming-Tian | [Github](https://github.com/skylee03) | [Portfolio](docs/team/skylee03.md) |","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"yicheng-toh":8,"-":2}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"# AthletiCLI User Guide","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"**AthletiCLI** is your all-in-one solution to track, analyse, and optimize your athletic performance. Designed for the","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"committed athlete, this command-line interface (CLI) tool not only keeps tabs on your physical activities but also","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"covers dietary habits, sleep metrics, and more.","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"## Quick Start","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"* Ensure you have the required runtime environment installed on your computer.","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"* Download the latest AthletiCLI from the official repository.","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"* Copy the downloaded file to a folder you want to designate as the home for AthletiCLI.","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"* Open a command terminal, cd into the folder where you copied the file, and run java -jar AthletiCLI.jar","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"## Features","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"**Notes about Command Format**","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":"* Words in UPPER_CASE are parameters provided by the user.","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":"* Parameters can be in any order.","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"* Parameters enclosed in square brackets [] are optional.","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":"## Activity Management","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":"### Adding Activities:","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":"`activity`, `run`, `swim`, `cycle`","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":"You can record your activities in AtheltiCLI by adding different activities including running, cycling, and swimming.","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"**Syntax:**","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":"* `activity CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME`","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":"* `run CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":"* `swim CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS`","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":"* `cycle CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":"**Parameters:**","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":"* CAPTION: A short description of the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":"* DURATION: The duration of the activity in minutes.","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":"* DISTANCE: The distance of the activity in meters.","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":"* DATETIME: The date and time of the start of the activity. It must follow the ISO Date Time Format: YYYY-MM-DD HH:MM","lastModifiedDate":"2023-10-13"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":"**Examples:**","lastModifiedDate":"2023-10-13"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":"* `activity Morning Run duration/60 distance/10000 datetime/2021-09-01 06:00`","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":"* `cycle Evening Ride duration/120 distance/20000 datetime/2021-09-01 18:00 elevation/1000`","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":"### Deleting Activities:","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":"`delete-activity`","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":"Accidentally added an activity? You can quickly delete activities by using the following command.","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":"The index must be a positive number and is not larger than the number of activities recorded.","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":"**Syntax:**","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":"* `delete-activity INDEX`","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":"**Parameters:**","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":"* INDEX: The index of the activity as shown in the displayed activity list.","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":"**Examples:**","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":"* `delete-activity 2` deletes the second activity in the activity list.","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":"* `delete-activity 1` deletes the first activity in the activity list.","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":"### Listing Activities:","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":"`list-activity`","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":"You can see all your tracked activities in a list by using this command. For more detailed information, you can use","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":"the detailed flag.","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":"* `list-activity [-d]`","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":"**Flags:**","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":"* `-d`: Shows a detailed list of activities.","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":"* `list-activity` shows a brief overview of all activities.","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"AlWo223"},"content":"* `list-activity -d` shows a detailed summary of all activities.","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"AlWo223"},"content":"### Editing Activities:","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"AlWo223"},"content":"`edit-activity`, `edit-run`, `edit-swim`, `edit-cycle`","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"AlWo223"},"content":"You can edit your activities in AthletiCLI by editing the activity at the specified index.","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"AlWo223"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"AlWo223"},"content":"* `edit-activity INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME`","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"AlWo223"},"content":"* `edit-run INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"AlWo223"},"content":"* `edit-swim INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS`","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"AlWo223"},"content":"* `edit-cycle INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"AlWo223"},"content":"**Parameters:**","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":104,"author":{"gitId":"AlWo223"},"content":"* INDEX: The index of the activity to be edited - must be a positive number","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"AlWo223"},"content":"* see adding activities for the other parameters","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"AlWo223"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"AlWo223"},"content":"* `edit-activity 1 Morning Run duration/60 distance/10000 datetime/2021-09-01 06:00`","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"AlWo223"},"content":"* `edit-cycle 2 Evening Ride duration/120 distance/20000 datetime/2021-09-01 18:00 elevation/1000`","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"nihalzp"},"content":"## Diet Management","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"nihalzp"},"content":"### Adding Diets:","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"nihalzp"},"content":"`add-diet`","lastModifiedDate":"2023-10-18"},{"lineNumber":117,"author":{"gitId":"nihalzp"},"content":"You can record your diet in AtheltiCLI by adding your calorie, protein, carbohydrate,and fat intake of your meals.","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"nihalzp"},"content":"* `add-diet calories/CALORIES protein/PROTEIN carb/CARB fat/FAT`","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"nihalzp"},"content":"**Parameters:**","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"nihalzp"},"content":"* CALORIES: The total calories of the meal.","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"nihalzp"},"content":"* PROTEIN: The total protein of the meal.","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"nihalzp"},"content":"* CARB: The total carbohydrates of the meal.","lastModifiedDate":"2023-10-18"},{"lineNumber":128,"author":{"gitId":"nihalzp"},"content":"* FAT: The total fat of the meal.","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":130,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-15"},{"lineNumber":131,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":132,"author":{"gitId":"nihalzp"},"content":"* `add-diet calories/500 protein/20 carb/50 fat/10`","lastModifiedDate":"2023-10-18"},{"lineNumber":133,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":134,"author":{"gitId":"nihalzp"},"content":"### Deleting Diets:","lastModifiedDate":"2023-10-15"},{"lineNumber":135,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":136,"author":{"gitId":"nihalzp"},"content":"`delete-diet`","lastModifiedDate":"2023-10-15"},{"lineNumber":137,"author":{"gitId":"nihalzp"},"content":"You can delete your diet in AtheltiCLI by deleting the diet at the specified index.","lastModifiedDate":"2023-10-15"},{"lineNumber":138,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":139,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-15"},{"lineNumber":140,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":141,"author":{"gitId":"nihalzp"},"content":"* `delete-diet INDEX`","lastModifiedDate":"2023-10-15"},{"lineNumber":142,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":143,"author":{"gitId":"nihalzp"},"content":"**Parameters:**","lastModifiedDate":"2023-10-15"},{"lineNumber":144,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":145,"author":{"gitId":"nihalzp"},"content":"* INDEX: The index of the diet to be deleted - must be a positive integer.","lastModifiedDate":"2023-10-15"},{"lineNumber":146,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":147,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-15"},{"lineNumber":148,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":149,"author":{"gitId":"nihalzp"},"content":"* `delete-diet 1`","lastModifiedDate":"2023-10-15"},{"lineNumber":150,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":151,"author":{"gitId":"nihalzp"},"content":"### Listing Diets:","lastModifiedDate":"2023-10-15"},{"lineNumber":152,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":153,"author":{"gitId":"nihalzp"},"content":"`list-diet`","lastModifiedDate":"2023-10-15"},{"lineNumber":154,"author":{"gitId":"nihalzp"},"content":"You can list all your diets in AtheltiCLI.","lastModifiedDate":"2023-10-15"},{"lineNumber":155,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":156,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-15"},{"lineNumber":157,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":158,"author":{"gitId":"nihalzp"},"content":"* `list-diet`","lastModifiedDate":"2023-10-15"},{"lineNumber":159,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":160,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-15"},{"lineNumber":161,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":162,"author":{"gitId":"nihalzp"},"content":"* `list-diet`","lastModifiedDate":"2023-10-15"},{"lineNumber":163,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":164,"author":{"gitId":"yicheng-toh"},"content":"## Diet Goal Management","lastModifiedDate":"2023-10-18"},{"lineNumber":165,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":166,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":167,"author":{"gitId":"yicheng-toh"},"content":"### Adding Diet Goals:","lastModifiedDate":"2023-10-18"},{"lineNumber":168,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":169,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":170,"author":{"gitId":"yicheng-toh"},"content":"`set-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":171,"author":{"gitId":"yicheng-toh"},"content":"You can create a new diet goal to track your nutrients intake with AtheltiCLI by adding the nutrients you wish to track and the target value for your nutrient goals.","lastModifiedDate":"2023-10-18"},{"lineNumber":172,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":173,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":174,"author":{"gitId":"yicheng-toh"},"content":"Currently only the following nutrients/metrics are tracked:","lastModifiedDate":"2023-10-18"},{"lineNumber":175,"author":{"gitId":"yicheng-toh"},"content":"1. Calories","lastModifiedDate":"2023-10-18"},{"lineNumber":176,"author":{"gitId":"yicheng-toh"},"content":"2. Protein","lastModifiedDate":"2023-10-18"},{"lineNumber":177,"author":{"gitId":"yicheng-toh"},"content":"3. Carbs","lastModifiedDate":"2023-10-18"},{"lineNumber":178,"author":{"gitId":"yicheng-toh"},"content":"4. Fats","lastModifiedDate":"2023-10-18"},{"lineNumber":179,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":180,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":181,"author":{"gitId":"yicheng-toh"},"content":"You can set multiple nutrients goals at once with the `set-diet-goal` command.","lastModifiedDate":"2023-10-18"},{"lineNumber":182,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":183,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":184,"author":{"gitId":"yicheng-toh"},"content":"**Syntax:**","lastModifiedDate":"2023-10-18"},{"lineNumber":185,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":186,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":187,"author":{"gitId":"yicheng-toh"},"content":"* `set-diet-goal calories/CALORIES protein/PROTEIN carb/CARBS fat/FAT`","lastModifiedDate":"2023-10-18"},{"lineNumber":188,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":189,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":190,"author":{"gitId":"yicheng-toh"},"content":"**Parameters:**","lastModifiedDate":"2023-10-18"},{"lineNumber":191,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":192,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":193,"author":{"gitId":"yicheng-toh"},"content":"* CALORIES: Your target value for calories intake, in terms of cal.","lastModifiedDate":"2023-10-18"},{"lineNumber":194,"author":{"gitId":"yicheng-toh"},"content":"* PROTEIN: The target for protein intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":195,"author":{"gitId":"yicheng-toh"},"content":"* CARB: Your target value for carbohydrate intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":196,"author":{"gitId":"yicheng-toh"},"content":"* FAT: Your target value for fats intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":197,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":198,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":199,"author":{"gitId":"yicheng-toh"},"content":"You can create one or multiple nutrient goals at once with this command.","lastModifiedDate":"2023-10-18"},{"lineNumber":200,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":201,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":202,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":203,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":204,"author":{"gitId":"yicheng-toh"},"content":"**Examples:**","lastModifiedDate":"2023-10-18"},{"lineNumber":205,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":206,"author":{"gitId":"yicheng-toh"},"content":"Create multiple nutrients goals:","lastModifiedDate":"2023-10-18"},{"lineNumber":207,"author":{"gitId":"yicheng-toh"},"content":"* `set-diet-goal calories/500 protein/20 carb/50 fat/10`","lastModifiedDate":"2023-10-18"},{"lineNumber":208,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":209,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":210,"author":{"gitId":"yicheng-toh"},"content":"Create a single calories goal:","lastModifiedDate":"2023-10-18"},{"lineNumber":211,"author":{"gitId":"yicheng-toh"},"content":"* `set-diet-goal calories/500`","lastModifiedDate":"2023-10-18"},{"lineNumber":212,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":213,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":214,"author":{"gitId":"yicheng-toh"},"content":"### Deleting Diet Goals:","lastModifiedDate":"2023-10-18"},{"lineNumber":215,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":216,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":217,"author":{"gitId":"yicheng-toh"},"content":"`delete-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":218,"author":{"gitId":"yicheng-toh"},"content":"You can delete your diet goals in AtheltiCLI by deleting the goal at the specified index.","lastModifiedDate":"2023-10-18"},{"lineNumber":219,"author":{"gitId":"yicheng-toh"},"content":"This index will be referenced via `list-diet-goal` command.","lastModifiedDate":"2023-10-18"},{"lineNumber":220,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":221,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":222,"author":{"gitId":"yicheng-toh"},"content":"**Syntax:**","lastModifiedDate":"2023-10-18"},{"lineNumber":223,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":224,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":225,"author":{"gitId":"yicheng-toh"},"content":"* `delete-diet-goal INDEX`","lastModifiedDate":"2023-10-18"},{"lineNumber":226,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":227,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":228,"author":{"gitId":"yicheng-toh"},"content":"**Parameters:**","lastModifiedDate":"2023-10-18"},{"lineNumber":229,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":230,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":231,"author":{"gitId":"yicheng-toh"},"content":"* INDEX: The index of the diet goal to be deleted. It must be a positive integer.","lastModifiedDate":"2023-10-18"},{"lineNumber":232,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":233,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":234,"author":{"gitId":"yicheng-toh"},"content":"**Examples:**","lastModifiedDate":"2023-10-18"},{"lineNumber":235,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":236,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":237,"author":{"gitId":"yicheng-toh"},"content":"* `delete-diet-goal 1`","lastModifiedDate":"2023-10-18"},{"lineNumber":238,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":239,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":240,"author":{"gitId":"yicheng-toh"},"content":"### Listing Diet Goals:","lastModifiedDate":"2023-10-18"},{"lineNumber":241,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":242,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":243,"author":{"gitId":"yicheng-toh"},"content":"`list-diet-goals`","lastModifiedDate":"2023-10-18"},{"lineNumber":244,"author":{"gitId":"yicheng-toh"},"content":"You can list all your diet goals in AtheltiCLI.","lastModifiedDate":"2023-10-18"},{"lineNumber":245,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":246,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":247,"author":{"gitId":"yicheng-toh"},"content":"**Syntax:**","lastModifiedDate":"2023-10-18"},{"lineNumber":248,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":249,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":250,"author":{"gitId":"yicheng-toh"},"content":"* `list-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":251,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":252,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":253,"author":{"gitId":"yicheng-toh"},"content":"**Examples:**","lastModifiedDate":"2023-10-18"},{"lineNumber":254,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":255,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":256,"author":{"gitId":"yicheng-toh"},"content":"* `list-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":257,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":258,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":259,"author":{"gitId":"yicheng-toh"},"content":"### Editing Diet Goals:","lastModifiedDate":"2023-10-18"},{"lineNumber":260,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":261,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":262,"author":{"gitId":"yicheng-toh"},"content":"`edit-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":263,"author":{"gitId":"yicheng-toh"},"content":"You can edit the target value of your diet goals in AtheltiCLI, redefining the target value for the specified nutrient.","lastModifiedDate":"2023-10-18"},{"lineNumber":264,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":265,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":266,"author":{"gitId":"yicheng-toh"},"content":"This command takes in at least one argument. You are able to edit multiple diet goals target value at once. No repetition is allowed.","lastModifiedDate":"2023-10-18"},{"lineNumber":267,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":268,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":269,"author":{"gitId":"yicheng-toh"},"content":"**Syntax:**","lastModifiedDate":"2023-10-18"},{"lineNumber":270,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":271,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":272,"author":{"gitId":"yicheng-toh"},"content":"* `edit-diet-goal calories/CALORIES protein/PROTEIN carb/CARBS fat/FAT`","lastModifiedDate":"2023-10-18"},{"lineNumber":273,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":274,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":275,"author":{"gitId":"yicheng-toh"},"content":"**Parameters:**","lastModifiedDate":"2023-10-18"},{"lineNumber":276,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":277,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":278,"author":{"gitId":"yicheng-toh"},"content":"* CALORIES: Your target value for calories intake, in terms of cal.","lastModifiedDate":"2023-10-18"},{"lineNumber":279,"author":{"gitId":"yicheng-toh"},"content":"* PROTEIN: The target for protein intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":280,"author":{"gitId":"yicheng-toh"},"content":"* CARBS: Your target value for carbohydrate intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":281,"author":{"gitId":"yicheng-toh"},"content":"* FAT: Your target value for fats intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":282,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":283,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":284,"author":{"gitId":"yicheng-toh"},"content":"You can create one or multiple nutrient goals with this command.","lastModifiedDate":"2023-10-18"},{"lineNumber":285,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":286,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":287,"author":{"gitId":"yicheng-toh"},"content":"**Examples:**","lastModifiedDate":"2023-10-18"},{"lineNumber":288,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":289,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":290,"author":{"gitId":"yicheng-toh"},"content":"Edit multiple nutrients goals:","lastModifiedDate":"2023-10-18"},{"lineNumber":291,"author":{"gitId":"yicheng-toh"},"content":"* `edit-diet-goal calories/5000 protein/200 carb/500 fat/100`","lastModifiedDate":"2023-10-18"},{"lineNumber":292,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":293,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":294,"author":{"gitId":"yicheng-toh"},"content":"Edit a single calories goal:","lastModifiedDate":"2023-10-18"},{"lineNumber":295,"author":{"gitId":"yicheng-toh"},"content":"* `edit-diet-goal calories/5000`","lastModifiedDate":"2023-10-18"},{"lineNumber":296,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":297,"author":{"gitId":"DaDevChia"},"content":"## Sleep Management","lastModifiedDate":"2023-10-17"},{"lineNumber":298,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":299,"author":{"gitId":"DaDevChia"},"content":"### Adding Sleep:","lastModifiedDate":"2023-10-17"},{"lineNumber":300,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":301,"author":{"gitId":"DaDevChia"},"content":"**Command:** `add-sleep` ","lastModifiedDate":"2023-10-17"},{"lineNumber":302,"author":{"gitId":"DaDevChia"},"content":"You can record your sleep timings in AtheltiCLI by adding your sleep start and end time.","lastModifiedDate":"2023-10-17"},{"lineNumber":303,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":304,"author":{"gitId":"DaDevChia"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":305,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":306,"author":{"gitId":"DaDevChia"},"content":"* `add-sleep start/START end/END`","lastModifiedDate":"2023-10-17"},{"lineNumber":307,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":308,"author":{"gitId":"DaDevChia"},"content":"**Parameters:**","lastModifiedDate":"2023-10-17"},{"lineNumber":309,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":310,"author":{"gitId":"DaDevChia"},"content":"* START: The start time of the sleep in the following Date Time Format: DD-MM-YYYY HH:MM","lastModifiedDate":"2023-10-17"},{"lineNumber":311,"author":{"gitId":"DaDevChia"},"content":"* END: The end time of the sleep in the following Date Time Format: DD-MM-YYYY HH:MM","lastModifiedDate":"2023-10-17"},{"lineNumber":312,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":313,"author":{"gitId":"DaDevChia"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":314,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":315,"author":{"gitId":"DaDevChia"},"content":"* `add-sleep start/01-09-2021 22:00 end/02-09-2021 06:00`","lastModifiedDate":"2023-10-17"},{"lineNumber":316,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":317,"author":{"gitId":"DaDevChia"},"content":"### Listing Sleep:","lastModifiedDate":"2023-10-17"},{"lineNumber":318,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":319,"author":{"gitId":"DaDevChia"},"content":"**Command:** `list-sleep`","lastModifiedDate":"2023-10-17"},{"lineNumber":320,"author":{"gitId":"DaDevChia"},"content":"You can list all your sleep records in AtheltiCLI.","lastModifiedDate":"2023-10-17"},{"lineNumber":321,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":322,"author":{"gitId":"DaDevChia"},"content":"**Syntax:** `list-sleep`","lastModifiedDate":"2023-10-17"},{"lineNumber":323,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":324,"author":{"gitId":"DaDevChia"},"content":"**Examples:** `list-sleep`","lastModifiedDate":"2023-10-17"},{"lineNumber":325,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":326,"author":{"gitId":"DaDevChia"},"content":"### Deleting Sleep:","lastModifiedDate":"2023-10-17"},{"lineNumber":327,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":328,"author":{"gitId":"DaDevChia"},"content":"**Command:** `delete-sleep` ","lastModifiedDate":"2023-10-17"},{"lineNumber":329,"author":{"gitId":"DaDevChia"},"content":"You can delete your sleep in AtheltiCLI by specifying the sleep\u0027s index.","lastModifiedDate":"2023-10-17"},{"lineNumber":330,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":331,"author":{"gitId":"DaDevChia"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":332,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":333,"author":{"gitId":"DaDevChia"},"content":"* `delete-sleep INDEX`","lastModifiedDate":"2023-10-17"},{"lineNumber":334,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":335,"author":{"gitId":"DaDevChia"},"content":"**Parameters:**","lastModifiedDate":"2023-10-17"},{"lineNumber":336,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":337,"author":{"gitId":"DaDevChia"},"content":"* INDEX: The integer index of the sleep record you wish to delete.","lastModifiedDate":"2023-10-17"},{"lineNumber":338,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":339,"author":{"gitId":"DaDevChia"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":340,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":341,"author":{"gitId":"DaDevChia"},"content":"* `delete-sleep 5` ","lastModifiedDate":"2023-10-17"},{"lineNumber":342,"author":{"gitId":"DaDevChia"},"content":" (Note: This will delete the 5th sleep record from your records.)","lastModifiedDate":"2023-10-17"},{"lineNumber":343,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":344,"author":{"gitId":"DaDevChia"},"content":"### Editing Sleep:","lastModifiedDate":"2023-10-17"},{"lineNumber":345,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":346,"author":{"gitId":"DaDevChia"},"content":"**Command:** `edit-sleep` ","lastModifiedDate":"2023-10-17"},{"lineNumber":347,"author":{"gitId":"nihalzp"},"content":"You can modify existing sleep records in AtheltiCLI by specifying the sleep\u0027s index and then providing the new start and","lastModifiedDate":"2023-10-18"},{"lineNumber":348,"author":{"gitId":"nihalzp"},"content":"end times.","lastModifiedDate":"2023-10-18"},{"lineNumber":349,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":350,"author":{"gitId":"DaDevChia"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":351,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":352,"author":{"gitId":"DaDevChia"},"content":"* `edit-sleep INDEX start/START end/END`","lastModifiedDate":"2023-10-17"},{"lineNumber":353,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":354,"author":{"gitId":"DaDevChia"},"content":"**Parameters:**","lastModifiedDate":"2023-10-17"},{"lineNumber":355,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":356,"author":{"gitId":"DaDevChia"},"content":"* INDEX: The integer index of the sleep record you wish to edit.","lastModifiedDate":"2023-10-17"},{"lineNumber":357,"author":{"gitId":"DaDevChia"},"content":"* START: The new start time of the sleep in the following Date Time Format: DD-MM-YYYY HH:MM","lastModifiedDate":"2023-10-17"},{"lineNumber":358,"author":{"gitId":"DaDevChia"},"content":"* END: The new end time of the sleep in the following Date Time Format: DD-MM-YYYY HH:MM","lastModifiedDate":"2023-10-17"},{"lineNumber":359,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":360,"author":{"gitId":"DaDevChia"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":361,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":362,"author":{"gitId":"DaDevChia"},"content":"* `edit-sleep 5 start/05-09-2021 23:00 end/06-09-2021 07:00` ","lastModifiedDate":"2023-10-17"},{"lineNumber":363,"author":{"gitId":"DaDevChia"},"content":" (Note: This will edit the 5th sleep record to have the new specified timings.)","lastModifiedDate":"2023-10-17"},{"lineNumber":364,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":365,"author":{"gitId":"DaDevChia"},"content":"---","lastModifiedDate":"2023-10-17"},{"lineNumber":366,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":367,"author":{"gitId":"DaDevChia"},"content":"Remember, when using AtheltiCLI:","lastModifiedDate":"2023-10-17"},{"lineNumber":368,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":369,"author":{"gitId":"DaDevChia"},"content":"* Make sure to provide accurate dates and times.","lastModifiedDate":"2023-10-17"},{"lineNumber":370,"author":{"gitId":"DaDevChia"},"content":"* Double-check indexes before deleting or editing records to prevent mistakes.","lastModifiedDate":"2023-10-17"},{"lineNumber":371,"author":{"gitId":"DaDevChia"},"content":"* If you encounter any error messages, read them carefully to understand what went wrong.","lastModifiedDate":"2023-10-17"},{"lineNumber":372,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":373,"author":{"gitId":"DaDevChia"},"content":"---","lastModifiedDate":"2023-10-17"},{"lineNumber":374,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":375,"author":{"gitId":"-"},"content":"Useful links:","lastModifiedDate":"2020-05-24"},{"lineNumber":376,"author":{"gitId":"AlWo223"},"content":"[User Guide](UserGuide.md)","lastModifiedDate":"2023-10-13"},{"lineNumber":377,"author":{"gitId":"AlWo223"},"content":"[Developer Guide](DeveloperGuide.md)","lastModifiedDate":"2023-10-13"},{"lineNumber":378,"author":{"gitId":"AlWo223"},"content":"[About Us](AboutUs.md)","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"DaDevChia":75,"AlWo223":94,"yicheng-toh":133,"-":4,"nihalzp":72}},{"path":"docs/team/skylee03.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"# Yang Ming-Tian - Project Portfolio Page","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"## Overview","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"skylee03":6}},{"path":"docs/team/yicheng.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"# John Doe - Project Portfolio Page","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"## Overview","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"yicheng-toh":6}},{"path":"src/main/java/athleticli/AthletiCLI.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.logging.ConsoleHandler;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import java.util.logging.LogManager;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.SaveCommand;","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":"import athleticli.storage.Storage;","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":"import athleticli.ui.Parser;","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":"import athleticli.ui.Ui;","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" * Defines the basic structure and the behavior of AthletiCLI.","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":"public class AthletiCLI {","lastModifiedDate":"2023-10-08"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" private static Logger logger \u003d Logger.getLogger(AthletiCLI.class.getName());","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" private static Ui ui;","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" private static Data data;","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" * Constructs an \u003ccode\u003eAthletiCLI\u003c/code\u003e object.","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" public AthletiCLI() {","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" data \u003d Storage.load();","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" LogManager.getLogManager().reset();","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" logger.addHandler(new FileHandler(\"%t/athleticli-log.txt\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" } catch(IOException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" logger.addHandler(new ConsoleHandler());","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" * Creates an `AthletiCLI` object and runs it.","lastModifiedDate":"2023-10-08"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" * @param args Arguments obtained from the command line.","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" /* save data when the JVM begins its shutdown sequence */","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" Runtime.getRuntime().addShutdownHook(new Thread(() -\u003e {","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":" final String[] feedback \u003d new SaveCommand().execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"skylee03"},"content":" ui.showMessages(feedback);","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"skylee03"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"skylee03"},"content":" ui.showException(e);","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":" }));","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":" new AthletiCLI().run();","lastModifiedDate":"2023-10-08"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":" * Displays the welcome interface, continuously reads user input","lastModifiedDate":"2023-10-08"},{"lineNumber":59,"author":{"gitId":"skylee03"},"content":" * and executes corresponding instructions until exiting.","lastModifiedDate":"2023-10-08"},{"lineNumber":60,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":61,"author":{"gitId":"skylee03"},"content":" public void run() {","lastModifiedDate":"2023-10-08"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" logger.entering(getClass().getName(), \"run\");","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":" ui.showWelcome();","lastModifiedDate":"2023-10-08"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-10-08"},{"lineNumber":65,"author":{"gitId":"skylee03"},"content":" while (!isExit) {","lastModifiedDate":"2023-10-08"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":" final String rawUserInput \u003d ui.getUserCommand();","lastModifiedDate":"2023-10-08"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":" try {","lastModifiedDate":"2023-10-08"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":" logger.info(\"Command read: \" + rawUserInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":" final Command command \u003d Parser.parseCommand(rawUserInput);","lastModifiedDate":"2023-10-08"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":" final String[] feedback \u003d command.execute(data);","lastModifiedDate":"2023-10-08"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":" ui.showMessages(feedback);","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":" logger.info(\"Command executed successfully\");","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":" isExit \u003d command.isExit();","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":" ui.showException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":" logger.warning(\"Exception caught: \" + e);","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":78,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":79,"author":{"gitId":"skylee03"},"content":" logger.exiting(getClass().getName(), \"run\");","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":81,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":81}},{"path":"src/main/java/athleticli/commands/ByeCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":" * Returns \u003ccode\u003etrue\u003c/code\u003e if this is a \u003ccode\u003eByeCommand\u003c/code\u003e object, otherwise returns \u003ccode\u003efalse\u003c/code\u003e.","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":" * @return \u003ccode\u003etrue\u003c/code\u003e if this is a \u003ccode\u003eByeCommand\u003c/code\u003e object, otherwise returns \u003ccode\u003efalse\u003c/code\u003e.","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" public boolean isExit() {","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" return true;","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" * Returns the bye message to be shown to the user.","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" * @return The messages to be shown to the user.","lastModifiedDate":"2023-10-08"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" return new String[] {Message.MESSAGE_BYE};","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":26}},{"path":"src/main/java/athleticli/commands/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":" * Defines the basic methods of a command.","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"public abstract class Command {","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":" * Executes the command and returns the messages to be shown to the user.","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" * @param data The current data.","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" * @return The messages to be shown to the user.","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" public abstract String[] execute(Data data) throws AthletiException;","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" * Returns \u003ccode\u003etrue\u003c/code\u003e if this is a \u003ccode\u003eByeCommand\u003c/code\u003e object, otherwise returns \u003ccode\u003efalse\u003c/code\u003e.","lastModifiedDate":"2023-10-08"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" * @return \u003ccode\u003etrue\u003c/code\u003e if this is a \u003ccode\u003eByeCommand\u003c/code\u003e object, otherwise returns \u003ccode\u003efalse\u003c/code\u003e.","lastModifiedDate":"2023-10-08"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" public boolean isExit() {","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" return false;","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":27}},{"path":"src/main/java/athleticli/commands/HelpCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands;","lastModifiedDate":"2023-10-21"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import static java.util.Map.entry;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import java.util.Map;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"import athleticli.ui.CommandName;","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" private static final String[] HELP_ALL \u003d {","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" /* Activity Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" \"\\nActivity Management:\",","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" Message.HELP_ADD_ACTIVITY,","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" Message.HELP_ADD_RUN,","lastModifiedDate":"2023-10-21"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" Message.HELP_ADD_SWIM,","lastModifiedDate":"2023-10-21"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" Message.HELP_ADD_CYCLE,","lastModifiedDate":"2023-10-21"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" Message.HELP_DELETE_ACTIVITY,","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" Message.HELP_LIST_ACTIVITY,","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" Message.HELP_EDIT_ACTIVITY,","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" Message.HELP_EDIT_RUN,","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" Message.HELP_EDIT_SWIM,","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" Message.HELP_EDIT_CYCLE,","lastModifiedDate":"2023-10-21"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" /* Diet Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" \"\\nDiet Management:\",","lastModifiedDate":"2023-10-21"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" Message.HELP_ADD_DIET,","lastModifiedDate":"2023-10-21"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" Message.HELP_DELETE_DIET,","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" Message.HELP_LIST_DIET,","lastModifiedDate":"2023-10-21"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" /* Sleep Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" \"\\nSleep Management:\",","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" Message.HELP_ADD_SLEEP,","lastModifiedDate":"2023-10-21"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" Message.HELP_LIST_SLEEP,","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" Message.HELP_DELETE_SLEEP,","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" Message.HELP_EDIT_SLEEP,","lastModifiedDate":"2023-10-21"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" /* Misc */","lastModifiedDate":"2023-10-21"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" \"\\nMisc:\",","lastModifiedDate":"2023-10-21"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" Message.HELP_SAVE,","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" Message.HELP_BYE,","lastModifiedDate":"2023-10-21"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" Message.HELP_HELP,","lastModifiedDate":"2023-10-21"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" \"\\n\" + Message.HELP_DETAILS","lastModifiedDate":"2023-10-21"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" };","lastModifiedDate":"2023-10-21"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" private static final Map\u003cString, String\u003e HELP_MESSAGES \u003d Map.ofEntries(","lastModifiedDate":"2023-10-21"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" /* Activity Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_ACTIVITY, Message.HELP_ADD_ACTIVITY),","lastModifiedDate":"2023-10-21"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_RUN, Message.HELP_ADD_RUN),","lastModifiedDate":"2023-10-21"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SWIM, Message.HELP_ADD_SWIM),","lastModifiedDate":"2023-10-21"},{"lineNumber":49,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_CYCLE, Message.HELP_ADD_CYCLE),","lastModifiedDate":"2023-10-21"},{"lineNumber":50,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_ACTIVITY_DELETE, Message.HELP_DELETE_ACTIVITY),","lastModifiedDate":"2023-10-21"},{"lineNumber":51,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_ACTIVITY_LIST, Message.HELP_LIST_ACTIVITY),","lastModifiedDate":"2023-10-21"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_ACTIVITY_EDIT, Message.HELP_EDIT_ACTIVITY),","lastModifiedDate":"2023-10-21"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_RUN_EDIT, Message.HELP_EDIT_RUN),","lastModifiedDate":"2023-10-21"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SWIM_EDIT, Message.HELP_EDIT_SWIM),","lastModifiedDate":"2023-10-21"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_CYCLE_EDIT, Message.HELP_EDIT_CYCLE),","lastModifiedDate":"2023-10-21"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":" /* Diet Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_DIET_ADD, Message.HELP_ADD_DIET),","lastModifiedDate":"2023-10-21"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_DIET_DELETE, Message.HELP_DELETE_DIET),","lastModifiedDate":"2023-10-21"},{"lineNumber":59,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_DIET_LIST, Message.HELP_LIST_DIET),","lastModifiedDate":"2023-10-21"},{"lineNumber":60,"author":{"gitId":"skylee03"},"content":" /* Sleep Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":61,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SLEEP_ADD, Message.HELP_ADD_SLEEP),","lastModifiedDate":"2023-10-21"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SLEEP_LIST, Message.HELP_LIST_SLEEP),","lastModifiedDate":"2023-10-21"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SLEEP_DELETE, Message.HELP_DELETE_SLEEP),","lastModifiedDate":"2023-10-21"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SLEEP_EDIT, Message.HELP_EDIT_SLEEP),","lastModifiedDate":"2023-10-21"},{"lineNumber":65,"author":{"gitId":"skylee03"},"content":" /* Misc */","lastModifiedDate":"2023-10-21"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SAVE, Message.HELP_SAVE),","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_BYE, Message.HELP_BYE),","lastModifiedDate":"2023-10-21"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_HELP, Message.HELP_HELP)","lastModifiedDate":"2023-10-21"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":" );","lastModifiedDate":"2023-10-21"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":" private String command;","lastModifiedDate":"2023-10-21"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":" public HelpCommand(String command) {","lastModifiedDate":"2023-10-21"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":" this.command \u003d command;","lastModifiedDate":"2023-10-21"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":" * Returns the help messages to be shown to the user.","lastModifiedDate":"2023-10-21"},{"lineNumber":78,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-21"},{"lineNumber":79,"author":{"gitId":"skylee03"},"content":" * @param data The current data.","lastModifiedDate":"2023-10-21"},{"lineNumber":80,"author":{"gitId":"skylee03"},"content":" * @return The messages to be shown to the user.","lastModifiedDate":"2023-10-21"},{"lineNumber":81,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-21"},{"lineNumber":82,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":83,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-21"},{"lineNumber":84,"author":{"gitId":"skylee03"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-21"},{"lineNumber":85,"author":{"gitId":"skylee03"},"content":" if (HELP_MESSAGES.containsKey(command)) {","lastModifiedDate":"2023-10-21"},{"lineNumber":86,"author":{"gitId":"skylee03"},"content":" return new String[] {\"Usage: \" + HELP_MESSAGES.get(command)};","lastModifiedDate":"2023-10-21"},{"lineNumber":87,"author":{"gitId":"skylee03"},"content":" } else {","lastModifiedDate":"2023-10-21"},{"lineNumber":88,"author":{"gitId":"skylee03"},"content":" return HELP_ALL;","lastModifiedDate":"2023-10-21"},{"lineNumber":89,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":91,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-21"}],"authorContributionMap":{"skylee03":91}},{"path":"src/main/java/athleticli/commands/SaveCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import athleticli.storage.Storage;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"public class SaveCommand extends Command {","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" * Saves the data into the file.","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" * @param data The current data.","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" * @return The messages to be shown to the user.","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" assert data !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" Storage.save(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" throw new AthletiException(Message.MESSAGE_IO_EXCEPTION);","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" return new String[] {Message.MESSAGE_SAVE};","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"skylee03":28}},{"path":"src/main/java/athleticli/commands/activity/AddActivityCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Activity;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityList;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":" * Executes the add activity commands provided by the user.","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"public class AddActivityCommand extends Command {","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" private final Activity activity;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" * Constructor for AddActivityCommand.","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" * @param activity Activity to be added.","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" public AddActivityCommand(Activity activity){","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" this.activity \u003d activity;","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" * Updates the activity list.","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" * @param data The current data containing the activity list.","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" public String[] execute(Data data) {","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" ActivityList activities \u003d data.getActivities();","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" activities.add(this.activity);","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" int size \u003d activities.size();","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" String countMessage;","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" if (size \u003e 1) {","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" countMessage \u003d String.format(Message.MESSAGE_ACTIVITY_COUNT, size);","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" } else {","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" countMessage \u003d Message.MESSAGE_ACTIVITY_FIRST;","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" return new String[]{Message.MESSAGE_ACTIVITY_ADDED, this.activity.toString(), countMessage};","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":3,"AlWo223":39}},{"path":"src/main/java/athleticli/commands/activity/DeleteActivityCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Activity;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityList;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":" * Executes the delete activity command provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"public class DeleteActivityCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private final Integer index;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" * Constructor for DeleteActivityCommand.","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" * @param index Index of activity to be deleted.","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" public DeleteActivityCommand(Integer index) {","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" this.index \u003d index;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" * Executes the delete activity command.","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" * @param data Data object containing the current list of activities.","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" * @return String array containing the messages to be printed to the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the index provided is out of bounds.","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" ActivityList activities \u003d data.getActivities();","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" final Activity activity \u003d activities.get(index-1);","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" activities.remove(activity);","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" return new String[]{Message.MESSAGE_ACTIVITY_DELETED, activity.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" String.format(Message.MESSAGE_ACTIVITY_COUNT, activities.size())};","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_INDEX_OUT_OF_BOUNDS);","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":3,"AlWo223":41}},{"path":"src/main/java/athleticli/commands/activity/EditActivityCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Activity;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" * Executes the edit activity command provided by the user.","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"public class EditActivityCommand extends Command {","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static Logger logger \u003d Logger.getLogger(\"EditActivityCommand\");","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private final int index;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private final Activity activity;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" * Constructor for EditActivityCommand.","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" * @param index Index of the activity to be edited.","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" * @param activity Updated Activity.","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" public EditActivityCommand(Activity activity, int index) {","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" this.index \u003d index;","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" assert index \u003e 0 : \"Index should be greater than 0\";","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" this.activity \u003d activity;","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" * Executes the edit activity command.","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" * @param data Data object containing the current list of activities.","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" * @return String array containing the messages to be printed to the user.","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the index provided is out of bounds.","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" logger.log(Level.INFO, \"Editing activity at index \" + index);","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" ActivityList activities \u003d data.getActivities();","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" activities.set(index-1, activity);","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" logger.log(java.util.logging.Level.INFO, \"Activity at index \" + index + \"successfully edited\");","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" return new String[]{Message.MESSAGE_ACTIVITY_UPDATED, activity.toString(),","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" String.format(Message.MESSAGE_ACTIVITY_COUNT, activities.size())};","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" logger.log(java.util.logging.Level.WARNING, \"Activity index out of bounds\");","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_INDEX_OUT_OF_BOUNDS);","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":3,"AlWo223":49}},{"path":"src/main/java/athleticli/commands/activity/ListActivityCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityList;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":" * Executes the list activity command provided by the user.","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"public class ListActivityCommand extends Command {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" private final boolean isDetailed;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" * Constructor for ListActivityCommand.","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" * @param isDetailed Whether the list should be detailed.","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" public ListActivityCommand(boolean isDetailed) {","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" this.isDetailed \u003d isDetailed;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" * Lists the activities.","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" * @param data The current data containing the activity list.","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" * @return The message containing listing of activities which will be shown to the user.","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" public String[] execute(Data data) {","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" ActivityList activities \u003d data.getActivities();","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" final int size \u003d activities.size();","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" if (isDetailed) {","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" return printDetailedList(activities, size);","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" return printList(activities, size);","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" public String[] printList(ActivityList activities, int size) {","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" String[] output \u003d new String[size + 1];","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" output[0] \u003d Message.MESSAGE_ACTIVITY_LIST;","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c size; i++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" output[i+1] \u003d (i+1) + \".\" + activities.get(i).toString();","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" return output;","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" public String[] printDetailedList(ActivityList activities, int size) {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" String[] output \u003d new String[size + 1];","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" output[0] \u003d Message.MESSAGE_ACTIVITY_LIST;","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c size; i++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" output[i+1] \u003d activities.get(i).toDetailedString();","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" return output;","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":3,"AlWo223":52}},{"path":"src/main/java/athleticli/commands/diet/AddDietCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.DietList;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" * Executes the add diet commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"public class AddDietCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" private final Diet diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" * Constructor for AddDietCommand.","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" * @param diet Diet to be added.","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" public AddDietCommand(Diet diet) {","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" this.diet \u003d diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" * Updates the diet list.","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" * @param data The current data containing the diet list.","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" public String[] execute(Data data) {","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" DietList diets \u003d data.getDiets();","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" diets.add(this.diet);","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" int size \u003d diets.size();","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" String countMessage;","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" if (size \u003e 1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" countMessage \u003d String.format(Message.MESSAGE_DIET_COUNT, size);","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" countMessage \u003d String.format(Message.MESSAGE_DIET_FIRST, size);","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" return new String[]{Message.MESSAGE_DIET_ADDED, this.diet.toString(), countMessage};","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":44}},{"path":"src/main/java/athleticli/commands/diet/DeleteDietCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.DietList;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" * Executes the add diet commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"public class DeleteDietCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" private final int index;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" * Constructor for AddDietCommand.","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" * @param index Diet to be added.","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" public DeleteDietCommand(int index) {","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" this.index \u003d index;","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" * Updates the diet list.","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" * @param data The current data containing the diet list.","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" DietList dietList \u003d data.getDiets();","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" int size \u003d dietList.size();","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" if (index \u003e size || index \u003c 1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_INVALID_DIET_INDEX);","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" Diet oldDiet \u003d dietList.get(index - 1);","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" dietList.remove(index - 1);","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" return new String[]{Message.MESSAGE_DIET_DELETED, oldDiet.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" String.format(Message.MESSAGE_DIET_COUNT, size - 1)};","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":42}},{"path":"src/main/java/athleticli/commands/diet/DeleteDietGoalCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoal;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoalList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"import java.util.logging.ConsoleHandler;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":"import java.util.logging.LogManager;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"/**","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" * Executes the delete-diet-goal commands provided by the user.","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":"public class DeleteDietGoalCommand extends Command {","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" private static final Logger logger \u003d Logger.getLogger(DeleteDietGoalCommand.class.getName());","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":" private final int deleteIndex;","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" * This is a constructor to set up the delete diet goal command.","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":" * @param deleteIndex Index of the diet goal to be deleted in the users\u0027 perspective.","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":" public DeleteDietGoalCommand(int deleteIndex) {","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" //deleteIndex that is less than or equal to zero would result in exception","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" assert deleteIndex \u003e\u003d 1: \"\u0027deleteIndex\u0027 should has the value of 1 minimally.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" this.deleteIndex \u003d deleteIndex;","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" LogManager.getLogManager().reset();","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" logger.addHandler(new FileHandler(\"%t/athleticli-log.txt\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" } catch(IOException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":" logger.addHandler(new ConsoleHandler());","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" * Deletes a goal from the Diet Goal List.","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":" * @param data The current data containing the different nutrient goals.","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" logger.log(Level.FINE, \"Executing delete command for diet goals\");","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" DietGoalList dietGoals \u003d data.getDietGoals();","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" if (dietGoals.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_EMPTY_DIETGOALLIST);","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" DietGoal dietGoalRemoved \u003d dietGoals.get(deleteIndex - 1);","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"yicheng-toh"},"content":" dietGoals.remove(deleteIndex - 1);","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" logger.log(Level.FINE, String.format(\"Diet goals %s has been successfully removed\",","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":" dietGoalRemoved.getNutrients()));","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":" return new String[]{Message.MESSAGE_DIETGOAL_DELETE_HEADER,","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" dietGoalRemoved.toString()};","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"yicheng-toh"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(String.format(Message.MESSAGE_DIETGOAL_OUT_OF_BOUND, dietGoals.size()));","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"yicheng-toh":65}},{"path":"src/main/java/athleticli/commands/diet/EditDietGoalCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoal;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoalList;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"import java.util.HashSet;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"import java.util.Set;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":" * Executes the edit-diet-goal commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"public class EditDietGoalCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" private final ArrayList\u003cDietGoal\u003e userUpdatedDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" * This is a constructor to set up the edit diet goal command.","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":" * @param dietGoals This is a list consisting of updated existing diet goals.","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":" * to be added to the current goal list.","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" public EditDietGoalCommand(ArrayList\u003cDietGoal\u003e dietGoals) {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":" userUpdatedDietGoals \u003d dietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" * Updates the Diet Goal List.","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" * @param data The current data containing the different nutrient goals.","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":" DietGoalList currentDietGoals \u003d data.getDietGoals();","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" Set\u003cString\u003e currentDietGoalsNutrients \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" // Populate the set with current diet goal nutrients","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" for (DietGoal dietGoal : currentDietGoals) {","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" currentDietGoalsNutrients.add(dietGoal.getNutrients());","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" // Check if user edited diet goals is in records previously","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" boolean isNutrientGoalInCurrentDietGoalList;","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" for (DietGoal userDietGoal : userUpdatedDietGoals) {","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" String userNewNutrient \u003d userDietGoal.getNutrients();","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" isNutrientGoalInCurrentDietGoalList \u003d currentDietGoalsNutrients.contains(userNewNutrient);","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":" if (!isNutrientGoalInCurrentDietGoalList) {","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(String.format(Message.MESSAGE_DIETGOAL_NOT_EXISTED, userNewNutrient));","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" // Edit updated goals to current diet goals","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":" int newTargetValue;","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":" for (DietGoal userUpdatedDietGoal : userUpdatedDietGoals) {","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" for (DietGoal currentDietGoal : currentDietGoals) {","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"yicheng-toh"},"content":" if (!userUpdatedDietGoal.getNutrients().equals(currentDietGoal.getNutrients())) {","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"yicheng-toh"},"content":" continue;","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"yicheng-toh"},"content":" //update new target value to the current goal","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"yicheng-toh"},"content":" newTargetValue \u003d userUpdatedDietGoal.getTargetValue();","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"yicheng-toh"},"content":" currentDietGoal.setTargetValue(newTargetValue);","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"yicheng-toh"},"content":" int dietGoalNum \u003d currentDietGoals.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"yicheng-toh"},"content":" return new String[]{Message.MESSAGE_DIETGOAL_LIST_HEADER, currentDietGoals.toString(),","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"yicheng-toh"},"content":" String.format(Message.MESSAGE_DIETGOAL_COUNT, dietGoalNum)};","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":3,"yicheng-toh":70}},{"path":"src/main/java/athleticli/commands/diet/ListDietCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.DietList;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":" * Executes the list diet commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":"public class ListDietCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" * Constructor for ListDietCommand.","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" public ListDietCommand() {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" * Updates the diet list.","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" * @param data The current data containing the diet list.","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" public String[] execute(Data data) {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" DietList dietList \u003d data.getDiets();","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" int size \u003d dietList.size();","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" return new String[]{Message.MESSAGE_DIET_LIST, dietList.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" String.format(Message.MESSAGE_DIET_COUNT, size)};","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":31}},{"path":"src/main/java/athleticli/commands/diet/ListDietGoalCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoalList;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":" * Executes the list diet goal commands provided by the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":"public class ListDietGoalCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":" * Constructor for ListDietGoalCommand.","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":" public ListDietGoalCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":" * Iterate and returns the string representation for each goal.","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" * @param data The current data containing the diet goal list.","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":" public String[] execute(Data data) {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" DietGoalList dietGoalList \u003d data.getDietGoals();","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" int dietGoalNum \u003d dietGoalList.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":" if (dietGoalNum \u003d\u003d 0) {","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" return new String[]{Message.MESSAGE_DIETGOAL_NONE};","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" return new String[]{Message.MESSAGE_DIETGOAL_LIST_HEADER, dietGoalList.toString(),","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" String.format(Message.MESSAGE_DIETGOAL_COUNT, dietGoalNum)};","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"yicheng-toh":34}},{"path":"src/main/java/athleticli/commands/diet/SetDietGoalCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoal;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoalList;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":"import java.util.HashSet;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"import java.util.Set;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":" * Executes the set-diet-goal commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":"public class SetDietGoalCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" private final ArrayList\u003cDietGoal\u003e userNewDietGoals;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" * This is a constructor to set up the set diet goal command","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":" * @param dietGoals This is a list consisting of new diet goals","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":" * to be added to the current goal list.","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" public SetDietGoalCommand(ArrayList\u003cDietGoal\u003e dietGoals) {","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":" userNewDietGoals \u003d dietGoals;","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" * Updates the Diet Goal list.","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" * @param data The current data containing the different nutrients goal value.","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":" DietGoalList currentDietGoals \u003d data.getDietGoals();","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" Set\u003cString\u003e currentDietGoalsNutrients \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" // Populate the set with current diet goal nutrients","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" for (DietGoal dietGoal : currentDietGoals) {","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" currentDietGoalsNutrients.add(dietGoal.getNutrients());","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" // Check against user new diet goals","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" for (DietGoal userDietGoal : userNewDietGoals) {","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" String userNewNutrient \u003d userDietGoal.getNutrients();","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" if (currentDietGoalsNutrients.contains(userNewNutrient)) {","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(String.format(Message.MESSAGE_DIETGOAL_ALREADY_EXISTED, userNewNutrient));","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" // Add new diet goals to current diet goals","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"yicheng-toh"},"content":" currentDietGoals.addAll(userNewDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" int dietGoalNum \u003d currentDietGoals.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":" return new String[]{Message.MESSAGE_DIETGOAL_LIST_HEADER, currentDietGoals.toString(),","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":" String.format(Message.MESSAGE_DIETGOAL_COUNT, dietGoalNum)};","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":3,"yicheng-toh":59}},{"path":"src/main/java/athleticli/commands/sleep/AddSleepCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.Sleep;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.SleepList;","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":" * Executes the add sleep commands provided by the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":"public class AddSleepCommand extends Command {","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" * Constructor for AddSleepCommand.","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" * @param from Start time of the sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" * @param to End time of the sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" public AddSleepCommand(LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" this.from \u003d from;","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" this.to \u003d to;","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":" * Adds the sleep record to the sleep list.","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"DaDevChia"},"content":" * @param data The current data containing the sleep list.","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"DaDevChia"},"content":" public String[] execute(Data data) {","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":" SleepList sleepList \u003d data.getSleeps();","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"DaDevChia"},"content":" Sleep newSleep \u003d new Sleep(from, to);","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(newSleep);","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"DaDevChia"},"content":" String returnMessage2 \u003d String.format(Message.MESSAGE_SLEEP_ADD_RETURN_2, sleepList.size());","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"DaDevChia"},"content":" return new String[] {","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"DaDevChia"},"content":" Message.MESSAGE_SLEEP_ADD_RETURN_1,","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"DaDevChia"},"content":" newSleep.toString(),","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"DaDevChia"},"content":" returnMessage2","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"skylee03":3,"DaDevChia":42}},{"path":"src/main/java/athleticli/commands/sleep/DeleteSleepCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.Sleep;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.SleepList;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":" * Executes the delete sleep commands provided by the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":"public class DeleteSleepCommand extends Command {","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":" private int index;","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" * Constructor for DeleteSleepCommand.","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" * @param index Index of the sleep to be deleted.","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" public DeleteSleepCommand(int index) {","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" this.index \u003d index;","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" * Deletes the sleep record at the specified index.","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":" * @param data The current data containing the sleep list.","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"DaDevChia"},"content":" SleepList sleepList \u003d data.getSleeps();","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":" //accessIndex is the index of the sleep in the list accounting for zero-indexing","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"DaDevChia"},"content":" int accessIndex \u003d index - 1; ","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":" if (accessIndex \u003c 0 || accessIndex \u003e\u003d sleepList.size()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_SLEEP_EDIT_INDEX_OOBE);","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"DaDevChia"},"content":" Sleep oldSleep \u003d sleepList.get(accessIndex);","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"DaDevChia"},"content":" sleepList.remove(accessIndex);","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"DaDevChia"},"content":" ","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"DaDevChia"},"content":" String returnMessage \u003d String.format(Message.MESSAGE_SLEEP_DELETE_RETURN, index, oldSleep.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"DaDevChia"},"content":" return new String[] {","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":" returnMessage","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":47,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":48,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-12"},{"lineNumber":49,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"skylee03":3,"DaDevChia":47}},{"path":"src/main/java/athleticli/commands/sleep/EditSleepCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.Sleep;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.SleepList;","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":" * Executes the edit sleep commands provided by the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":"public class EditSleepCommand extends Command {","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" private int index;","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" * Constructor for EditSleepCommand.","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" * @param index Index of the sleep to be edited.","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" * @param from New start time of the sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" * @param to New end time of the sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":" public EditSleepCommand(int index, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":" this.index \u003d index;","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":" this.from \u003d from;","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":" this.to \u003d to;","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":" ","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"DaDevChia"},"content":" * Edits the sleep record at the specified index.","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":" * @param data The current data containing the sleep list.","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"DaDevChia"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"DaDevChia"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"DaDevChia"},"content":" SleepList sleepList \u003d data.getSleeps();","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"DaDevChia"},"content":" //accessIndex is the index of the sleep in the list accounting for zero-indexing","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"DaDevChia"},"content":" int accessIndex \u003d index - 1;","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":" if (accessIndex \u003c 0 || accessIndex \u003e\u003d sleepList.size()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_SLEEP_EDIT_INDEX_OOBE);","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"DaDevChia"},"content":" Sleep oldSleep \u003d sleepList.get(accessIndex);","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"DaDevChia"},"content":" Sleep newSleep \u003d new Sleep(from, to);","lastModifiedDate":"2023-10-12"},{"lineNumber":48,"author":{"gitId":"DaDevChia"},"content":" sleepList.set(accessIndex, newSleep);","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"DaDevChia"},"content":" String returnMessage \u003d String.format(Message.MESSAGE_SLEEP_EDIT_RETURN, index);","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"DaDevChia"},"content":" ","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"DaDevChia"},"content":" return new String[] {","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"DaDevChia"},"content":" returnMessage,","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"DaDevChia"},"content":" \"original: \" + oldSleep.toString(),","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"DaDevChia"},"content":" \"to new: \" + newSleep.toString(),","lastModifiedDate":"2023-10-12"},{"lineNumber":56,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":58,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":59,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":60,"author":{"gitId":"DaDevChia"},"content":" ","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-12"},{"lineNumber":62,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"skylee03":3,"DaDevChia":60}},{"path":"src/main/java/athleticli/commands/sleep/ListSleepCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.SleepList;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"public class ListSleepCommand extends Command {","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":" * Lists all the sleep records in the sleep list.","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":" * @param data The current data containing the sleep list.","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":" public String[] execute (Data data) {","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" SleepList sleepList \u003d data.getSleeps();","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" if (sleepList.size() \u003d\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" return new String[] {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" Message.MESSAGE_SLEEP_LIST_EMPTY","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" return new String[] {","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" Message.MESSAGE_SLEEP_LIST,","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" sleepList.toString()","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":3,"DaDevChia":25}},{"path":"src/main/java/athleticli/commands/sleep/SetSleepGoalCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":" * To be implemented in future version of AthletiCLI.","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"public class SetSleepGoalCommand {","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":4,"DaDevChia":4}},{"path":"src/main/java/athleticli/commands/sleep/ViewSleepGoalCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":" * To be implemented in future version of AthletiCLI.","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"public class ViewSleepGoalCommand {","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"DaDevChia":8}},{"path":"src/main/java/athleticli/data/Data.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import athleticli.data.activity.ActivityGoalList;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import athleticli.data.activity.ActivityList;","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import athleticli.data.diet.DietGoalList;","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.DietList;","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"import athleticli.data.sleep.SleepGoalList;","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"import athleticli.data.sleep.SleepList;","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" * Defines the basic fields and methods of data.","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":"public class Data implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" private ActivityList activities;","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" private ActivityGoalList activityGoals;","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" private DietList diets;","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" private DietGoalList dietGoals;","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" private SleepList sleeps;","lastModifiedDate":"2023-10-08"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" private SleepGoalList sleepGoals;","lastModifiedDate":"2023-10-08"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" * Constructs an empty \u003ccode\u003eData\u003c/code\u003e object.","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" public Data() {","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" this.activities \u003d new ActivityList();","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" this.activityGoals \u003d new ActivityGoalList();","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" this.diets \u003d new DietList();","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" this.dietGoals \u003d new DietGoalList();","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" this.sleeps \u003d new SleepList();","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" this.sleepGoals \u003d new SleepGoalList();","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" this.dietGoals \u003d new DietGoalList();","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"DaDevChia"},"content":" * Get all the objects","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"DaDevChia"},"content":" public ActivityList getActivities() {","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"DaDevChia"},"content":" return activities;","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"DaDevChia"},"content":" public ActivityGoalList getActivityGoals() {","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":" return activityGoals;","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":47,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":48,"author":{"gitId":"DaDevChia"},"content":" public DietList getDiets() {","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"DaDevChia"},"content":" return diets;","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"DaDevChia"},"content":" public DietGoalList getDietGoals() {","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"DaDevChia"},"content":" return dietGoals;","lastModifiedDate":"2023-10-12"},{"lineNumber":54,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":56,"author":{"gitId":"DaDevChia"},"content":" public SleepList getSleeps() {","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"DaDevChia"},"content":" return sleeps;","lastModifiedDate":"2023-10-12"},{"lineNumber":58,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":59,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":60,"author":{"gitId":"DaDevChia"},"content":" public SleepGoalList getSleepGoals() {","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"DaDevChia"},"content":" return sleepGoals;","lastModifiedDate":"2023-10-12"},{"lineNumber":62,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":64,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":65,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"DaDevChia"},"content":" * Set all the objects","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"DaDevChia"},"content":" public void setActivities(ActivityList activities) {","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"DaDevChia"},"content":" this.activities \u003d activities;","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"DaDevChia"},"content":" public void setActivityGoals(ActivityGoalList activityGoals) {","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"DaDevChia"},"content":" this.activityGoals \u003d activityGoals;","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"DaDevChia"},"content":" public void setDiets(DietList diets) {","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"DaDevChia"},"content":" this.diets \u003d diets;","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"DaDevChia"},"content":" public void setDietGoals(DietGoalList dietGoals) {","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"DaDevChia"},"content":" this.dietGoals \u003d dietGoals;","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"DaDevChia"},"content":" public void setSleeps(SleepList sleeps) {","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"DaDevChia"},"content":" this.sleeps \u003d sleeps;","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"DaDevChia"},"content":" public void setSleepGoals(SleepGoalList sleepGoals) {","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"DaDevChia"},"content":" this.sleepGoals \u003d sleepGoals;","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"DaDevChia"},"content":" ","lastModifiedDate":"2023-10-12"},{"lineNumber":92,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":31,"DaDevChia":57,"yicheng-toh":1,"nihalzp":3}},{"path":"src/main/java/athleticli/data/activity/Activity.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import java.util.Locale;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-10"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":" * Represents a physical activity consisting of basic sports data.","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-10"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"public class Activity implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" public static final DateTimeFormatter DATE_TIME_FORMATTER \u003d DateTimeFormatter.ofPattern(\"\\\"MMMM d, \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" \"yyyy \u0027at\u0027 h:mm a\\\"\", Locale.ENGLISH);","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final int columnWidth \u003d 40;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private String description;","lastModifiedDate":"2023-10-10"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private final String caption;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private final int movingTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" private final int distance;","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" private int calories;","lastModifiedDate":"2023-10-10"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" private final LocalDateTime startDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-10"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" * Generates a new general sports activity with some basic stats.","lastModifiedDate":"2023-10-10"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" * By default, calories is 0, i.e., not tracked.","lastModifiedDate":"2023-10-10"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" * @param movingTime duration of the activity in minutes","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" * @param distance distance covered in meters","lastModifiedDate":"2023-10-10"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" * @param startDateTime start date and time of the activity","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" * @param caption a caption of the activity chosen by the user (e.g., \"Morning Run\")","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" public Activity(String caption, int movingTime, int distance, LocalDateTime startDateTime) {","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" this.movingTime \u003d movingTime;","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" this.distance \u003d distance;","lastModifiedDate":"2023-10-10"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" this.startDateTime \u003d startDateTime;","lastModifiedDate":"2023-10-10"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" this.caption \u003d caption;","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" public int getMovingTime() {","lastModifiedDate":"2023-10-10"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" return movingTime;","lastModifiedDate":"2023-10-10"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" public int getDistance() {","lastModifiedDate":"2023-10-10"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" return distance;","lastModifiedDate":"2023-10-10"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" public String getCaption() {","lastModifiedDate":"2023-10-12"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" return caption;","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" public LocalDateTime getStartDateTime() {","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" return startDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" public int getCalories() {","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" return this.calories;","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" public int getColumnWidth() {","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" return columnWidth;","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" * Returns a single line summary of the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the activity","lastModifiedDate":"2023-10-13"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" String movingTimeOutput \u003d generateMovingTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" String distanceOutput \u003d generateDistanceStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" String startDateTimeOutput \u003d generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" return \"[Activity] \" + caption + \" | \" + distanceOutput + \" | \" + movingTimeOutput + \" | \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" startDateTimeOutput;","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":" public String generateDistanceStringOutput() {","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" double distanceInKm \u003d distance / 1000.0;","lastModifiedDate":"2023-10-13"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":" return \"Distance: \" + String.format(\"%.2f\", distanceInKm).replace(\",\", \".\")","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":" + \" km\";","lastModifiedDate":"2023-10-13"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":" public String generateMovingTimeStringOutput() {","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":" int movingTimeHours \u003d movingTime / 60;","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":" int movingTimeMinutes \u003d movingTime % 60;","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":" return \"Time: \" + movingTimeHours + \"h \" + movingTimeMinutes + \"m\";","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"AlWo223"},"content":" public String generateStartDateTimeStringOutput() {","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"AlWo223"},"content":" return startDateTime.format(DATE_TIME_FORMATTER).replace(\"\\\"\", \"\");","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"AlWo223"},"content":" * Returns a detailed summary of the activity.","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"AlWo223"},"content":" * @return a multiline string representation of the activity","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"AlWo223"},"content":" public String toDetailedString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"AlWo223"},"content":" String startDateTimeOutput \u003d generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"AlWo223"},"content":" String movingTimeOutput \u003d generateMovingTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"AlWo223"},"content":" String distanceOutput \u003d generateDistanceStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"AlWo223"},"content":" String header \u003d \"[Activity - \" + this.getCaption() + \" - \" + startDateTimeOutput + \"]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"AlWo223"},"content":" String firstRow \u003d formatTwoColumns(\"\\tDistance: \" + distanceOutput, \"Moving Time: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"AlWo223"},"content":" movingTimeOutput, columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"AlWo223"},"content":" String secondRow \u003d formatTwoColumns(\"\\tCalories: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"AlWo223"},"content":" this.getCalories() + \" kcal\", \"...\", columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"AlWo223"},"content":" return String.join(System.lineSeparator(), header, firstRow, secondRow);","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"AlWo223"},"content":" public String formatTwoColumns(String left, String right, int columnWidth) {","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"AlWo223"},"content":" return String.format(\"%-\" + columnWidth + \"s%s\", left, right);","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":114,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":115,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":7,"AlWo223":108}},{"path":"src/main/java/athleticli/data/activity/ActivityGoal.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"public class ActivityGoal implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":6}},{"path":"src/main/java/athleticli/data/activity/ActivityGoalList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"public class ActivityGoalList extends ArrayList\u003cActivityGoal\u003e implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":7}},{"path":"src/main/java/athleticli/data/activity/ActivityList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"public class ActivityList extends ArrayList\u003cActivity\u003e implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":7}},{"path":"src/main/java/athleticli/data/activity/Cycle.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":" * Represents a cycling activity consisting of relevant evaluation data.","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"public class Cycle extends Activity implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":" private final int elevationGain;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" private final double averageSpeed;","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" * Generates a new cycling activity with cycling specific stats.","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" * By default, calories is 0, i.e., not tracked.","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" * averageSpeed is calculated automatically based on the distance and movingTime.","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" * @param movingTime duration of the activity in minutes","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" * @param distance distance covered in meters","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" * @param startDateTime start date and time of the activity","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" * @param caption a caption of the activity chosen by the user (e.g., \"Morning Run\")","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" * @param elevationGain elevation gain in meters","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" public Cycle(String caption, int movingTime, int distance, LocalDateTime startDateTime, int elevationGain) {","lastModifiedDate":"2023-10-11"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" super(caption, movingTime, distance, startDateTime);","lastModifiedDate":"2023-10-11"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" this.elevationGain \u003d elevationGain;","lastModifiedDate":"2023-10-11"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" this.averageSpeed \u003d this.calculateAverageSpeed();","lastModifiedDate":"2023-10-11"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" * Calculates the average speed of the cycle in km/h.","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" * @return average speed of the cycle in km/h","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" public double calculateAverageSpeed() {","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" double dist \u003d (double) this.getDistance();","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" double time \u003d (double) this.getMovingTime();","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" return (dist/1000) / (time/60);","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" * Returns a single line summary of the cycling activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the cycle","lastModifiedDate":"2023-10-13"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" String result \u003d super.toString();","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"[Activity]\", \"[Cycle]\");","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" String speedOutput \u003d String.format(\"%.2f\", this.averageSpeed).replace(\",\", \".\") + \" km/h\";","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"Time: \", \"Speed: \" + speedOutput + \" | Time: \");","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" return result;","lastModifiedDate":"2023-10-13"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" * Returns a detailed summary of the cycle.","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" * @return a multiline string representation of the cycle","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" public String toDetailedString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" String startDateTimeOutput \u003d generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" String movingTimeOutput \u003d generateMovingTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" String distanceOutput \u003d generateDistanceStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" String speedOutput \u003d this.averageSpeed + \" km/h\";","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" int columnWidth \u003d getColumnWidth();","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" String header \u003d \"[Cycle - \" + this.getCaption() + \" - \" + startDateTimeOutput + \"]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" String firstRow \u003d formatTwoColumns(\"\\tDistance: \" + distanceOutput, \"Elevation Gain: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" elevationGain + \" m\", columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" String secondRow \u003d formatTwoColumns(\"\\tMoving Time: \" + movingTimeOutput, \"Avg Speed: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" speedOutput, columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" String thirdRow \u003d formatTwoColumns(\"\\tCalories: \" + this.getCalories() + \" kcal\", \"Max Speed: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" \"tbd\", columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" return String.join(System.lineSeparator(), header, firstRow, secondRow, thirdRow);","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"skylee03":2,"AlWo223":72}},{"path":"src/main/java/athleticli/data/activity/Run.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":" * Represents a running activity consisting of relevant evaluation data.","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"public class Run extends Activity implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":" private final int elevationGain;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":" private final double averagePace;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" private final int steps;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" * Generates a new running activity with running specific stats.","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" * By default, calories is 0, i.e., not tracked.","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" * averageSpeed is calculated automatically based on the distance and movingTime.","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" * @param movingTime duration of the activity in minutes","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" * @param distance distance covered in meters","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" * @param startDateTime start date and time of the activity","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" * @param caption a caption of the activity chosen by the user (e.g., \"Morning Run\")","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" * @param elevationGain elevation gain in meters","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" public Run(String caption, int movingTime, int distance, LocalDateTime startDateTime, int elevationGain) {","lastModifiedDate":"2023-10-11"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" super(caption, movingTime, distance, startDateTime);","lastModifiedDate":"2023-10-11"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" this.elevationGain \u003d elevationGain;","lastModifiedDate":"2023-10-11"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" this.averagePace \u003d this.calculateAveragePace();","lastModifiedDate":"2023-10-11"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" this.steps \u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" * Calculates the average pace of the run in minutes per km.","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" * @return average pace of the run in minutes per km","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" public double calculateAveragePace() {","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" double time \u003d (double) this.getMovingTime();","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" double distance \u003d (double) this.getDistance() / 1000;","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" return time / distance;","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" * Converts the average pace of the run to the user-friendly format mm:ss.","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" * @return average pace of run in mm:ss format","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" public String convertAveragePaceToString() {","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" int totalSeconds \u003d (int) Math.round(this.averagePace*60);","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" int minutes \u003d totalSeconds / 60;","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" int seconds \u003d totalSeconds % 60;","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" return String.format(\"%d:%02d\", minutes, seconds);","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" * Returns a single line summary of the running activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the run","lastModifiedDate":"2023-10-13"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" String result \u003d super.toString();","lastModifiedDate":"2023-10-13"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"[Activity]\", \"[Run]\");","lastModifiedDate":"2023-10-13"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" String paceOutput \u003d this.convertAveragePaceToString() + \" /km\";","lastModifiedDate":"2023-10-13"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"Time: \", \"Pace: \" + paceOutput + \" | Time: \");","lastModifiedDate":"2023-10-13"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" return result;","lastModifiedDate":"2023-10-13"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" * Returns a detailed summary of the run.","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" * @return a multiline string representation of the run","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" public String toDetailedString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" String startDateTimeOutput \u003d generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" String movingTimeOutput \u003d generateMovingTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" String distanceOutput \u003d generateDistanceStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" String paceOutput \u003d this.convertAveragePaceToString() + \" /km\";","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" int columnWidth \u003d getColumnWidth();","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":" String header \u003d \"[Run - \" + this.getCaption() + \" - \" + startDateTimeOutput + \"]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" String firstRow \u003d formatTwoColumns(\"\\tDistance: \" + distanceOutput, \"Avg Pace: \" + paceOutput,","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":" columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":" String secondRow \u003d formatTwoColumns(\"\\tMoving Time: \" + movingTimeOutput, \"Elevation Gain: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" elevationGain + \" m\", columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":" String thirdRow \u003d formatTwoColumns(\"\\tCalories: \" + this.getCalories() + \" kcal\", \"Steps: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":" this.steps, columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":" return String.join(System.lineSeparator(), header, firstRow, secondRow, thirdRow);","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"skylee03":2,"AlWo223":86}},{"path":"src/main/java/athleticli/data/activity/Swim.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"public class Swim extends Activity implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":" private final int laps;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":" private final SwimmingStyle style;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":" private final int averageLapTime;","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":" public enum SwimmingStyle {","lastModifiedDate":"2023-10-11"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" BUTTERFLY,","lastModifiedDate":"2023-10-11"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" BACKSTROKE,","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" BREASTSTROKE,","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" FREESTYLE","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" public Swim(String caption, int movingTime, int distance, LocalDateTime startDateTime, SwimmingStyle style) {","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" super(caption, movingTime, distance, startDateTime);","lastModifiedDate":"2023-10-11"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" this.laps \u003d this.calculateLaps();","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" this.style \u003d style;","lastModifiedDate":"2023-10-11"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" this.averageLapTime \u003d this.calculateAverageLapTime();","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" * Calculates the average lap time in seconds.","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" * @return average lap time in seconds","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" public int calculateAverageLapTime() {","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" int laps \u003d this.calculateLaps();","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" return this.getMovingTime() * 60 / laps;","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" public int calculateLaps() {","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" return this.getDistance() / 50;","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" public int getLaps() {","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" return laps;","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" public int getAverageLapTime() {","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" return averageLapTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" String result \u003d super.toString();","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"[Activity]\", \"[Swim]\");","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" String averageLapTimeOutput \u003d this.averageLapTime + \"s\";","lastModifiedDate":"2023-10-13"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"Time: \", \"Avg Lap Time: \" + averageLapTimeOutput + \" | Time: \");","lastModifiedDate":"2023-10-13"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" return result;","lastModifiedDate":"2023-10-13"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" * Returns a detailed summary of the swim.","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" * @return a multiline string representation of the swim","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" public String toDetailedString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" String startDateTimeOutput \u003d generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" String movingTimeOutput \u003d generateMovingTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" String distanceOutput \u003d generateDistanceStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" int columnWidth \u003d getColumnWidth();","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" String header \u003d \"[Swim - \" + this.getCaption() + \" - \" + startDateTimeOutput + \"]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" String firstRow \u003d formatTwoColumns(\"\\tDistance: \" + distanceOutput, \"Moving Time: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" movingTimeOutput, columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" String secondRow \u003d formatTwoColumns(\"\\tAvg Lap Time: \" + averageLapTime + \" s\", \"Calories: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" this.getCalories() + \" kcal\", columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" return String.join(System.lineSeparator(), header, firstRow, secondRow);","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"skylee03":2,"AlWo223":72}},{"path":"src/main/java/athleticli/data/diet/Diet.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.diet;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":" * Defines the basic fields and methods of a diet.","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"public class Diet implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":" private int calories;","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":" private int protein;","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" private int carb;","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" private int fat;","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" * Constructs a \u003ccode\u003eDiet\u003c/code\u003e object.","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" * @param calories The caloric value of the diet in cal.","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" * @param protein Protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" * @param carb Carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" * @param fat Fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" public Diet(int calories, int protein, int carb, int fat) {","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" this.calories \u003d calories;","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" this.protein \u003d protein;","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" this.carb \u003d carb;","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" this.fat \u003d fat;","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" * Returns the caloric value of the diet in cal.","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" * @return The caloric value of the diet in cal.","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" public int getCalories() {","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" return calories;","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" * Sets the caloric value of the diet in cal.","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" * @param calories The caloric value of the diet in cal.","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" public void setCalories(int calories) {","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" this.calories \u003d calories;","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" * Returns the protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":" * @return Protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" public int getProtein() {","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" return protein;","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" * Sets the protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" * @param protein Protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":" public void setProtein(int protein) {","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" this.protein \u003d protein;","lastModifiedDate":"2023-10-14"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":" * Returns the carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":" * @return Carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":" public int getCarb() {","lastModifiedDate":"2023-10-14"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":" return carb;","lastModifiedDate":"2023-10-14"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":" * Sets the carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":76,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":" * @param carb Carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":78,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":79,"author":{"gitId":"nihalzp"},"content":" public void setCarb(int carb) {","lastModifiedDate":"2023-10-14"},{"lineNumber":80,"author":{"gitId":"nihalzp"},"content":" this.carb \u003d carb;","lastModifiedDate":"2023-10-14"},{"lineNumber":81,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":82,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":83,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":84,"author":{"gitId":"nihalzp"},"content":" * Returns the fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":85,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":86,"author":{"gitId":"nihalzp"},"content":" * @return Fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":87,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":88,"author":{"gitId":"nihalzp"},"content":" public int getFat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":89,"author":{"gitId":"nihalzp"},"content":" return fat;","lastModifiedDate":"2023-10-14"},{"lineNumber":90,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":91,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":92,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":93,"author":{"gitId":"nihalzp"},"content":" * Sets the fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":94,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":" * @param fat Fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":97,"author":{"gitId":"nihalzp"},"content":" public void setFat(int fat) {","lastModifiedDate":"2023-10-14"},{"lineNumber":98,"author":{"gitId":"nihalzp"},"content":" this.fat \u003d fat;","lastModifiedDate":"2023-10-14"},{"lineNumber":99,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":100,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":101,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":102,"author":{"gitId":"nihalzp"},"content":" * Returns a string representation of the diet.","lastModifiedDate":"2023-10-14"},{"lineNumber":103,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":104,"author":{"gitId":"nihalzp"},"content":" * @return A string representation of the diet.","lastModifiedDate":"2023-10-14"},{"lineNumber":105,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":106,"author":{"gitId":"nihalzp"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":107,"author":{"gitId":"nihalzp"},"content":" public String toString() {","lastModifiedDate":"2023-10-14"},{"lineNumber":108,"author":{"gitId":"nihalzp"},"content":" return \"Calories: \" + calories + \" Protein: \" + protein + \" Carb: \" + carb + \" Fat: \" + fat;","lastModifiedDate":"2023-10-14"},{"lineNumber":109,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":110,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":6,"nihalzp":104}},{"path":"src/main/java/athleticli/data/diet/DietGoal.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.diet;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":" * Represents a diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"public class DietGoal implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":" private String nutrients;","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":" private int targetValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" private int currentValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" private boolean isGoalAchieved;","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" * Constructs a diet goal with no current value.","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" * @param nutrients The nutrients of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" * @param targetValue The target value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" public DietGoal(String nutrients, int targetValue) {","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" this.nutrients \u003d nutrients;","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" this.targetValue \u003d targetValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" currentValue \u003d 0;","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" isGoalAchieved \u003d false;","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" * Constructs a diet goal with a current value.","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" * @param nutrients The nutrients of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" * @param targetValue The target value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" * @param currentValue The current value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" public DietGoal(String nutrients, int targetValue, int currentValue) {","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" this.nutrients \u003d nutrients;","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" this.targetValue \u003d targetValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" this.currentValue \u003d currentValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" isGoalAchieved \u003d currentValue \u003e\u003d targetValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" * Returns the nutrients of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" * @return The nutrients of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":" public String getNutrients() {","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" return nutrients;","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":" * Sets the nutrients of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" * @param nutrients The nutrients of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":" public void setNutrients(String nutrients) {","lastModifiedDate":"2023-10-13"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" this.nutrients \u003d nutrients;","lastModifiedDate":"2023-10-13"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" * Returns the target value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" * @return The target value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":" public int getTargetValue() {","lastModifiedDate":"2023-10-13"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" return targetValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":" * Sets the target value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":" * @param targetValue The target value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":" public void setTargetValue(int targetValue) {","lastModifiedDate":"2023-10-13"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":" this.targetValue \u003d targetValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":" setIsGoalAchieved(currentValue \u003e\u003d targetValue);","lastModifiedDate":"2023-10-13"},{"lineNumber":76,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":78,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":79,"author":{"gitId":"nihalzp"},"content":" * Returns the current value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":80,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":81,"author":{"gitId":"nihalzp"},"content":" * @return The current value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":82,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":83,"author":{"gitId":"nihalzp"},"content":" public int getCurrentValue() {","lastModifiedDate":"2023-10-13"},{"lineNumber":84,"author":{"gitId":"nihalzp"},"content":" return currentValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":85,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":86,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":87,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":88,"author":{"gitId":"nihalzp"},"content":" * Sets the current value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":89,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":90,"author":{"gitId":"nihalzp"},"content":" * @param currentValue The current value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":91,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":92,"author":{"gitId":"nihalzp"},"content":" public void setCurrentValue(int currentValue) {","lastModifiedDate":"2023-10-13"},{"lineNumber":93,"author":{"gitId":"nihalzp"},"content":" this.currentValue \u003d currentValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":94,"author":{"gitId":"nihalzp"},"content":" setIsGoalAchieved(currentValue \u003e\u003d targetValue);","lastModifiedDate":"2023-10-14"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":97,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":98,"author":{"gitId":"nihalzp"},"content":" * Returns whether the diet goal is achieved.","lastModifiedDate":"2023-10-14"},{"lineNumber":99,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":100,"author":{"gitId":"nihalzp"},"content":" * @return Whether the diet goal is achieved.","lastModifiedDate":"2023-10-14"},{"lineNumber":101,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":102,"author":{"gitId":"nihalzp"},"content":" public boolean getIsGoalAchieved() {","lastModifiedDate":"2023-10-13"},{"lineNumber":103,"author":{"gitId":"nihalzp"},"content":" return isGoalAchieved;","lastModifiedDate":"2023-10-13"},{"lineNumber":104,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":105,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":106,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":107,"author":{"gitId":"nihalzp"},"content":" * Sets whether the diet goal is achieved.","lastModifiedDate":"2023-10-14"},{"lineNumber":108,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":109,"author":{"gitId":"nihalzp"},"content":" * @param isGoalAchieved Whether the diet goal is achieved.","lastModifiedDate":"2023-10-14"},{"lineNumber":110,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":111,"author":{"gitId":"nihalzp"},"content":" private void setIsGoalAchieved(boolean isGoalAchieved) {","lastModifiedDate":"2023-10-13"},{"lineNumber":112,"author":{"gitId":"nihalzp"},"content":" this.isGoalAchieved \u003d isGoalAchieved;","lastModifiedDate":"2023-10-13"},{"lineNumber":113,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":114,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":115,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":116,"author":{"gitId":"nihalzp"},"content":" * Returns the string representation of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":117,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":118,"author":{"gitId":"nihalzp"},"content":" * @return The string representation of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":119,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":120,"author":{"gitId":"nihalzp"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":121,"author":{"gitId":"nihalzp"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":122,"author":{"gitId":"nihalzp"},"content":" return nutrients + \" intake progress: (\" + currentValue + \"/\" + targetValue + \")\\n\";","lastModifiedDate":"2023-10-14"},{"lineNumber":123,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":124,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":6,"nihalzp":118}},{"path":"src/main/java/athleticli/data/diet/DietGoalList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.diet;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":" * Represents a list of diet goals.","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"public class DietGoalList extends ArrayList\u003cDietGoal\u003e implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" * Constructs a diet goal list.","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" public DietGoalList() {","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" super();","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" * Returns a string representation of the diet goal list.","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" * @return A string representation of the diet goal list.","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c size(); i++) {","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" result.append(\"\\t\").append(i + 1).append(\". \").append(get(i).toString());","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" if (i !\u003d size() - 1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" result.append(\"\\n\");","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" return result.toString();","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":7,"yicheng-toh":1,"nihalzp":25}},{"path":"src/main/java/athleticli/data/diet/DietList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.diet;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":" * Represents a list of diets.","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"public class DietList extends ArrayList\u003cDiet\u003e implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" * Constructs a diet list.","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" public DietList() {","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" super();","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" * Returns a string representation of the diet list.","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" * @return A string representation of the diet list.","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" public String toString() {","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c size(); i++) {","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" result.append(i + 1).append(\". \").append(get(i).toString());","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" if (i !\u003d size() - 1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" result.append(\"\\n\");","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" return result.toString();","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":7,"nihalzp":26}},{"path":"src/main/java/athleticli/data/sleep/Sleep.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.sleep;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":" * Represents a sleep record.","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"public class Sleep implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":" private static final DateTimeFormatter DATE_TIME_FORMATTER \u003d DateTimeFormatter.ofPattern(\"dd-MM-YYYY HH:mm\");","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" * Constructor for Sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" * @param from Start time of the sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" * @param to End time of the sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" public Sleep(LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" this.from \u003d from;","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" this.to \u003d to;","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":" * toString method for Sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"DaDevChia"},"content":" * @return String representation of the sleep record.","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":" public String toString() {","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"DaDevChia"},"content":" return \"sleep record from \" + from.format(DATE_TIME_FORMATTER) + \" to \" + to.format(DATE_TIME_FORMATTER);","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":4,"DaDevChia":32}},{"path":"src/main/java/athleticli/data/sleep/SleepGoal.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":" * To be implemented in future version of AthletiCLI.","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"package athleticli.data.sleep;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"public class SleepGoal implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":6,"DaDevChia":4}},{"path":"src/main/java/athleticli/data/sleep/SleepGoalList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":" * To be implemented in future version of AthletiCLI.","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"package athleticli.data.sleep;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"public class SleepGoalList extends ArrayList\u003cSleepGoal\u003e implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":7,"DaDevChia":3}},{"path":"src/main/java/athleticli/data/sleep/SleepList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.sleep;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":" * Represents a list of sleep records.","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"public class SleepList extends ArrayList\u003cSleep\u003e implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":" * toString method for SleepList.","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":" * @return String representation of the sleep list.","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":" public String toString() {","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" for (int i \u003d 0; i \u003c this.size(); i++) {","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" output.append((i + 1) + \". \" + this.get(i).toString() + \"\\n\");","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" return output.toString();","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":7,"DaDevChia":15}},{"path":"src/main/java/athleticli/exceptions/AthletiException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.exceptions;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":" * Represents the exceptions that need to be shown to the user.","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"public class AthletiException extends Exception {","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":" public AthletiException(String message) {","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":" super(message);","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":10}},{"path":"src/main/java/athleticli/storage/Config.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.storage;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":" * Defines string literals or configurations used for file storage.","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"public class Config {","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":" public static final String PATH_SAVE \u003d \"./data/athleticli.bin\";","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"skylee03":8}},{"path":"src/main/java/athleticli/storage/Storage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.storage;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.File;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import java.io.ObjectInputStream;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"import java.io.ObjectOutputStream;","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" * Defines the basic methods for file storage.","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":"public class Storage {","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" * Returns the data read from the file, or an empty \u003ccode\u003eData\u003c/code\u003e","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" * object if the file does not exist or cannot be parsed properly.","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" * @return The data read from the file, or an empty \u003ccode\u003eData\u003c/code\u003e object.","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" public static Data load() {","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" try (var fileInputStream \u003d new FileInputStream(Config.PATH_SAVE);","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" var objectInputStream \u003d new ObjectInputStream(fileInputStream)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" return (Data) objectInputStream.readObject();","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" return new Data();","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" * Saves the data into the file.","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" * @param data The data to be saved.","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" * @throws IOException","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" public static void save(Data data) throws IOException {","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" File file \u003d new File(Config.PATH_SAVE);","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" file.createNewFile();","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" var fileOutputStream \u003d new FileOutputStream(file, false);","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" var objectOutputStream \u003d new ObjectOutputStream(fileOutputStream);","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" objectOutputStream.writeObject(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"skylee03":47}},{"path":"src/main/java/athleticli/ui/CommandName.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.ui;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":" * Defines string literals for command names.","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"public class CommandName {","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":" public static final String COMMAND_BYE \u003d \"bye\";","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":" public static final String COMMAND_HELP \u003d \"help\";","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":" public static final String COMMAND_SAVE \u003d \"save\";","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":" public static final String COMMAND_SLEEP_ADD \u003d \"add-sleep\";","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":" public static final String COMMAND_SLEEP_EDIT \u003d \"edit-sleep\";","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":" public static final String COMMAND_SLEEP_DELETE \u003d \"delete-sleep\";","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":" public static final String COMMAND_SLEEP_LIST \u003d \"list-sleep\";","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_RUN \u003d \"run\";","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_ACTIVITY \u003d \"activity\";","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_CYCLE \u003d \"cycle\";","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_SWIM \u003d \"swim\";","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_ACTIVITY_DELETE \u003d \"delete-activity\";","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_ACTIVITY_LIST \u003d \"list-activity\";","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_ACTIVITY_EDIT \u003d \"edit-activity\";","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_RUN_EDIT \u003d \"edit-run\";","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_CYCLE_EDIT \u003d \"edit-cycle\";","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_SWIM_EDIT \u003d \"edit-swim\";","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" public static final String COMMAND_DIET_GOAL_SET \u003d \"set-diet-goal\";","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" public static final String COMMAND_DIET_GOAL_EDIT \u003d \"edit-diet-goal\";","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":" public static final String COMMAND_DIET_GOAL_LIST \u003d \"list-diet-goal\";","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" public static final String COMMAND_DIET_GOAL_DELETE \u003d \"delete-diet-goal\";","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" public static final String COMMAND_DIET_ADD \u003d \"add-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" public static final String COMMAND_DIET_DELETE \u003d \"delete-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" public static final String COMMAND_DIET_LIST \u003d \"list-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":10,"DaDevChia":6,"AlWo223":10,"yicheng-toh":5,"nihalzp":3}},{"path":"src/main/java/athleticli/ui/Message.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.ui;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"public class Message {","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":" public static final String PROMPT \u003d \"\u003e \";","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":" public static final String LINE \u003d \"____________________________________________________________\\n\";","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":" public static final String PREFIX_MESSAGE \u003d \" \";","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":" public static final String PREFIX_EXCEPTION \u003d \"OOPS!!! \";","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":" public static final String MESSAGE_BYE \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":" public static final String[] MESSAGE_HELLO \u003d {\"Hello! I\u0027m AthletiCLI!\", \"What can I do for you?\"};","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":" public static final String MESSAGE_SAVE \u003d \"File saved successfully!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_CAPTION_MISSING \u003d \"The caption of an activity cannot be empty!\";","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DURATION_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" \"Please specify the activity duration using \\\"duration/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DISTANCE_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" \"Please specify the activity duration using \\\"distance/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DATETIME_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" \"Please specify the activity duration using \\\"datetime/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CALORIES_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" \"Please specify the calories burned using \\\"calories/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_PROTEIN_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" \"Please specify the protein intake using \\\"protein/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CARB_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" \"Please specify the carbohydrate intake using \\\"carb/\\\"!\";","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_FAT_MISSING \u003d \"Please specify the fat intake using \\\"fat/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_CAPTION_EMPTY \u003d \"The caption of an activity cannot be empty!\";","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_DURATION_EMPTY \u003d \"The duration of an activity cannot be empty!\";","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_DISTANCE_EMPTY \u003d \"The distance of an activity cannot be empty!\";","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_DATETIME_EMPTY \u003d \"The datetime of an activity cannot be empty!\";","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CALORIES_EMPTY \u003d \"The calories burned cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_PROTEIN_EMPTY \u003d \"The protein intake cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CARB_EMPTY \u003d \"The carbohydrate intake cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_FAT_EMPTY \u003d \"The fat intake cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DURATION_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" \"The duration of an activity must be a positive integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DISTANCE_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" \"The distance of an activity must be a positive integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DATETIME_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" \"The datetime of an activity must be in the format \" + \"\\\"yyyy-MM-dd HH:mm\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CALORIES_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" \"The calories burned must be a non-negative integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_PROTEIN_INVALID \u003d \"The protein intake must be a non-negative integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CARB_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" \"The carbohydrate intake must be a non-negative integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_FAT_INVALID \u003d \"The fat intake must be a non-negative integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_ADDED \u003d \"Well done! I\u0027ve added this activity:\";","lastModifiedDate":"2023-10-13"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_DELETED \u003d \"Gotcha, I\u0027ve deleted this activity:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_ADDED \u003d \"Well done! I\u0027ve added this diet:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_ELEVATION_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" \"Please specify the elevation gain using \\\"elevation/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_ELEVATION_EMPTY \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" \"The elevation gain of an activity cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_ELEVATION_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" \"The elevation gain of an activity must be an integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_INDEX_INVALID \u003d \"The activity index must be an integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_INDEX_OUT_OF_BOUNDS \u003d \"The activity index does not exist, check your \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" \"list for the correct index!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_SWIMMINGSTYLE_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" \"Please specify the swimming style using \\\"style/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_SWIMMINGSTYLE_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" \"The swimming style of an activity must be one of \" +","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" \"the following: \\\"butterfly\\\", \\\"backstroke\\\", \\\"breaststroke\\\", \\\"freestyle\\\"!\";","lastModifiedDate":"2023-10-13"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_ACTIVITY_COUNT \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" \"You have tracked a total of %d activities. Keep pushing!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_LIST \u003d \"These are the activities you have tracked so far:\";","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_EDIT_INVALID \u003d \"Oops, the format of the edit command is wrong! Please\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" \" provide the index and the updated entry!\";","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_UPDATED \u003d \"Ok, I\u0027ve updated this activity:\";","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_COUNT \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked a total of %d diets. Keep grinding!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_ACTIVITY_FIRST \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked your first activity. This is just the beginning!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_TARGET_VALUE_NOT_POSITIVE_INT \u003d \"The target value for nutrients \" +","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"yicheng-toh"},"content":" \"must be a positive integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_INVALID_NUTRIENT \u003d \"Key word to nutrients goals has to be one of the \" +","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"yicheng-toh"},"content":" \"following: \\\"calories\\\", \\\"protein\\\", \\\"carb\\\", \\\"fats\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_ALREADY_EXISTED \u003d \"Diet goal for %s has already existed. \" +","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"yicheng-toh"},"content":" \"Please edit the goal instead!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_NOT_EXISTED \u003d \"Diet goal for %s is not present. \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"yicheng-toh"},"content":" \"Please add the goal before editing it!\";","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_COUNT \u003d \"Now you have %d diet goal(s).\";","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_NONE \u003d \"There are no goals at the moment. Add a diet goal to start.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_LIST_HEADER \u003d \"These are your goal(s):\\n\";","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_INCORRECT_INTEGER_FORMAT \u003d \"Please provide a positive integer.\\n\";","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_EMPTY_DIETGOALLIST \u003d \"There is no diet goals at the moment. \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"yicheng-toh"},"content":" \"Please add one to continue.\\n\";","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_DELETE_HEADER \u003d \"The following goal has been deleted:\\n\";","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_OUT_OF_BOUND \u003d \"Unable to fetch diet goal. \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"yicheng-toh"},"content":" \"Please enter a value from 1 to %d.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_INSUFFICIENT_INPUT \u003d \"Please input the following keywords \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"yicheng-toh"},"content":" \"to create or edit your diet goals:\\n \\\"calories\\\", \\\"protein\\\", \\\"carb\\\", \\\"fats\\\"\";","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSSAGE_DIETGOAL_REPEATED_NUTRIENT \u003d \"Please ensure that there are \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"yicheng-toh"},"content":" \"no repetitions for your diet goal nutrients.\";","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_FIRST \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked your first diet. This is just the beginning!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_INVALID_DIET_INDEX \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"nihalzp"},"content":" \"The diet index is invalid! Please enter a valid diet index!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_INDEX_TYPE_INVALID \u003d \"The diet index must be an integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_DELETED \u003d \"Noted. I\u0027ve removed this diet:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_LIST \u003d \"Here are the diets in your list:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"DaDevChia"},"content":" public static final String MESSAGE_SLEEP_DELETE_INVALID_INDEX \u003d \"Invalid index. Please enter a valid index.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"DaDevChia"},"content":" public static final String MESSAGE_SLEEP_DELETE_RETURN \u003d \"Got it. I\u0027ve deleted this sleep record at index %d: %s\";","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"DaDevChia"},"content":" public static final String MESSAGE_SLEEP_EDIT_RETURN \u003d \"Got it. I\u0027ve changed this sleep record at index %d:\";","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"DaDevChia"},"content":" public static final String MESSAGE_SLEEP_LIST \u003d \"Here are the sleep records in your list:\\n\";","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"DaDevChia"},"content":" public static final String MESSAGE_SLEEP_LIST_EMPTY \u003d \"You have no sleep records in your list.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"DaDevChia"},"content":" public static final String MESSAGE_SLEEP_ADD_RETURN_1 \u003d \"Got it. I\u0027ve added this sleep record:\";","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"DaDevChia"},"content":" public static final String MESSAGE_SLEEP_ADD_RETURN_2 \u003d \"Now you have %d sleep records in the list.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_INVALID_DATE_TIME_FORMAT \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"DaDevChia"},"content":" \"Invalid date-time format. Please use dd-MM-yyyy HH:mm.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"DaDevChia"},"content":" \"Please specify both the start and end time of your sleep.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_END_BEFORE_START \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"DaDevChia"},"content":" \"Please specify the start time of your sleep before the end time.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_DELETE_NO_INDEX \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"DaDevChia"},"content":" \"Please specify the index of the sleep record you want to delete.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_EDIT_NO_INDEX \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"DaDevChia"},"content":" \"Please specify the index of the sleep record you want to edit.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_SLEEP_EDIT_INDEX_OOBE \u003d ","lastModifiedDate":"2023-10-18"},{"lineNumber":121,"author":{"gitId":"DaDevChia"},"content":" \"The index of the sleep record you want to edit is out of bounds.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_SLEEP_DELETE_INDEX_OOBE \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":123,"author":{"gitId":"DaDevChia"},"content":" \"The index of the sleep record you want to delete is out of bounds.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":124,"author":{"gitId":"skylee03"},"content":" public static final String MESSAGE_UNKNOWN_COMMAND \u003d \"I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-10-16"},{"lineNumber":125,"author":{"gitId":"skylee03"},"content":" public static final String MESSAGE_IO_EXCEPTION \u003d \"An I/O exception occurred.\";","lastModifiedDate":"2023-10-22"},{"lineNumber":126,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":127,"author":{"gitId":"skylee03"},"content":" /* Help Messages */","lastModifiedDate":"2023-10-21"},{"lineNumber":128,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_ACTIVITY \u003d CommandName.COMMAND_ACTIVITY","lastModifiedDate":"2023-10-21"},{"lineNumber":129,"author":{"gitId":"skylee03"},"content":" + \" CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME\";","lastModifiedDate":"2023-10-21"},{"lineNumber":130,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_RUN \u003d CommandName.COMMAND_RUN","lastModifiedDate":"2023-10-21"},{"lineNumber":131,"author":{"gitId":"skylee03"},"content":" + \" CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION\";","lastModifiedDate":"2023-10-21"},{"lineNumber":132,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_SWIM \u003d CommandName.COMMAND_SWIM","lastModifiedDate":"2023-10-21"},{"lineNumber":133,"author":{"gitId":"skylee03"},"content":" + \" CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS\";","lastModifiedDate":"2023-10-21"},{"lineNumber":134,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_CYCLE \u003d CommandName.COMMAND_CYCLE","lastModifiedDate":"2023-10-21"},{"lineNumber":135,"author":{"gitId":"skylee03"},"content":" + \" CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION\";","lastModifiedDate":"2023-10-21"},{"lineNumber":136,"author":{"gitId":"skylee03"},"content":" public static final String HELP_DELETE_ACTIVITY \u003d CommandName.COMMAND_ACTIVITY_DELETE","lastModifiedDate":"2023-10-21"},{"lineNumber":137,"author":{"gitId":"skylee03"},"content":" + \" INDEX\";","lastModifiedDate":"2023-10-21"},{"lineNumber":138,"author":{"gitId":"skylee03"},"content":" public static final String HELP_LIST_ACTIVITY \u003d CommandName.COMMAND_ACTIVITY_LIST","lastModifiedDate":"2023-10-21"},{"lineNumber":139,"author":{"gitId":"skylee03"},"content":" + \" [-d]\";","lastModifiedDate":"2023-10-21"},{"lineNumber":140,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_ACTIVITY \u003d CommandName.COMMAND_ACTIVITY_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":141,"author":{"gitId":"skylee03"},"content":" + \" INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME\";","lastModifiedDate":"2023-10-21"},{"lineNumber":142,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_RUN \u003d CommandName.COMMAND_RUN_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":143,"author":{"gitId":"skylee03"},"content":" + \" INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION\";","lastModifiedDate":"2023-10-21"},{"lineNumber":144,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_SWIM \u003d CommandName.COMMAND_SWIM_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":145,"author":{"gitId":"skylee03"},"content":" + \" INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS\";","lastModifiedDate":"2023-10-21"},{"lineNumber":146,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_CYCLE \u003d CommandName.COMMAND_CYCLE_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":147,"author":{"gitId":"skylee03"},"content":" + \" INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION\";","lastModifiedDate":"2023-10-21"},{"lineNumber":148,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_DIET \u003d CommandName.COMMAND_DIET_ADD","lastModifiedDate":"2023-10-21"},{"lineNumber":149,"author":{"gitId":"skylee03"},"content":" + \" calories/CALORIES protein/PROTEIN carb/CARB fat/FAT\";","lastModifiedDate":"2023-10-21"},{"lineNumber":150,"author":{"gitId":"skylee03"},"content":" public static final String HELP_DELETE_DIET \u003d CommandName.COMMAND_DIET_DELETE","lastModifiedDate":"2023-10-21"},{"lineNumber":151,"author":{"gitId":"skylee03"},"content":" + \" INDEX\";","lastModifiedDate":"2023-10-21"},{"lineNumber":152,"author":{"gitId":"skylee03"},"content":" public static final String HELP_LIST_DIET \u003d CommandName.COMMAND_DIET_LIST;","lastModifiedDate":"2023-10-21"},{"lineNumber":153,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_SLEEP \u003d CommandName.COMMAND_SLEEP_ADD","lastModifiedDate":"2023-10-21"},{"lineNumber":154,"author":{"gitId":"skylee03"},"content":" + \" start/START end/END\";","lastModifiedDate":"2023-10-21"},{"lineNumber":155,"author":{"gitId":"skylee03"},"content":" public static final String HELP_LIST_SLEEP \u003d CommandName.COMMAND_SLEEP_LIST;","lastModifiedDate":"2023-10-21"},{"lineNumber":156,"author":{"gitId":"skylee03"},"content":" public static final String HELP_DELETE_SLEEP \u003d CommandName.COMMAND_SLEEP_DELETE","lastModifiedDate":"2023-10-21"},{"lineNumber":157,"author":{"gitId":"skylee03"},"content":" + \" INDEX\";","lastModifiedDate":"2023-10-21"},{"lineNumber":158,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_SLEEP \u003d CommandName.COMMAND_SLEEP_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":159,"author":{"gitId":"skylee03"},"content":" + \" INDEX start/START end/END\";","lastModifiedDate":"2023-10-21"},{"lineNumber":160,"author":{"gitId":"skylee03"},"content":" public static final String HELP_SAVE \u003d CommandName.COMMAND_SAVE;","lastModifiedDate":"2023-10-22"},{"lineNumber":161,"author":{"gitId":"skylee03"},"content":" public static final String HELP_BYE \u003d CommandName.COMMAND_BYE;","lastModifiedDate":"2023-10-21"},{"lineNumber":162,"author":{"gitId":"skylee03"},"content":" public static final String HELP_HELP \u003d CommandName.COMMAND_HELP","lastModifiedDate":"2023-10-21"},{"lineNumber":163,"author":{"gitId":"skylee03"},"content":" + \" [COMMAND]\";","lastModifiedDate":"2023-10-21"},{"lineNumber":164,"author":{"gitId":"skylee03"},"content":" public static final String HELP_DETAILS \u003d","lastModifiedDate":"2023-10-21"},{"lineNumber":165,"author":{"gitId":"skylee03"},"content":" \"Please check our user guide (https://ay2324s1-cs2113-t17-1.github.io/tp/) for details.\";","lastModifiedDate":"2023-10-21"},{"lineNumber":166,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":53,"DaDevChia":22,"AlWo223":16,"yicheng-toh":25,"nihalzp":50}},{"path":"src/main/java/athleticli/ui/NutrientVerifier.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"package athleticli.ui;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import java.util.Set;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"/**","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":" * Verify the nutrient from a list of approved nutrients to be log in diet and diet goals","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"public class NutrientVerifier {","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":" public static final Set\u003cString\u003e VERIFIED_NUTRIENTS \u003d Set.of(\"fats\", \"carb\", \"protein\", \"calories\");","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":" * Verifies if a nutrient is approved.","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":" * @param nutrient","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":" * @return boolean value if it is found in the approved list.","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":" public static boolean verify(String nutrient) {","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":" return VERIFIED_NUTRIENTS.contains(nutrient);","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"yicheng-toh":21}},{"path":"src/main/java/athleticli/ui/Parameter.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"public class Parameter {","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":" public static final String DURATION_SEPARATOR \u003d \"duration/\";","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":" public static final String DISTANCE_SEPARATOR \u003d \"distance/\";","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":" public static final String DATETIME_SEPARATOR \u003d \"datetime/\";","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":" public static final String ELEVATION_SEPARATOR \u003d \"elevation/\";","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":" public static final String SWIMMING_STYLE_SEPARATOR \u003d \"style/\";","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":" public static final String DETAIL_FLAG \u003d \"-d\";","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"AlWo223":11}},{"path":"src/main/java/athleticli/ui/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.ui;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.ByeCommand;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.HelpCommand;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.SaveCommand;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.AddActivityCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.DeleteActivityCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.EditActivityCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.ListActivityCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.AddDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.DeleteDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.DeleteDietGoalCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.EditDietGoalCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.ListDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.ListDietGoalCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.SetDietGoalCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.AddSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.DeleteSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.EditSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.ListSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Activity;","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Cycle;","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Run;","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Swim;","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoal;","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":"import java.util.HashSet;","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":"import java.util.Set;","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" * Defines the basic methods for command parser.","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":"public class Parser {","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":" private static DateTimeFormatter sleepTimeFormatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" private static final String CALORIES_MARKER \u003d \"calories\";","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" private static final String PROTEIN_MARKER \u003d \"protein\";","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" private static final String CARB_MARKER \u003d \"carb\";","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" private static final String FAT_MARKER \u003d \"fats\";","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" * Splits the raw user input into two parts, and then returns them. The first part is the command type,","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" * while the second part is the command arguments. The second part can be empty.","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":" * @param rawUserInput The raw user input.","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" * @return A string array whose first element is the command type","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":" * and the second element is the command arguments.","lastModifiedDate":"2023-10-08"},{"lineNumber":59,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":60,"author":{"gitId":"skylee03"},"content":" public static String[] splitCommandWordAndArgs(String rawUserInput) {","lastModifiedDate":"2023-10-08"},{"lineNumber":61,"author":{"gitId":"skylee03"},"content":" assert rawUserInput !\u003d null : \"`rawUserInput` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" final String[] split \u003d rawUserInput.trim().split(\"\\\\s+\", 2);","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":" return split.length \u003d\u003d 2 ? split : new String[]{split[0], \"\"};","lastModifiedDate":"2023-10-08"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":65,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":" * Parses the raw user input and returns the corresponding command object.","lastModifiedDate":"2023-10-08"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":" * @param rawUserInput The raw user input.","lastModifiedDate":"2023-10-08"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":" * @return An object representing the command.","lastModifiedDate":"2023-10-08"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":" public static Command parseCommand(String rawUserInput) throws AthletiException {","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":" assert rawUserInput !\u003d null : \"`rawUserInput` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":" final String[] commandTypeAndParams \u003d splitCommandWordAndArgs(rawUserInput);","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":" final String commandType \u003d commandTypeAndParams[0];","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":" final String commandArgs \u003d commandTypeAndParams[1];","lastModifiedDate":"2023-10-08"},{"lineNumber":78,"author":{"gitId":"skylee03"},"content":" switch (commandType) {","lastModifiedDate":"2023-10-08"},{"lineNumber":79,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_BYE:","lastModifiedDate":"2023-10-08"},{"lineNumber":80,"author":{"gitId":"skylee03"},"content":" return new ByeCommand();","lastModifiedDate":"2023-10-08"},{"lineNumber":81,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_HELP:","lastModifiedDate":"2023-10-21"},{"lineNumber":82,"author":{"gitId":"skylee03"},"content":" return new HelpCommand(commandArgs);","lastModifiedDate":"2023-10-21"},{"lineNumber":83,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_SAVE:","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"skylee03"},"content":" return new SaveCommand();","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"DaDevChia"},"content":" case CommandName.COMMAND_SLEEP_ADD:","lastModifiedDate":"2023-10-12"},{"lineNumber":86,"author":{"gitId":"DaDevChia"},"content":" return parseSleepAdd(commandArgs);","lastModifiedDate":"2023-10-12"},{"lineNumber":87,"author":{"gitId":"DaDevChia"},"content":" case CommandName.COMMAND_SLEEP_LIST:","lastModifiedDate":"2023-10-12"},{"lineNumber":88,"author":{"gitId":"DaDevChia"},"content":" return new ListSleepCommand();","lastModifiedDate":"2023-10-12"},{"lineNumber":89,"author":{"gitId":"DaDevChia"},"content":" case CommandName.COMMAND_SLEEP_EDIT:","lastModifiedDate":"2023-10-12"},{"lineNumber":90,"author":{"gitId":"DaDevChia"},"content":" return parseSleepEdit(commandArgs);","lastModifiedDate":"2023-10-12"},{"lineNumber":91,"author":{"gitId":"DaDevChia"},"content":" case CommandName.COMMAND_SLEEP_DELETE:","lastModifiedDate":"2023-10-12"},{"lineNumber":92,"author":{"gitId":"DaDevChia"},"content":" return parseSleepDelete(commandArgs);","lastModifiedDate":"2023-10-12"},{"lineNumber":93,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_ACTIVITY:","lastModifiedDate":"2023-10-13"},{"lineNumber":94,"author":{"gitId":"AlWo223"},"content":" return new AddActivityCommand(parseActivity(commandArgs));","lastModifiedDate":"2023-10-13"},{"lineNumber":95,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_CYCLE:","lastModifiedDate":"2023-10-13"},{"lineNumber":96,"author":{"gitId":"AlWo223"},"content":" return new AddActivityCommand(parseRunCycle(commandArgs, false));","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_RUN:","lastModifiedDate":"2023-10-13"},{"lineNumber":98,"author":{"gitId":"AlWo223"},"content":" return new AddActivityCommand(parseRunCycle(commandArgs, true));","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_SWIM:","lastModifiedDate":"2023-10-13"},{"lineNumber":100,"author":{"gitId":"AlWo223"},"content":" return new AddActivityCommand(parseSwim(commandArgs));","lastModifiedDate":"2023-10-13"},{"lineNumber":101,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_ACTIVITY_DELETE:","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"AlWo223"},"content":" return new DeleteActivityCommand(parseActivityIndex(commandArgs));","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_ACTIVITY_LIST:","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"AlWo223"},"content":" return new ListActivityCommand(parseActivityListDetail(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_ACTIVITY_EDIT:","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"AlWo223"},"content":" return new EditActivityCommand(parseActivityEdit(commandArgs), parseActivityEditIndex(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_RUN_EDIT:","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"AlWo223"},"content":" return new EditActivityCommand(parseRunEdit(commandArgs), parseActivityEditIndex(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_CYCLE_EDIT:","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"AlWo223"},"content":" return new EditActivityCommand(parseCycleEdit(commandArgs), parseActivityEditIndex(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_SWIM_EDIT:","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"AlWo223"},"content":" return new EditActivityCommand(parseSwimEdit(commandArgs), parseActivityEditIndex(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"yicheng-toh"},"content":" case CommandName.COMMAND_DIET_GOAL_SET:","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"yicheng-toh"},"content":" return new SetDietGoalCommand(parseDietGoalSetEdit(commandArgs));","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"yicheng-toh"},"content":" case CommandName.COMMAND_DIET_GOAL_EDIT:","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"yicheng-toh"},"content":" return new EditDietGoalCommand(parseDietGoalSetEdit(commandArgs));","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"yicheng-toh"},"content":" case CommandName.COMMAND_DIET_GOAL_LIST:","lastModifiedDate":"2023-10-16"},{"lineNumber":118,"author":{"gitId":"yicheng-toh"},"content":" return new ListDietGoalCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":119,"author":{"gitId":"yicheng-toh"},"content":" case CommandName.COMMAND_DIET_GOAL_DELETE:","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"yicheng-toh"},"content":" return new DeleteDietGoalCommand(parseDietGoalDelete(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"nihalzp"},"content":" case CommandName.COMMAND_DIET_ADD:","lastModifiedDate":"2023-10-15"},{"lineNumber":122,"author":{"gitId":"nihalzp"},"content":" return new AddDietCommand(parseDiet(commandArgs));","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"nihalzp"},"content":" case CommandName.COMMAND_DIET_DELETE:","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"nihalzp"},"content":" return new DeleteDietCommand(parseDietIndex(commandArgs));","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"nihalzp"},"content":" case CommandName.COMMAND_DIET_LIST:","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"nihalzp"},"content":" return new ListDietCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"skylee03"},"content":" default:","lastModifiedDate":"2023-10-08"},{"lineNumber":128,"author":{"gitId":"skylee03"},"content":" throw new AthletiException(Message.MESSAGE_UNKNOWN_COMMAND);","lastModifiedDate":"2023-10-16"},{"lineNumber":129,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":130,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":131,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":132,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":133,"author":{"gitId":"AlWo223"},"content":" * Parses the index of an activity.","lastModifiedDate":"2023-10-15"},{"lineNumber":134,"author":{"gitId":"AlWo223"},"content":" * @param commandArgs The raw user input containing the index.","lastModifiedDate":"2023-10-15"},{"lineNumber":135,"author":{"gitId":"AlWo223"},"content":" * @return index The parsed Integer index.","lastModifiedDate":"2023-10-15"},{"lineNumber":136,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input is not an integer.","lastModifiedDate":"2023-10-15"},{"lineNumber":137,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":138,"author":{"gitId":"AlWo223"},"content":" private static int parseActivityIndex(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":139,"author":{"gitId":"AlWo223"},"content":" final String commandArgsTrimmed \u003d commandArgs.trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":140,"author":{"gitId":"AlWo223"},"content":" int index;","lastModifiedDate":"2023-10-15"},{"lineNumber":141,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":142,"author":{"gitId":"AlWo223"},"content":" index \u003d Integer.parseInt(commandArgsTrimmed);","lastModifiedDate":"2023-10-15"},{"lineNumber":143,"author":{"gitId":"AlWo223"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":144,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_INDEX_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":145,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":146,"author":{"gitId":"AlWo223"},"content":" return index;","lastModifiedDate":"2023-10-15"},{"lineNumber":147,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":148,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":149,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":150,"author":{"gitId":"AlWo223"},"content":" * Parses the provided updated activity for the edit command.","lastModifiedDate":"2023-10-18"},{"lineNumber":151,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the updated activity.","lastModifiedDate":"2023-10-18"},{"lineNumber":152,"author":{"gitId":"AlWo223"},"content":" * @return activity The parsed Activity object.","lastModifiedDate":"2023-10-18"},{"lineNumber":153,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":154,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":155,"author":{"gitId":"AlWo223"},"content":" private static Activity parseActivityEdit(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":156,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":157,"author":{"gitId":"AlWo223"},"content":" return parseActivity(arguments.split(\" \", 2)[1]);","lastModifiedDate":"2023-10-17"},{"lineNumber":158,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":159,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":160,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":161,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":162,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":163,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":164,"author":{"gitId":"AlWo223"},"content":" * Parses the provided updated run for the edit command","lastModifiedDate":"2023-10-18"},{"lineNumber":165,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the updated run.","lastModifiedDate":"2023-10-18"},{"lineNumber":166,"author":{"gitId":"AlWo223"},"content":" * @return activity The parsed run object.","lastModifiedDate":"2023-10-18"},{"lineNumber":167,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":168,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":169,"author":{"gitId":"AlWo223"},"content":" private static Activity parseRunEdit(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":170,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":171,"author":{"gitId":"AlWo223"},"content":" return parseRunCycle(arguments.split(\" \", 2)[1], true);","lastModifiedDate":"2023-10-17"},{"lineNumber":172,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":173,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":174,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":175,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":176,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":177,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":178,"author":{"gitId":"AlWo223"},"content":" * Parses the provided updated cycle for the edit command","lastModifiedDate":"2023-10-18"},{"lineNumber":179,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the updated cycle.","lastModifiedDate":"2023-10-18"},{"lineNumber":180,"author":{"gitId":"AlWo223"},"content":" * @return activity The parsed cycle object.","lastModifiedDate":"2023-10-18"},{"lineNumber":181,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":182,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":183,"author":{"gitId":"AlWo223"},"content":" private static Activity parseCycleEdit(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":184,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":185,"author":{"gitId":"AlWo223"},"content":" return parseRunCycle(arguments.split(\" \", 2)[1], false);","lastModifiedDate":"2023-10-17"},{"lineNumber":186,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":187,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":188,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":189,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":190,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":191,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":192,"author":{"gitId":"AlWo223"},"content":" * Parses the provided update swim for the edit command","lastModifiedDate":"2023-10-18"},{"lineNumber":193,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the updated swim.","lastModifiedDate":"2023-10-18"},{"lineNumber":194,"author":{"gitId":"AlWo223"},"content":" * @return activity The parsed swim object.","lastModifiedDate":"2023-10-18"},{"lineNumber":195,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":196,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":197,"author":{"gitId":"AlWo223"},"content":" private static Activity parseSwimEdit(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":198,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":199,"author":{"gitId":"AlWo223"},"content":" return parseSwim(arguments.split(\" \", 2)[1]);","lastModifiedDate":"2023-10-17"},{"lineNumber":200,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":201,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":202,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":203,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":204,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":205,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":206,"author":{"gitId":"AlWo223"},"content":" * Parses the index of an activity update for the edit command.","lastModifiedDate":"2023-10-18"},{"lineNumber":207,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the index.","lastModifiedDate":"2023-10-18"},{"lineNumber":208,"author":{"gitId":"AlWo223"},"content":" * @return index The parsed Integer index.","lastModifiedDate":"2023-10-18"},{"lineNumber":209,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid","lastModifiedDate":"2023-10-18"},{"lineNumber":210,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":211,"author":{"gitId":"AlWo223"},"content":" private static int parseActivityEditIndex(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":212,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":213,"author":{"gitId":"AlWo223"},"content":" return parseActivityIndex(arguments.split(\" \", 2)[0]);","lastModifiedDate":"2023-10-17"},{"lineNumber":214,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":215,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":216,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":217,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":218,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":219,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":220,"author":{"gitId":"AlWo223"},"content":" * Parses the raw user input for viewing the activity list and returns whether the user wants the detailed view","lastModifiedDate":"2023-10-17"},{"lineNumber":221,"author":{"gitId":"AlWo223"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-17"},{"lineNumber":222,"author":{"gitId":"AlWo223"},"content":" * @return boolean Whether the user wants the detailed view.","lastModifiedDate":"2023-10-17"},{"lineNumber":223,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":224,"author":{"gitId":"AlWo223"},"content":" private static boolean parseActivityListDetail(String commandArgs) {","lastModifiedDate":"2023-10-17"},{"lineNumber":225,"author":{"gitId":"AlWo223"},"content":" return commandArgs.toLowerCase().contains(Parameter.DETAIL_FLAG);","lastModifiedDate":"2023-10-18"},{"lineNumber":226,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":227,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":228,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":229,"author":{"gitId":"AlWo223"},"content":" * Parses the raw user input for an activity and returns the corresponding activity object.","lastModifiedDate":"2023-10-13"},{"lineNumber":230,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":231,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the arguments.","lastModifiedDate":"2023-10-13"},{"lineNumber":232,"author":{"gitId":"AlWo223"},"content":" * @return An object representing the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":233,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-13"},{"lineNumber":234,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":235,"author":{"gitId":"AlWo223"},"content":" public static Activity parseActivity(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-12"},{"lineNumber":236,"author":{"gitId":"AlWo223"},"content":" final int durationIndex \u003d arguments.indexOf(Parameter.DURATION_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":237,"author":{"gitId":"AlWo223"},"content":" final int distanceIndex \u003d arguments.indexOf(Parameter.DISTANCE_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":238,"author":{"gitId":"AlWo223"},"content":" final int datetimeIndex \u003d arguments.indexOf(Parameter.DATETIME_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":239,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":240,"author":{"gitId":"AlWo223"},"content":" checkMissingActivityArguments(durationIndex, distanceIndex, datetimeIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":241,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":242,"author":{"gitId":"AlWo223"},"content":" final String caption \u003d arguments.substring(0, durationIndex).trim();","lastModifiedDate":"2023-10-13"},{"lineNumber":243,"author":{"gitId":"AlWo223"},"content":" final String duration \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":244,"author":{"gitId":"AlWo223"},"content":" arguments.substring(durationIndex + Parameter.DURATION_SEPARATOR.length(), distanceIndex).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":245,"author":{"gitId":"AlWo223"},"content":" final String distance \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":246,"author":{"gitId":"AlWo223"},"content":" arguments.substring(distanceIndex + Parameter.DISTANCE_SEPARATOR.length(), datetimeIndex).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":247,"author":{"gitId":"AlWo223"},"content":" final String datetime \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":248,"author":{"gitId":"AlWo223"},"content":" arguments.substring(datetimeIndex + Parameter.DATETIME_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":249,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":250,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":251,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":252,"author":{"gitId":"AlWo223"},"content":" final int durationParsed \u003d parseDuration(duration);","lastModifiedDate":"2023-10-13"},{"lineNumber":253,"author":{"gitId":"AlWo223"},"content":" final int distanceParsed \u003d parseDistance(distance);","lastModifiedDate":"2023-10-13"},{"lineNumber":254,"author":{"gitId":"AlWo223"},"content":" final LocalDateTime datetimeParsed \u003d parseDateTime(datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":255,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":256,"author":{"gitId":"AlWo223"},"content":" return new Activity(caption, durationParsed, distanceParsed, datetimeParsed);","lastModifiedDate":"2023-10-13"},{"lineNumber":257,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":258,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":259,"author":{"gitId":"AlWo223"},"content":" public static int parseDuration(String duration) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":260,"author":{"gitId":"AlWo223"},"content":" int durationParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":261,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-13"},{"lineNumber":262,"author":{"gitId":"AlWo223"},"content":" durationParsed \u003d Integer.parseInt(duration);","lastModifiedDate":"2023-10-13"},{"lineNumber":263,"author":{"gitId":"AlWo223"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-13"},{"lineNumber":264,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DURATION_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":265,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":266,"author":{"gitId":"AlWo223"},"content":" return durationParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":267,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":268,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":269,"author":{"gitId":"AlWo223"},"content":" public static LocalDateTime parseDateTime(String datetime) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":270,"author":{"gitId":"AlWo223"},"content":" LocalDateTime datetimeParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":271,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-13"},{"lineNumber":272,"author":{"gitId":"AlWo223"},"content":" datetimeParsed \u003d LocalDateTime.parse(datetime.replace(\" \", \"T\"));","lastModifiedDate":"2023-10-13"},{"lineNumber":273,"author":{"gitId":"AlWo223"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-13"},{"lineNumber":274,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DATETIME_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":275,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":276,"author":{"gitId":"AlWo223"},"content":" return datetimeParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":277,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":278,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":279,"author":{"gitId":"AlWo223"},"content":" public static int parseDistance(String distance) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":280,"author":{"gitId":"AlWo223"},"content":" int distanceParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":281,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-13"},{"lineNumber":282,"author":{"gitId":"AlWo223"},"content":" distanceParsed \u003d Integer.parseInt(distance);","lastModifiedDate":"2023-10-13"},{"lineNumber":283,"author":{"gitId":"AlWo223"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-13"},{"lineNumber":284,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DISTANCE_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":285,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":286,"author":{"gitId":"AlWo223"},"content":" return distanceParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":287,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":288,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":289,"author":{"gitId":"nihalzp"},"content":" public static void checkMissingActivityArguments(int durationIndex, int distanceIndex,","lastModifiedDate":"2023-10-15"},{"lineNumber":290,"author":{"gitId":"nihalzp"},"content":" int datetimeIndex) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":291,"author":{"gitId":"AlWo223"},"content":" if (durationIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-12"},{"lineNumber":292,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DURATION_MISSING);","lastModifiedDate":"2023-10-12"},{"lineNumber":293,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":294,"author":{"gitId":"AlWo223"},"content":" if (distanceIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-12"},{"lineNumber":295,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DISTANCE_MISSING);","lastModifiedDate":"2023-10-12"},{"lineNumber":296,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":297,"author":{"gitId":"AlWo223"},"content":" if (datetimeIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-12"},{"lineNumber":298,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DATETIME_MISSING);","lastModifiedDate":"2023-10-12"},{"lineNumber":299,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":300,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":301,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":302,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":303,"author":{"gitId":"AlWo223"},"content":" * Parses the raw user input for a run or cycle and returns the corresponding activity object.","lastModifiedDate":"2023-10-13"},{"lineNumber":304,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":305,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the arguments.","lastModifiedDate":"2023-10-13"},{"lineNumber":306,"author":{"gitId":"AlWo223"},"content":" * @return An object representing the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":307,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":308,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":309,"author":{"gitId":"AlWo223"},"content":" public static Activity parseRunCycle(String arguments, boolean isRun) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":310,"author":{"gitId":"AlWo223"},"content":" final int durationIndex \u003d arguments.indexOf(Parameter.DURATION_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":311,"author":{"gitId":"AlWo223"},"content":" final int distanceIndex \u003d arguments.indexOf(Parameter.DISTANCE_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":312,"author":{"gitId":"AlWo223"},"content":" final int datetimeIndex \u003d arguments.indexOf(Parameter.DATETIME_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":313,"author":{"gitId":"AlWo223"},"content":" final int elevationIndex \u003d arguments.indexOf(Parameter.ELEVATION_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":314,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":315,"author":{"gitId":"AlWo223"},"content":" checkMissingRunCycleArguments(durationIndex, distanceIndex, datetimeIndex, elevationIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":316,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":317,"author":{"gitId":"AlWo223"},"content":" final String caption \u003d arguments.substring(0, durationIndex).trim();","lastModifiedDate":"2023-10-13"},{"lineNumber":318,"author":{"gitId":"AlWo223"},"content":" final String duration \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":319,"author":{"gitId":"AlWo223"},"content":" arguments.substring(durationIndex + Parameter.DURATION_SEPARATOR.length(), distanceIndex).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":320,"author":{"gitId":"AlWo223"},"content":" final String distance \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":321,"author":{"gitId":"AlWo223"},"content":" arguments.substring(distanceIndex + Parameter.DISTANCE_SEPARATOR.length(), datetimeIndex).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":322,"author":{"gitId":"AlWo223"},"content":" final String datetime \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":323,"author":{"gitId":"AlWo223"},"content":" arguments.substring(datetimeIndex + Parameter.DATETIME_SEPARATOR.length(), elevationIndex).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":324,"author":{"gitId":"AlWo223"},"content":" final String elevation \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":325,"author":{"gitId":"AlWo223"},"content":" arguments.substring(elevationIndex + Parameter.ELEVATION_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":326,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":327,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime, elevation);","lastModifiedDate":"2023-10-13"},{"lineNumber":328,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":329,"author":{"gitId":"AlWo223"},"content":" final int durationParsed \u003d parseDuration(duration);","lastModifiedDate":"2023-10-13"},{"lineNumber":330,"author":{"gitId":"AlWo223"},"content":" final int distanceParsed \u003d parseDistance(distance);","lastModifiedDate":"2023-10-13"},{"lineNumber":331,"author":{"gitId":"AlWo223"},"content":" final LocalDateTime datetimeParsed \u003d parseDateTime(datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":332,"author":{"gitId":"AlWo223"},"content":" final int elevationParsed \u003d parseElevation(elevation);","lastModifiedDate":"2023-10-13"},{"lineNumber":333,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":334,"author":{"gitId":"AlWo223"},"content":" if (isRun) {","lastModifiedDate":"2023-10-17"},{"lineNumber":335,"author":{"gitId":"AlWo223"},"content":" return new Run(caption, durationParsed, distanceParsed, datetimeParsed, elevationParsed);","lastModifiedDate":"2023-10-13"},{"lineNumber":336,"author":{"gitId":"AlWo223"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":337,"author":{"gitId":"AlWo223"},"content":" return new Cycle(caption, durationParsed, distanceParsed, datetimeParsed, elevationParsed);","lastModifiedDate":"2023-10-17"},{"lineNumber":338,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":339,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":340,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":341,"author":{"gitId":"AlWo223"},"content":" public static int parseElevation(String elevation) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":342,"author":{"gitId":"AlWo223"},"content":" int elevationParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":343,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":344,"author":{"gitId":"AlWo223"},"content":" elevationParsed \u003d Integer.parseInt(elevation);","lastModifiedDate":"2023-10-13"},{"lineNumber":345,"author":{"gitId":"AlWo223"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":346,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ELEVATION_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":347,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":348,"author":{"gitId":"AlWo223"},"content":" return elevationParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":349,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":350,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":351,"author":{"gitId":"AlWo223"},"content":" public static void checkMissingRunCycleArguments(int durationIndex, int distanceIndex, int datetimeIndex,","lastModifiedDate":"2023-10-13"},{"lineNumber":352,"author":{"gitId":"AlWo223"},"content":" int elevationIndex) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":353,"author":{"gitId":"AlWo223"},"content":" checkMissingActivityArguments(durationIndex, distanceIndex, datetimeIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":354,"author":{"gitId":"AlWo223"},"content":" if (elevationIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-13"},{"lineNumber":355,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ELEVATION_MISSING);","lastModifiedDate":"2023-10-13"},{"lineNumber":356,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":357,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":358,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":359,"author":{"gitId":"AlWo223"},"content":" public static void checkMissingSwimArguments(int durationIndex, int distanceIndex, int datetimeIndex,","lastModifiedDate":"2023-10-13"},{"lineNumber":360,"author":{"gitId":"AlWo223"},"content":" int swimmingStyleIndex) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":361,"author":{"gitId":"AlWo223"},"content":" checkMissingActivityArguments(durationIndex, distanceIndex, datetimeIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":362,"author":{"gitId":"AlWo223"},"content":" if (swimmingStyleIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-13"},{"lineNumber":363,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_SWIMMINGSTYLE_MISSING);","lastModifiedDate":"2023-10-13"},{"lineNumber":364,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":365,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":366,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":367,"author":{"gitId":"nihalzp"},"content":" public static void checkEmptyActivityArguments(String caption, String duration, String distance,","lastModifiedDate":"2023-10-15"},{"lineNumber":368,"author":{"gitId":"nihalzp"},"content":" String datetime) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":369,"author":{"gitId":"AlWo223"},"content":" if (caption.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":370,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_CAPTION_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":371,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":372,"author":{"gitId":"AlWo223"},"content":" if (duration.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":373,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DURATION_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":374,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":375,"author":{"gitId":"AlWo223"},"content":" if (distance.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":376,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DISTANCE_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":377,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":378,"author":{"gitId":"AlWo223"},"content":" if (datetime.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":379,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DATETIME_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":380,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":381,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":382,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":383,"author":{"gitId":"nihalzp"},"content":" public static void checkEmptyActivityArguments(String caption, String duration, String distance,","lastModifiedDate":"2023-10-15"},{"lineNumber":384,"author":{"gitId":"nihalzp"},"content":" String datetime,","lastModifiedDate":"2023-10-15"},{"lineNumber":385,"author":{"gitId":"AlWo223"},"content":" String elevation) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":386,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":387,"author":{"gitId":"AlWo223"},"content":" if (elevation.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":388,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ELEVATION_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":389,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":390,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":391,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":392,"author":{"gitId":"nihalzp"},"content":" public static void checkEmptyActivityArguments(String caption, String duration, String distance,","lastModifiedDate":"2023-10-15"},{"lineNumber":393,"author":{"gitId":"nihalzp"},"content":" String datetime,","lastModifiedDate":"2023-10-15"},{"lineNumber":394,"author":{"gitId":"AlWo223"},"content":" int swimmingStyleIndex) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":395,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":396,"author":{"gitId":"AlWo223"},"content":" if (swimmingStyleIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-13"},{"lineNumber":397,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_SWIMMINGSTYLE_MISSING);","lastModifiedDate":"2023-10-13"},{"lineNumber":398,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":399,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":400,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":401,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":402,"author":{"gitId":"AlWo223"},"content":" * Parses the raw user input for a swim and returns the corresponding activity object.","lastModifiedDate":"2023-10-13"},{"lineNumber":403,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":404,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the arguments.","lastModifiedDate":"2023-10-13"},{"lineNumber":405,"author":{"gitId":"AlWo223"},"content":" * @return activity An object representing the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":406,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-13"},{"lineNumber":407,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":408,"author":{"gitId":"AlWo223"},"content":" public static Activity parseSwim(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":409,"author":{"gitId":"AlWo223"},"content":" final int durationIndex \u003d arguments.indexOf(Parameter.DURATION_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":410,"author":{"gitId":"AlWo223"},"content":" final int distanceIndex \u003d arguments.indexOf(Parameter.DISTANCE_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":411,"author":{"gitId":"AlWo223"},"content":" final int datetimeIndex \u003d arguments.indexOf(Parameter.DISTANCE_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":412,"author":{"gitId":"AlWo223"},"content":" final int swimmingStyleIndex \u003d arguments.indexOf(Parameter.SWIMMING_STYLE_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":413,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":414,"author":{"gitId":"AlWo223"},"content":" checkMissingSwimArguments(durationIndex, distanceIndex, datetimeIndex, swimmingStyleIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":415,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":416,"author":{"gitId":"AlWo223"},"content":" final String caption \u003d arguments.substring(0, durationIndex).trim();","lastModifiedDate":"2023-10-13"},{"lineNumber":417,"author":{"gitId":"AlWo223"},"content":" final String duration \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":418,"author":{"gitId":"AlWo223"},"content":" arguments.substring(durationIndex + Parameter.DURATION_SEPARATOR.length(), distanceIndex).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":419,"author":{"gitId":"AlWo223"},"content":" final String distance \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":420,"author":{"gitId":"AlWo223"},"content":" arguments.substring(distanceIndex + Parameter.DISTANCE_SEPARATOR.length(), datetimeIndex).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":421,"author":{"gitId":"AlWo223"},"content":" final String datetime \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":422,"author":{"gitId":"AlWo223"},"content":" arguments.substring(datetimeIndex + Parameter.DATETIME_SEPARATOR.length(), swimmingStyleIndex).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":423,"author":{"gitId":"AlWo223"},"content":" final String swimmingStyle \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":424,"author":{"gitId":"AlWo223"},"content":" arguments.substring(swimmingStyleIndex + Parameter.SWIMMING_STYLE_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":425,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":426,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime, swimmingStyleIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":427,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":428,"author":{"gitId":"AlWo223"},"content":" final int durationParsed \u003d parseDuration(duration);","lastModifiedDate":"2023-10-13"},{"lineNumber":429,"author":{"gitId":"AlWo223"},"content":" final int distanceParsed \u003d parseDistance(distance);","lastModifiedDate":"2023-10-13"},{"lineNumber":430,"author":{"gitId":"AlWo223"},"content":" final LocalDateTime datetimeParsed \u003d parseDateTime(datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":431,"author":{"gitId":"AlWo223"},"content":" final Swim.SwimmingStyle swimmingStyleParsed \u003d parseSwimmingStyle(swimmingStyle);","lastModifiedDate":"2023-10-13"},{"lineNumber":432,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":433,"author":{"gitId":"AlWo223"},"content":" return new Swim(caption, durationParsed, distanceParsed, datetimeParsed, swimmingStyleParsed);","lastModifiedDate":"2023-10-18"},{"lineNumber":434,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":435,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":436,"author":{"gitId":"AlWo223"},"content":" public static Swim.SwimmingStyle parseSwimmingStyle(String swimmingStyle) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":437,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":438,"author":{"gitId":"AlWo223"},"content":" return Swim.SwimmingStyle.valueOf(swimmingStyle);","lastModifiedDate":"2023-10-13"},{"lineNumber":439,"author":{"gitId":"AlWo223"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-13"},{"lineNumber":440,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_SWIMMINGSTYLE_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":441,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":442,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":443,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":444,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":445,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":446,"author":{"gitId":"DaDevChia"},"content":" * Parses the raw user input for an add sleep command and returns the corresponding command object.","lastModifiedDate":"2023-10-16"},{"lineNumber":447,"author":{"gitId":"DaDevChia"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-16"},{"lineNumber":448,"author":{"gitId":"DaDevChia"},"content":" * @return An object representing the slee0 add command.","lastModifiedDate":"2023-10-16"},{"lineNumber":449,"author":{"gitId":"DaDevChia"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-16"},{"lineNumber":450,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":451,"author":{"gitId":"DaDevChia"},"content":" public static AddSleepCommand parseSleepAdd(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-12"},{"lineNumber":452,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":453,"author":{"gitId":"DaDevChia"},"content":" final String startMarkerConstant \u003d \"start/\";","lastModifiedDate":"2023-10-17"},{"lineNumber":454,"author":{"gitId":"DaDevChia"},"content":" final String endMarkerConstant \u003d \"end/\";","lastModifiedDate":"2023-10-17"},{"lineNumber":455,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":456,"author":{"gitId":"DaDevChia"},"content":" int startMarkerPos \u003d commandArgs.indexOf(startMarkerConstant);","lastModifiedDate":"2023-10-14"},{"lineNumber":457,"author":{"gitId":"DaDevChia"},"content":" int endMarkerPos \u003d commandArgs.indexOf(endMarkerConstant);","lastModifiedDate":"2023-10-14"},{"lineNumber":458,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":459,"author":{"gitId":"DaDevChia"},"content":" if (startMarkerPos \u003d\u003d -1 || endMarkerPos \u003d\u003d -1 || startMarkerPos \u003e endMarkerPos) {","lastModifiedDate":"2023-10-17"},{"lineNumber":460,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME);","lastModifiedDate":"2023-10-17"},{"lineNumber":461,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":462,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":463,"author":{"gitId":"DaDevChia"},"content":" String startTimeStr \u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":464,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(startMarkerPos + startMarkerConstant.length(), endMarkerPos).trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":465,"author":{"gitId":"DaDevChia"},"content":" String endTimeStr \u003d commandArgs.substring(endMarkerPos + endMarkerConstant.length()).trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":466,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":467,"author":{"gitId":"DaDevChia"},"content":" if (startTimeStr.isEmpty() || endTimeStr.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":468,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME);","lastModifiedDate":"2023-10-17"},{"lineNumber":469,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":470,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":471,"author":{"gitId":"DaDevChia"},"content":" // Convert the strings to LocalDateTime","lastModifiedDate":"2023-10-17"},{"lineNumber":472,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime startTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":473,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime endTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":474,"author":{"gitId":"DaDevChia"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":475,"author":{"gitId":"DaDevChia"},"content":" startTime \u003d LocalDateTime.parse(startTimeStr, sleepTimeFormatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":476,"author":{"gitId":"DaDevChia"},"content":" endTime \u003d LocalDateTime.parse(endTimeStr, sleepTimeFormatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":477,"author":{"gitId":"DaDevChia"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":478,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_INVALID_DATE_TIME_FORMAT);","lastModifiedDate":"2023-10-17"},{"lineNumber":479,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":480,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":481,"author":{"gitId":"DaDevChia"},"content":" //Check if the start time is before the end time","lastModifiedDate":"2023-10-17"},{"lineNumber":482,"author":{"gitId":"DaDevChia"},"content":" if (startTime.isAfter(endTime)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":483,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_END_BEFORE_START);","lastModifiedDate":"2023-10-17"},{"lineNumber":484,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":485,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":486,"author":{"gitId":"DaDevChia"},"content":" return new AddSleepCommand(startTime, endTime);","lastModifiedDate":"2023-10-12"},{"lineNumber":487,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":488,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":489,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":490,"author":{"gitId":"DaDevChia"},"content":" * Parses the raw user input for a delete sleep command and returns the corresponding command object.","lastModifiedDate":"2023-10-16"},{"lineNumber":491,"author":{"gitId":"DaDevChia"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-16"},{"lineNumber":492,"author":{"gitId":"DaDevChia"},"content":" * @return An object representing the sleep delete command.","lastModifiedDate":"2023-10-16"},{"lineNumber":493,"author":{"gitId":"DaDevChia"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-16"},{"lineNumber":494,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":495,"author":{"gitId":"DaDevChia"},"content":" public static DeleteSleepCommand parseSleepDelete(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-12"},{"lineNumber":496,"author":{"gitId":"DaDevChia"},"content":" int index;","lastModifiedDate":"2023-10-12"},{"lineNumber":497,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":498,"author":{"gitId":"DaDevChia"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":499,"author":{"gitId":"DaDevChia"},"content":" index \u003d Integer.parseInt(commandArgs.trim());","lastModifiedDate":"2023-10-12"},{"lineNumber":500,"author":{"gitId":"DaDevChia"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":501,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_DELETE_NO_INDEX);","lastModifiedDate":"2023-10-17"},{"lineNumber":502,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":503,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":504,"author":{"gitId":"DaDevChia"},"content":" return new DeleteSleepCommand(index);","lastModifiedDate":"2023-10-12"},{"lineNumber":505,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":506,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":507,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":508,"author":{"gitId":"DaDevChia"},"content":" * Parses the raw user input for an edit sleep command and returns the corresponding command object.","lastModifiedDate":"2023-10-16"},{"lineNumber":509,"author":{"gitId":"DaDevChia"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-16"},{"lineNumber":510,"author":{"gitId":"DaDevChia"},"content":" * @return An object representing the sleep edit command.","lastModifiedDate":"2023-10-16"},{"lineNumber":511,"author":{"gitId":"DaDevChia"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-16"},{"lineNumber":512,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":513,"author":{"gitId":"DaDevChia"},"content":" public static EditSleepCommand parseSleepEdit(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-12"},{"lineNumber":514,"author":{"gitId":"DaDevChia"},"content":" final String startMarkerConstant \u003d \"start/\";","lastModifiedDate":"2023-10-17"},{"lineNumber":515,"author":{"gitId":"DaDevChia"},"content":" final String endMarkerConstant \u003d \"end/\";","lastModifiedDate":"2023-10-17"},{"lineNumber":516,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":517,"author":{"gitId":"DaDevChia"},"content":" int startMarkerPos \u003d commandArgs.indexOf(startMarkerConstant);","lastModifiedDate":"2023-10-14"},{"lineNumber":518,"author":{"gitId":"DaDevChia"},"content":" int endMarkerPos \u003d commandArgs.indexOf(endMarkerConstant);","lastModifiedDate":"2023-10-14"},{"lineNumber":519,"author":{"gitId":"DaDevChia"},"content":" int index;","lastModifiedDate":"2023-10-12"},{"lineNumber":520,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":521,"author":{"gitId":"DaDevChia"},"content":" if (startMarkerPos \u003d\u003d -1 || endMarkerPos \u003d\u003d -1 || startMarkerPos \u003e endMarkerPos) {","lastModifiedDate":"2023-10-17"},{"lineNumber":522,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME);","lastModifiedDate":"2023-10-17"},{"lineNumber":523,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":524,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":525,"author":{"gitId":"DaDevChia"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":526,"author":{"gitId":"DaDevChia"},"content":" index \u003d Integer.parseInt(commandArgs.substring(0, startMarkerPos).trim());","lastModifiedDate":"2023-10-12"},{"lineNumber":527,"author":{"gitId":"DaDevChia"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":528,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_EDIT_NO_INDEX);","lastModifiedDate":"2023-10-17"},{"lineNumber":529,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":530,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":531,"author":{"gitId":"DaDevChia"},"content":" String startTimeStr \u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":532,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(startMarkerPos + startMarkerConstant.length(), endMarkerPos).trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":533,"author":{"gitId":"DaDevChia"},"content":" String endTimeStr \u003d commandArgs.substring(endMarkerPos + endMarkerConstant.length()).trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":534,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":535,"author":{"gitId":"DaDevChia"},"content":" if (startTimeStr.isEmpty() || endTimeStr.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":536,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME);","lastModifiedDate":"2023-10-17"},{"lineNumber":537,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":538,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":539,"author":{"gitId":"DaDevChia"},"content":" // Convert the strings to LocalDateTime","lastModifiedDate":"2023-10-17"},{"lineNumber":540,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime startTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":541,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime endTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":542,"author":{"gitId":"DaDevChia"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":543,"author":{"gitId":"DaDevChia"},"content":" startTime \u003d LocalDateTime.parse(startTimeStr, sleepTimeFormatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":544,"author":{"gitId":"DaDevChia"},"content":" endTime \u003d LocalDateTime.parse(endTimeStr, sleepTimeFormatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":545,"author":{"gitId":"DaDevChia"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":546,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_INVALID_DATE_TIME_FORMAT);","lastModifiedDate":"2023-10-17"},{"lineNumber":547,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":548,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":549,"author":{"gitId":"DaDevChia"},"content":" //Check if the start time is before the end time","lastModifiedDate":"2023-10-17"},{"lineNumber":550,"author":{"gitId":"DaDevChia"},"content":" if (startTime.isAfter(endTime)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":551,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_END_BEFORE_START);","lastModifiedDate":"2023-10-17"},{"lineNumber":552,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":553,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":554,"author":{"gitId":"DaDevChia"},"content":" return new EditSleepCommand(index, startTime, endTime);","lastModifiedDate":"2023-10-12"},{"lineNumber":555,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":556,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":557,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":558,"author":{"gitId":"yicheng-toh"},"content":" * @param commandArgs User provided data to create goals for the nutrients defined.","lastModifiedDate":"2023-10-15"},{"lineNumber":559,"author":{"gitId":"yicheng-toh"},"content":" * @return a list of diet goals for further checking in the Set Diet Goal Command.","lastModifiedDate":"2023-10-15"},{"lineNumber":560,"author":{"gitId":"yicheng-toh"},"content":" * @throws AthletiException Invalid input by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":561,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":562,"author":{"gitId":"yicheng-toh"},"content":" public static ArrayList\u003cDietGoal\u003e parseDietGoalSetEdit(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-16"},{"lineNumber":563,"author":{"gitId":"yicheng-toh"},"content":" if (commandArgs.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":564,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_INSUFFICIENT_INPUT);","lastModifiedDate":"2023-10-22"},{"lineNumber":565,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":566,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":567,"author":{"gitId":"yicheng-toh"},"content":" String[] nutrientAndTargetValues;","lastModifiedDate":"2023-10-15"},{"lineNumber":568,"author":{"gitId":"yicheng-toh"},"content":" if (commandArgs.contains(\" \")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":569,"author":{"gitId":"yicheng-toh"},"content":" nutrientAndTargetValues \u003d commandArgs.split(\"\\\\s+\");","lastModifiedDate":"2023-10-15"},{"lineNumber":570,"author":{"gitId":"yicheng-toh"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":571,"author":{"gitId":"yicheng-toh"},"content":" nutrientAndTargetValues \u003d new String[]{commandArgs};","lastModifiedDate":"2023-10-15"},{"lineNumber":572,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":573,"author":{"gitId":"yicheng-toh"},"content":" String[] nutrientAndTargetValue;","lastModifiedDate":"2023-10-15"},{"lineNumber":574,"author":{"gitId":"yicheng-toh"},"content":" String nutrient;","lastModifiedDate":"2023-10-15"},{"lineNumber":575,"author":{"gitId":"yicheng-toh"},"content":" int targetValue;","lastModifiedDate":"2023-10-15"},{"lineNumber":576,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":577,"author":{"gitId":"yicheng-toh"},"content":" ArrayList\u003cDietGoal\u003e dietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":578,"author":{"gitId":"yicheng-toh"},"content":" Set\u003cString\u003e recordedNutrients \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2023-10-22"},{"lineNumber":579,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":580,"author":{"gitId":"yicheng-toh"},"content":" for (int i \u003d 0; i \u003c nutrientAndTargetValues.length; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":581,"author":{"gitId":"yicheng-toh"},"content":" nutrientAndTargetValue \u003d nutrientAndTargetValues[i].split(\"/\");","lastModifiedDate":"2023-10-15"},{"lineNumber":582,"author":{"gitId":"yicheng-toh"},"content":" nutrient \u003d nutrientAndTargetValue[0];","lastModifiedDate":"2023-10-15"},{"lineNumber":583,"author":{"gitId":"yicheng-toh"},"content":" targetValue \u003d Integer.parseInt(nutrientAndTargetValue[1]);","lastModifiedDate":"2023-10-15"},{"lineNumber":584,"author":{"gitId":"yicheng-toh"},"content":" if (targetValue \u003d\u003d 0) {","lastModifiedDate":"2023-10-15"},{"lineNumber":585,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_TARGET_VALUE_NOT_POSITIVE_INT);","lastModifiedDate":"2023-10-15"},{"lineNumber":586,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":587,"author":{"gitId":"yicheng-toh"},"content":" if (!NutrientVerifier.verify(nutrient)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":588,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_INVALID_NUTRIENT);","lastModifiedDate":"2023-10-15"},{"lineNumber":589,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":590,"author":{"gitId":"yicheng-toh"},"content":" if (recordedNutrients.contains(nutrient)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":591,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSSAGE_DIETGOAL_REPEATED_NUTRIENT);","lastModifiedDate":"2023-10-22"},{"lineNumber":592,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":593,"author":{"gitId":"yicheng-toh"},"content":" DietGoal dietGoal \u003d new DietGoal(nutrient, targetValue);","lastModifiedDate":"2023-10-15"},{"lineNumber":594,"author":{"gitId":"yicheng-toh"},"content":" dietGoals.add(dietGoal);","lastModifiedDate":"2023-10-15"},{"lineNumber":595,"author":{"gitId":"yicheng-toh"},"content":" recordedNutrients.add(nutrient);","lastModifiedDate":"2023-10-22"},{"lineNumber":596,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":597,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":598,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":599,"author":{"gitId":"yicheng-toh"},"content":" return dietGoals;","lastModifiedDate":"2023-10-15"},{"lineNumber":600,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":601,"author":{"gitId":"yicheng-toh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":602,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_TARGET_VALUE_NOT_POSITIVE_INT);","lastModifiedDate":"2023-10-15"},{"lineNumber":603,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":604,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":605,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":606,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":607,"author":{"gitId":"yicheng-toh"},"content":" * @param deleteIndexString Index of the goal to be deleted in String format","lastModifiedDate":"2023-10-17"},{"lineNumber":608,"author":{"gitId":"yicheng-toh"},"content":" * @return Index of the goal in integer format in users\u0027 perspective.","lastModifiedDate":"2023-10-17"},{"lineNumber":609,"author":{"gitId":"yicheng-toh"},"content":" * @throws AthletiException Catch invalid characters and numbers.","lastModifiedDate":"2023-10-17"},{"lineNumber":610,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":611,"author":{"gitId":"yicheng-toh"},"content":" public static int parseDietGoalDelete(String deleteIndexString) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":612,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":613,"author":{"gitId":"yicheng-toh"},"content":" int deleteIndex \u003d Integer.parseInt(deleteIndexString.trim());","lastModifiedDate":"2023-10-17"},{"lineNumber":614,"author":{"gitId":"yicheng-toh"},"content":" if (deleteIndex \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":615,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_INCORRECT_INTEGER_FORMAT);","lastModifiedDate":"2023-10-17"},{"lineNumber":616,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":617,"author":{"gitId":"yicheng-toh"},"content":" return deleteIndex;","lastModifiedDate":"2023-10-17"},{"lineNumber":618,"author":{"gitId":"yicheng-toh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":619,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_INCORRECT_INTEGER_FORMAT);","lastModifiedDate":"2023-10-17"},{"lineNumber":620,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":621,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":622,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":623,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":624,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":625,"author":{"gitId":"nihalzp"},"content":" * Parses the raw user input for a diet and returns the corresponding diet object.","lastModifiedDate":"2023-10-15"},{"lineNumber":626,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":627,"author":{"gitId":"nihalzp"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-15"},{"lineNumber":628,"author":{"gitId":"nihalzp"},"content":" * @return An object representing the diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":629,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":630,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":631,"author":{"gitId":"nihalzp"},"content":" public static Diet parseDiet(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":632,"author":{"gitId":"nihalzp"},"content":" final String caloriesMarkerConstant \u003d \"calories/\";","lastModifiedDate":"2023-10-15"},{"lineNumber":633,"author":{"gitId":"nihalzp"},"content":" final String proteinMarkerConstant \u003d \"protein/\";","lastModifiedDate":"2023-10-15"},{"lineNumber":634,"author":{"gitId":"nihalzp"},"content":" final String carbMarkerConstant \u003d \"carb/\";","lastModifiedDate":"2023-10-15"},{"lineNumber":635,"author":{"gitId":"nihalzp"},"content":" final String fatMarkerConstant \u003d \"fat/\";","lastModifiedDate":"2023-10-15"},{"lineNumber":636,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":637,"author":{"gitId":"nihalzp"},"content":" int caloriesMarkerPos \u003d commandArgs.indexOf(caloriesMarkerConstant);","lastModifiedDate":"2023-10-15"},{"lineNumber":638,"author":{"gitId":"nihalzp"},"content":" int proteinMarkerPos \u003d commandArgs.indexOf(proteinMarkerConstant);","lastModifiedDate":"2023-10-15"},{"lineNumber":639,"author":{"gitId":"nihalzp"},"content":" int carbMarkerPos \u003d commandArgs.indexOf(carbMarkerConstant);","lastModifiedDate":"2023-10-15"},{"lineNumber":640,"author":{"gitId":"nihalzp"},"content":" int fatMarkerPos \u003d commandArgs.indexOf(fatMarkerConstant);","lastModifiedDate":"2023-10-15"},{"lineNumber":641,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":642,"author":{"gitId":"nihalzp"},"content":" checkMissingDietArguments(caloriesMarkerPos, proteinMarkerPos, carbMarkerPos, fatMarkerPos);","lastModifiedDate":"2023-10-15"},{"lineNumber":643,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":644,"author":{"gitId":"nihalzp"},"content":" String calories \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":645,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(caloriesMarkerPos + caloriesMarkerConstant.length(), proteinMarkerPos)","lastModifiedDate":"2023-10-15"},{"lineNumber":646,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":647,"author":{"gitId":"nihalzp"},"content":" String protein \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":648,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(proteinMarkerPos + proteinMarkerConstant.length(), carbMarkerPos)","lastModifiedDate":"2023-10-15"},{"lineNumber":649,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":650,"author":{"gitId":"nihalzp"},"content":" String carb \u003d commandArgs.substring(carbMarkerPos + carbMarkerConstant.length(), fatMarkerPos).trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":651,"author":{"gitId":"nihalzp"},"content":" String fat \u003d commandArgs.substring(fatMarkerPos + fatMarkerConstant.length()).trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":652,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":653,"author":{"gitId":"nihalzp"},"content":" checkEmptyDietArguments(calories, protein, carb, fat);","lastModifiedDate":"2023-10-15"},{"lineNumber":654,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":655,"author":{"gitId":"nihalzp"},"content":" int caloriesParsed \u003d parseCalories(calories);","lastModifiedDate":"2023-10-15"},{"lineNumber":656,"author":{"gitId":"nihalzp"},"content":" int proteinParsed \u003d parseProtein(protein);","lastModifiedDate":"2023-10-15"},{"lineNumber":657,"author":{"gitId":"nihalzp"},"content":" int carbParsed \u003d parseCarb(carb);","lastModifiedDate":"2023-10-15"},{"lineNumber":658,"author":{"gitId":"nihalzp"},"content":" int fatParsed \u003d parseFat(fat);","lastModifiedDate":"2023-10-15"},{"lineNumber":659,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":660,"author":{"gitId":"nihalzp"},"content":" return new Diet(caloriesParsed, proteinParsed, carbParsed, fatParsed);","lastModifiedDate":"2023-10-15"},{"lineNumber":661,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":662,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":663,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":664,"author":{"gitId":"nihalzp"},"content":" * Checks if the user input for a diet contains all the required arguments.","lastModifiedDate":"2023-10-15"},{"lineNumber":665,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":666,"author":{"gitId":"nihalzp"},"content":" * @param caloriesMarkerPos The position of the calories marker.","lastModifiedDate":"2023-10-15"},{"lineNumber":667,"author":{"gitId":"nihalzp"},"content":" * @param proteinMarkerPos The position of the protein marker.","lastModifiedDate":"2023-10-15"},{"lineNumber":668,"author":{"gitId":"nihalzp"},"content":" * @param carbMarkerPos The position of the carb marker.","lastModifiedDate":"2023-10-15"},{"lineNumber":669,"author":{"gitId":"nihalzp"},"content":" * @param fatMarkerPos The position of the fat marker.","lastModifiedDate":"2023-10-15"},{"lineNumber":670,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":671,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":672,"author":{"gitId":"nihalzp"},"content":" private static void checkMissingDietArguments(int caloriesMarkerPos, int proteinMarkerPos,","lastModifiedDate":"2023-10-15"},{"lineNumber":673,"author":{"gitId":"nihalzp"},"content":" int carbMarkerPos,","lastModifiedDate":"2023-10-15"},{"lineNumber":674,"author":{"gitId":"nihalzp"},"content":" int fatMarkerPos) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":675,"author":{"gitId":"nihalzp"},"content":" if (caloriesMarkerPos \u003d\u003d -1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":676,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CALORIES_MISSING);","lastModifiedDate":"2023-10-15"},{"lineNumber":677,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":678,"author":{"gitId":"nihalzp"},"content":" if (proteinMarkerPos \u003d\u003d -1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":679,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_PROTEIN_MISSING);","lastModifiedDate":"2023-10-15"},{"lineNumber":680,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":681,"author":{"gitId":"nihalzp"},"content":" if (carbMarkerPos \u003d\u003d -1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":682,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CARB_MISSING);","lastModifiedDate":"2023-10-15"},{"lineNumber":683,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":684,"author":{"gitId":"nihalzp"},"content":" if (fatMarkerPos \u003d\u003d -1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":685,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_FAT_MISSING);","lastModifiedDate":"2023-10-15"},{"lineNumber":686,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":687,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":688,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":689,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":690,"author":{"gitId":"nihalzp"},"content":" * Checks if the user input for a diet is empty.","lastModifiedDate":"2023-10-15"},{"lineNumber":691,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":692,"author":{"gitId":"nihalzp"},"content":" * @param calories The calories input.","lastModifiedDate":"2023-10-15"},{"lineNumber":693,"author":{"gitId":"nihalzp"},"content":" * @param protein The protein input.","lastModifiedDate":"2023-10-15"},{"lineNumber":694,"author":{"gitId":"nihalzp"},"content":" * @param carb The carb input.","lastModifiedDate":"2023-10-15"},{"lineNumber":695,"author":{"gitId":"nihalzp"},"content":" * @param fat The fat input.","lastModifiedDate":"2023-10-15"},{"lineNumber":696,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":697,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":698,"author":{"gitId":"nihalzp"},"content":" private static void checkEmptyDietArguments(String calories, String protein, String carb,","lastModifiedDate":"2023-10-15"},{"lineNumber":699,"author":{"gitId":"nihalzp"},"content":" String fat) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":700,"author":{"gitId":"nihalzp"},"content":" if (calories.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":701,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CALORIES_EMPTY);","lastModifiedDate":"2023-10-15"},{"lineNumber":702,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":703,"author":{"gitId":"nihalzp"},"content":" if (protein.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":704,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_PROTEIN_EMPTY);","lastModifiedDate":"2023-10-15"},{"lineNumber":705,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":706,"author":{"gitId":"nihalzp"},"content":" if (carb.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":707,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CARB_EMPTY);","lastModifiedDate":"2023-10-15"},{"lineNumber":708,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":709,"author":{"gitId":"nihalzp"},"content":" if (fat.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":710,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_FAT_EMPTY);","lastModifiedDate":"2023-10-15"},{"lineNumber":711,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":712,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":713,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":714,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":715,"author":{"gitId":"nihalzp"},"content":" * Parses the calories input for a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":716,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":717,"author":{"gitId":"nihalzp"},"content":" * @param calories The calories input.","lastModifiedDate":"2023-10-15"},{"lineNumber":718,"author":{"gitId":"nihalzp"},"content":" * @return The parsed calories.","lastModifiedDate":"2023-10-15"},{"lineNumber":719,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":720,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":721,"author":{"gitId":"nihalzp"},"content":" private static int parseCalories(String calories) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":722,"author":{"gitId":"nihalzp"},"content":" int caloriesParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":723,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":724,"author":{"gitId":"nihalzp"},"content":" caloriesParsed \u003d Integer.parseInt(calories);","lastModifiedDate":"2023-10-15"},{"lineNumber":725,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":726,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CALORIES_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":727,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":728,"author":{"gitId":"nihalzp"},"content":" return caloriesParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":729,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":730,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":731,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":732,"author":{"gitId":"nihalzp"},"content":" * Parses the protein input for a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":733,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":734,"author":{"gitId":"nihalzp"},"content":" * @param protein The protein input.","lastModifiedDate":"2023-10-15"},{"lineNumber":735,"author":{"gitId":"nihalzp"},"content":" * @return The parsed protein.","lastModifiedDate":"2023-10-15"},{"lineNumber":736,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":737,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":738,"author":{"gitId":"nihalzp"},"content":" public static int parseProtein(String protein) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":739,"author":{"gitId":"nihalzp"},"content":" int proteinParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":740,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":741,"author":{"gitId":"nihalzp"},"content":" proteinParsed \u003d Integer.parseInt(protein);","lastModifiedDate":"2023-10-15"},{"lineNumber":742,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":743,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_PROTEIN_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":744,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":745,"author":{"gitId":"nihalzp"},"content":" return proteinParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":746,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":747,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":748,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":749,"author":{"gitId":"nihalzp"},"content":" * Parses the carb input for a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":750,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":751,"author":{"gitId":"nihalzp"},"content":" * @param carb The carb input.","lastModifiedDate":"2023-10-15"},{"lineNumber":752,"author":{"gitId":"nihalzp"},"content":" * @return The parsed carb.","lastModifiedDate":"2023-10-15"},{"lineNumber":753,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":754,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":755,"author":{"gitId":"nihalzp"},"content":" public static int parseCarb(String carb) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":756,"author":{"gitId":"nihalzp"},"content":" int carbParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":757,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":758,"author":{"gitId":"nihalzp"},"content":" carbParsed \u003d Integer.parseInt(carb);","lastModifiedDate":"2023-10-15"},{"lineNumber":759,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":760,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CARB_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":761,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":762,"author":{"gitId":"nihalzp"},"content":" return carbParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":763,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":764,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":765,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":766,"author":{"gitId":"nihalzp"},"content":" * Parses the fat input for a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":767,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":768,"author":{"gitId":"nihalzp"},"content":" * @param fat The fat input.","lastModifiedDate":"2023-10-15"},{"lineNumber":769,"author":{"gitId":"nihalzp"},"content":" * @return The parsed fat.","lastModifiedDate":"2023-10-15"},{"lineNumber":770,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":771,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":772,"author":{"gitId":"nihalzp"},"content":" public static int parseFat(String fat) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":773,"author":{"gitId":"nihalzp"},"content":" int fatParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":774,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":775,"author":{"gitId":"nihalzp"},"content":" fatParsed \u003d Integer.parseInt(fat);","lastModifiedDate":"2023-10-15"},{"lineNumber":776,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":777,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_FAT_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":778,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":779,"author":{"gitId":"nihalzp"},"content":" return fatParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":780,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":781,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":782,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":783,"author":{"gitId":"nihalzp"},"content":" * Parses the index of a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":784,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":785,"author":{"gitId":"nihalzp"},"content":" * @param commandArgs The raw user input containing the index.","lastModifiedDate":"2023-10-15"},{"lineNumber":786,"author":{"gitId":"nihalzp"},"content":" * @return The parsed index.","lastModifiedDate":"2023-10-15"},{"lineNumber":787,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":788,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":789,"author":{"gitId":"nihalzp"},"content":" public static int parseDietIndex(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":790,"author":{"gitId":"nihalzp"},"content":" int index;","lastModifiedDate":"2023-10-15"},{"lineNumber":791,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":792,"author":{"gitId":"nihalzp"},"content":" index \u003d Integer.parseInt(commandArgs.trim());","lastModifiedDate":"2023-10-15"},{"lineNumber":793,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":794,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_DIET_INDEX_TYPE_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":795,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":796,"author":{"gitId":"nihalzp"},"content":" return index;","lastModifiedDate":"2023-10-15"},{"lineNumber":797,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":798,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":49,"DaDevChia":122,"AlWo223":331,"yicheng-toh":93,"nihalzp":203}},{"path":"src/main/java/athleticli/ui/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.ui;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":" * Defines the behavior of the CLI.","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"public class Ui {","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":" private final Scanner in;","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" private final PrintStream out;","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" * Constructs a \u003ccode\u003eUi\u003c/code\u003e object, whose input \u003ccode\u003ein\u003c/code\u003e","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" * and output \u003ccode\u003eout\u003c/code\u003e is the standard input and the standard","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" * output, respectively.","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" public Ui() {","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" this(System.in, System.out);","lastModifiedDate":"2023-10-08"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" * Constructs a \u003ccode\u003eUi\u003c/code\u003e object, whose input is an \u003ccode\u003eInputStream\u003c/code\u003e","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" * object \u003ccode\u003ein\u003c/code\u003e and output is an \u003ccode\u003ePrintStream\u003c/code\u003e object \u003ccode\u003eout\u003c/code\u003e.","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" * @param in The \u003ccode\u003eInputStream\u003c/code\u003e accepting the user\u0027s input.","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" * @param out The \u003ccode\u003ePrintStream\u003c/code\u003e displaying the program\u0027s output.","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" public Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" assert in !\u003d null : \"Input stream `in` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" assert out !\u003d null : \"Print stream `out` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-10-08"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" this.out \u003d out;","lastModifiedDate":"2023-10-08"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" * Returns the user\u0027s input.","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" * @return The user\u0027s input.","lastModifiedDate":"2023-10-08"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" public String getUserCommand() {","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" out.print(Message.PROMPT);","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" return in.nextLine();","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":" * Shows the \u003ccode\u003emessages\u003c/code\u003e in a beautiful format.","lastModifiedDate":"2023-10-08"},{"lineNumber":49,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":50,"author":{"gitId":"skylee03"},"content":" * @param messages The messages to be shown.","lastModifiedDate":"2023-10-08"},{"lineNumber":51,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":" public void showMessages(String... messages) {","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":" assert messages !\u003d null : \"Messages should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":" out.print(Message.LINE);","lastModifiedDate":"2023-10-08"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" for (String message : messages) {","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":" out.println(Message.PREFIX_MESSAGE + message);","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":" out.println(Message.LINE);","lastModifiedDate":"2023-10-08"},{"lineNumber":59,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":60,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":61,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" * Shows message for exception \u003ccode\u003ee\u003c/code\u003e.","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":" * @param e The exception whose message will be shown.","lastModifiedDate":"2023-10-08"},{"lineNumber":65,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":" public void showException(Exception e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":" assert e !\u003d null : \"Exception `e` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":" showMessages(Message.PREFIX_EXCEPTION + e.getMessage());","lastModifiedDate":"2023-10-08"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":" * Shows the welcome message.","lastModifiedDate":"2023-10-08"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":" public void showWelcome() {","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":" showMessages(Message.MESSAGE_HELLO);","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":77}},{"path":"src/test/java/athleticli/commands/activity/AddActivityCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Run;","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"class AddActivityCommandTest {","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Night Run\";","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final int DURATION \u003d 85;","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 18120;","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 10, 10, 23, 21);","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private static final int ELEVATION \u003d 60;","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private Run run;","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" private AddActivityCommand addActivityCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" private Data data;","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" void setUp() {","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" run \u003d new Run(CAPTION, DURATION, DISTANCE, DATE, ELEVATION);","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" addActivityCommand \u003d new AddActivityCommand(run);","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" void execute() {","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" String[] expected \u003d {\"Well done! I\u0027ve added this activity:\", run.toString(), \"Now you have tracked your \" +","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" \"first activity. This is just the beginning!\"};","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d addActivityCommand.execute(data);","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":41}},{"path":"src/test/java/athleticli/commands/diet/AddDietCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" * Tests the add diet commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":"public class AddDietCommandTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" private static final int CALORIES \u003d 100;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 20;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" private static final int CARB \u003d 30;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" private static final int FAT \u003d 40;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" private Diet diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" private AddDietCommand addDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" private Data data;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" addDietCommand \u003d new AddDietCommand(diet);","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Well done! I\u0027ve added this diet:\", diet.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked your \" + \"first diet. This is just the beginning!\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d addDietCommand.execute(data);","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":39}},{"path":"src/test/java/athleticli/commands/diet/DeleteDietCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" * Tests the delete diet commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":"public class DeleteDietCommandTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" private static final int CALORIES \u003d 100;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 20;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" private static final int CARB \u003d 30;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" private static final int FAT \u003d 40;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" private Diet diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" private DeleteDietCommand deleteDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" private Data data;","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" deleteDietCommand \u003d new DeleteDietCommand(1);","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" data.getDiets().add(diet);","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" void execute() throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Noted. I\u0027ve removed this diet:\", diet.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked a total of 0 diets. Keep grinding!\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d deleteDietCommand.execute(data);","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" void execute_invalidIndex_expectException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" deleteDietCommand \u003d new DeleteDietCommand(2);","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e deleteDietCommand.execute(data));","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" void execute_negativeIndex_expectException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":" deleteDietCommand \u003d new DeleteDietCommand(-1);","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e deleteDietCommand.execute(data));","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":53}},{"path":"src/test/java/athleticli/commands/diet/DeleteDietGoalCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoal;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":"class DeleteDietGoalCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":" private Data data;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":" private DietGoal dietGoalFats;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e filledInputDietGoals;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":" void setUp() {","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" dietGoalFats \u003d new DietGoal(\"fats\", 10000);","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals.add(dietGoalFats);","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" void execute_deleteOneItemFromFilledDietGoalList_expectCorrectMessage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" System.out.println(data.getDietGoals());","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":" DeleteDietGoalCommand deleteDietGoalCommand \u003d new DeleteDietGoalCommand(1);","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":" String[] expectedString \u003d new String[]{\"The following goal has been deleted:\\n\", \"fats intake progress: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" \"(0/10000)\\n\",};","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, deleteDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" void execute_deleteOneItemFromEmptyDietGoalList_expectAthletiException() {","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" DeleteDietGoalCommand deleteDietGoalCommand \u003d new DeleteDietGoalCommand(100);","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e deleteDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"yicheng-toh":52}},{"path":"src/test/java/athleticli/commands/diet/EditDietGoalCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoal;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"class EditDietGoalCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e emptyInputDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e filledInputDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e filledChangedInputDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":" private DietGoal dietGoalFats;","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" private DietGoal newDietGoalFats;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":" private Data data;","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":" @BeforeEach","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" void setUp() {","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" dietGoalFats \u003d new DietGoal(\"fats\", 10000);","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":" newDietGoalFats \u003d new DietGoal(\"fats\", 10);","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" emptyInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals.add(dietGoalFats);","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" filledChangedInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" filledChangedInputDietGoals.add(newDietGoalFats);","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" void execute_emptyInputList_expectNoError() {","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":" EditDietGoalCommand editDietGoalCommand \u003d new EditDietGoalCommand(emptyInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" assertDoesNotThrow(() -\u003e editDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":" void execute_emptyInputList_expectCorrectMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" EditDietGoalCommand editDietGoalCommand \u003d new EditDietGoalCommand(emptyInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" String[] expectedString \u003d {\"These are your goal(s):\\n\", \"\", \"Now you have 0 diet goal(s).\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" String[] actualString \u003d editDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, actualString);","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":" void execute_oneNewInputDietGoal_expectError() {","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":" EditDietGoalCommand editDietGoalCommand \u003d new EditDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e editDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"yicheng-toh"},"content":" void execute_oneExistingInputDietGoal_expectNoError() {","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"yicheng-toh"},"content":" EditDietGoalCommand editDietGoalCommand \u003d new EditDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"yicheng-toh"},"content":" setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"yicheng-toh"},"content":" assertDoesNotThrow(() -\u003e editDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"yicheng-toh"},"content":" void execute_changeOneExistingInputDietGoal_expectCorrectMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"yicheng-toh"},"content":" EditDietGoalCommand editDietGoalCommand \u003d new EditDietGoalCommand(filledChangedInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"yicheng-toh"},"content":" String[] expectedString \u003d {\"These are your goal(s):\\n\", \"\\t1. fats intake progress: \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"yicheng-toh"},"content":" \"(0/10)\\n\", \"Now you have 1 diet goal(s).\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"yicheng-toh"},"content":" setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, editDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"yicheng-toh":90}},{"path":"src/test/java/athleticli/commands/diet/ListDietCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" * Tests the list diet commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"public class ListDietCommandTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" private static final int CALORIES \u003d 100;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 20;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" private static final int CARB \u003d 30;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" private static final int FAT \u003d 40;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" private Diet diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" private ListDietCommand listDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" private Data data;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" listDietCommand \u003d new ListDietCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" data.getDiets().add(diet);","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Here are the diets in your list:\", \"1. \" + diet.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked a total of 1 diets. Keep grinding!\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d listDietCommand.execute(data);","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":39}},{"path":"src/test/java/athleticli/commands/diet/ListDietGoalCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoal;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"class ListDietGoalCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e filledInputDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":" private DietGoal dietGoalFats;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":" private Data data;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" @BeforeEach","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":" void setUp() {","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":" dietGoalFats \u003d new DietGoal(\"fats\", 10000);","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals.add(dietGoalFats);","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":" void execute_emptyInputList_returnNoDietGoalMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" String[] expectedString \u003d {\"There are no goals at the moment. Add a diet goal to start.\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" ListDietGoalCommand listDietGoalCommand \u003d new ListDietGoalCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, listDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" void execute_filledInputList_returnDietGoalPresentMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":" String[] expectedString \u003d {\"These are your goal(s):\\n\", \"\\t1. fats intake progress: \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" \"(0/10000)\\n\", \"Now you have 1 diet goal(s).\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":" ListDietGoalCommand listDietGoalCommand \u003d new ListDietGoalCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, listDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":" assert (false);","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"yicheng-toh":49}},{"path":"src/test/java/athleticli/commands/diet/SetDietGoalCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoal;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":"class SetDietGoalCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e emptyInputDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e filledInputDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":" private DietGoal dietGoalFats;","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" private Data data;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":" @BeforeEach","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":" void setUp() {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" emptyInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" dietGoalFats \u003d new DietGoal(\"fats\", 10000);","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals.add(dietGoalFats);","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" void execute_emptyInputList_expectNoError() {","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(emptyInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" assertDoesNotThrow(() -\u003e setDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" void execute_emptyInputList_expectCorrectMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(emptyInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" String[] expectedString \u003d {\"These are your goal(s):\\n\", \"\", \"Now you have 0 diet goal(s).\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" String[] actualString \u003d setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, actualString);","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":" void execute_oneNewInputDietGoal_expectNoError() {","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"yicheng-toh"},"content":" assertDoesNotThrow(() -\u003e setDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":" void execute_oneNewInputDietGoal_expectCorrectMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"yicheng-toh"},"content":" String[] expectedString \u003d {\"These are your goal(s):\\n\", \"\\t1. fats intake progress: \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"yicheng-toh"},"content":" \"(0/10000)\\n\", \"Now you have 1 diet goal(s).\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"yicheng-toh"},"content":" String[] actualString \u003d setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, actualString);","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"yicheng-toh"},"content":" void execute_oneExistingInputDietGoal_expectAthletiException() {","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"yicheng-toh"},"content":" setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e setDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"yicheng-toh":80}},{"path":"src/test/java/athleticli/commands/sleep/AddSleepCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.SleepList;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":"public class AddSleepCommandTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":" private Data data;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" public void setup() {","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" data.setSleeps(new SleepList());","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" public void testExecuteWithValidInput() {","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime from \u003d LocalDateTime.of(2023, 10, 17, 22, 0);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime to \u003d LocalDateTime.of(2023, 10, 18, 6, 0);","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":" AddSleepCommand command \u003d new AddSleepCommand(from, to);","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":" ","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":" String[] expected \u003d {","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":" \"Got it. I\u0027ve added this sleep record:\",","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"DaDevChia"},"content":" \"sleep record from 17-10-2023 22:00 to 18-10-2023 06:00\",","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":" \"Now you have 1 sleep records in the list.\"","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"DaDevChia"},"content":" ","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":" assertArrayEquals(expected, command.execute(data));","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"DaDevChia"},"content":" public void testExecuteCountingSleepRecords() {","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime from1 \u003d LocalDateTime.of(2023, 10, 17, 22, 0);","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime to1 \u003d LocalDateTime.of(2023, 10, 18, 6, 0);","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"DaDevChia"},"content":" AddSleepCommand command1 \u003d new AddSleepCommand(from1, to1);","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":" command1.execute(data); // Add first sleep record","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime from2 \u003d LocalDateTime.of(2023, 10, 18, 22, 0);","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime to2 \u003d LocalDateTime.of(2023, 10, 19, 6, 0);","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"DaDevChia"},"content":" AddSleepCommand command2 \u003d new AddSleepCommand(from2, to2);","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"DaDevChia"},"content":" String[] expected \u003d {","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"DaDevChia"},"content":" \"Got it. I\u0027ve added this sleep record:\",","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"DaDevChia"},"content":" \"sleep record from 18-10-2023 22:00 to 19-10-2023 06:00\",","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"DaDevChia"},"content":" \"Now you have 2 sleep records in the list.\"","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"DaDevChia"},"content":" ","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"DaDevChia"},"content":" assertArrayEquals(expected, command2.execute(data));","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"DaDevChia":57}},{"path":"src/test/java/athleticli/commands/sleep/DeleteSleepCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.Sleep;","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.SleepList;","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":"public class DeleteSleepCommandTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" private Data data;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" private Sleep sleep1;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" private Sleep sleep2;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" public void setup() {","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" SleepList sleepList \u003d new SleepList();","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" sleep1 \u003d new Sleep(LocalDateTime.of(2023, 10, 17, 22, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 18, 6, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":" sleep2 \u003d new Sleep(LocalDateTime.of(2023, 10, 18, 22, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 19, 6, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep1);","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep2);","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":" data.setSleeps(sleepList);","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"DaDevChia"},"content":" public void testExecuteWithValidIndex() throws AthletiException {","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"DaDevChia"},"content":" DeleteSleepCommand command \u003d new DeleteSleepCommand(1);","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"DaDevChia"},"content":" String[] expected \u003d {","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"DaDevChia"},"content":" \"Got it. I\u0027ve deleted this sleep record at index 1: sleep record from 17-10-2023 22:00 to 18-10-2023 06:00\"","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"DaDevChia"},"content":" assertArrayEquals(expected, command.execute(data));","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":" public void testExecuteWithInvalidIndex() throws AthletiException {","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"DaDevChia"},"content":" DeleteSleepCommand commandNegative \u003d new DeleteSleepCommand(-1);","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e commandNegative.execute(data));","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"DaDevChia"},"content":" DeleteSleepCommand commandZero \u003d new DeleteSleepCommand(0);","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e commandZero.execute(data));","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"DaDevChia"},"content":" DeleteSleepCommand commandBeyond \u003d new DeleteSleepCommand(3); // Only 2 records in the list.","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e commandBeyond.execute(data));","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"DaDevChia"},"content":" public void testExecuteWithEmptyList() throws AthletiException {","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"DaDevChia"},"content":" data.setSleeps(new SleepList()); // Empty list","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"DaDevChia"},"content":" DeleteSleepCommand command \u003d new DeleteSleepCommand(1);","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e command.execute(data));","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"DaDevChia":63}},{"path":"src/test/java/athleticli/commands/sleep/EditSleepCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.Sleep;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.SleepList;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":"public class EditSleepCommandTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" private Data data;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" private Sleep sleep1;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" private Sleep sleep2;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" public void setup() {","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" SleepList sleepList \u003d new SleepList();","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" sleep1 \u003d new Sleep(LocalDateTime.of(2023, 10, 17, 22, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 18, 6, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":" sleep2 \u003d new Sleep(LocalDateTime.of(2023, 10, 18, 22, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 19, 6, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep1);","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep2);","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":" data.setSleeps(sleepList);","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"DaDevChia"},"content":" public void testExecuteWithValidIndex() throws AthletiException {","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"DaDevChia"},"content":" EditSleepCommand command \u003d new EditSleepCommand(1, LocalDateTime.of(2023, 10, 17, 23, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 18, 7, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"DaDevChia"},"content":" String[] expected \u003d {","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"DaDevChia"},"content":" \"Got it. I\u0027ve changed this sleep record at index 1:\",","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"DaDevChia"},"content":" \"original: sleep record from 17-10-2023 22:00 to 18-10-2023 06:00\",","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"DaDevChia"},"content":" \"to new: sleep record from 17-10-2023 23:00 to 18-10-2023 07:00\",","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"DaDevChia"},"content":" assertArrayEquals(expected, command.execute(data));","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"DaDevChia"},"content":" public void testExecuteWithInvalidIndex() {","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"DaDevChia"},"content":" EditSleepCommand commandNegative \u003d new EditSleepCommand(-1, LocalDateTime.of(2023, 10, 17, 23, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 18, 7, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e commandNegative.execute(data));","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"DaDevChia"},"content":" EditSleepCommand commandZero \u003d new EditSleepCommand(0, LocalDateTime.of(2023, 10, 17, 23, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 18, 7, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e commandZero.execute(data));","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"DaDevChia"},"content":" EditSleepCommand commandBeyond \u003d new EditSleepCommand(3, LocalDateTime.of(2023, 10, 17, 23, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 18, 7, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e commandBeyond.execute(data));","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-14"},{"lineNumber":63,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"DaDevChia":63}},{"path":"src/test/java/athleticli/commands/sleep/ListSleepCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.Sleep;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.SleepList;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":"public class ListSleepCommandTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":" private Data data;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" private Sleep sleep1;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" private Sleep sleep2;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" public void setup() {","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" SleepList sleepList \u003d new SleepList();","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" sleep1 \u003d new Sleep(LocalDateTime.of(2023, 10, 17, 22, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 18, 6, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" sleep2 \u003d new Sleep(LocalDateTime.of(2023, 10, 18, 22, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 19, 6, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep1);","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep2);","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":" data.setSleeps(sleepList);","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"DaDevChia"},"content":" public void testExecuteWithRecords() {","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":" ListSleepCommand command \u003d new ListSleepCommand();","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"DaDevChia"},"content":" String expectedList \u003d \"1. sleep record from 17-10-2023 22:00 to 18-10-2023 06:00\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"DaDevChia"},"content":" \"2. sleep record from 18-10-2023 22:00 to 19-10-2023 06:00\\n\";","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"DaDevChia"},"content":" String[] expected \u003d {","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"DaDevChia"},"content":" \"Here are the sleep records in your list:\\n\",","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"DaDevChia"},"content":" expectedList","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"DaDevChia"},"content":" assertArrayEquals(expected, command.execute(data));","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"DaDevChia"},"content":" public void testExecuteWithEmptyList() {","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"DaDevChia"},"content":" data.setSleeps(new SleepList()); // Empty list","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"DaDevChia"},"content":" ListSleepCommand command \u003d new ListSleepCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"DaDevChia"},"content":" String[] expected \u003d {","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"DaDevChia"},"content":" \"You have no sleep records in your list.\"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"DaDevChia"},"content":" assertArrayEquals(expected, command.execute(data));","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"DaDevChia":55}},{"path":"src/test/java/athleticli/data/activity/ActivityTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"public class ActivityTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Sunday \u003d Runday\";","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" private static final int DURATION \u003d 84;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 18120;","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 10, 10, 23, 21);","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" private Activity activity;","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" public void setUp() {","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" activity \u003d new Activity(CAPTION, DURATION, DISTANCE, DATE);","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" public void testConstructor() {","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" assertEquals(CAPTION, activity.getCaption());","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" assertEquals(DURATION, activity.getMovingTime());","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" assertEquals(DISTANCE, activity.getDistance());","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" assertEquals(DATE, activity.getStartDateTime());","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" public void testToString_longRun() {","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Activity] Sunday \u003d Runday | Distance: 18.12 km | Time: 1h 24m | \" +","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" \"October 10, 2023 at 11:21 PM\";","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, activity.toString());","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":37}},{"path":"src/test/java/athleticli/data/activity/CycleTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"public class CycleTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Cycling in the afternoon\";","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" private static final int DURATION \u003d 133;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 40460;","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final int ELEVATION \u003d 101;","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 10, 7, 14, 0);","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private Cycle cycle;","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" public void setUp() {","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" cycle \u003d new Cycle(CAPTION, DURATION, DISTANCE, DATE, ELEVATION);","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" public void calculateAverageSpeed() {","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" double expected \u003d 18.25;","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" double actual \u003d cycle.calculateAverageSpeed();","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual, 0.005);","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" public void testToString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Cycle] Cycling in the afternoon | Distance: 40.46 km | Speed: 18.25 km/h | Time: 2h 13m | \"","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" + \"October 7, 2023 at 2:00 PM\";","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, cycle.toString());","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":37}},{"path":"src/test/java/athleticli/data/activity/RunTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"public class RunTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Night Run\";","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" private static final int DURATION \u003d 85;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 18120;","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 10, 10, 23,","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" 21);","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static final int ELEVATION \u003d 60;","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private Run run;","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" public void setUp() {","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" run \u003d new Run(CAPTION, DURATION, DISTANCE, DATE, ELEVATION);","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" public void calculateAveragePace() {","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" double averagePace \u003d run.calculateAveragePace();","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" assertEquals(4.69, averagePace, 0.005);","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" public void convertAveragePaceToString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"4:41\";","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" String actual \u003d run.convertAveragePaceToString();","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" public void testToString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Run] Night Run | Distance: 18.12 km | Pace: 4:41 /km | Time: 1h 25m | \" +","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" \"October 10, 2023 at 11:21 PM\";","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, run.toString());","lastModifiedDate":"2023-10-13"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":44}},{"path":"src/test/java/athleticli/data/activity/SwimTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"public class SwimTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Afternoon Swim\";","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" private static final int DURATION \u003d 35;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 1000;","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 8, 29, 9, 45);","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" private static final Swim.SwimmingStyle STYLE \u003d Swim.SwimmingStyle.BUTTERFLY;","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private Swim swim;","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" public void setUp() {","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" swim \u003d new Swim(CAPTION, DURATION, DISTANCE, DATE, STYLE);","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" public void calculateAverageLapTime() {","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" assertEquals(105, swim.calculateAverageLapTime());","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" public void calculateLaps() {","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" assertEquals(20, swim.calculateLaps());","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" public void testToString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Swim] Afternoon Swim | Distance: 1.00 km | Avg Lap Time: 105s | Time: 0h 35m | \" +","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" \"August 29, 2023 at 9:45 AM\";","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, swim.toString());","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":42}},{"path":"src/test/java/athleticli/data/diet/DietGoalListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.data.diet;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"class DietGoalListTest {","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 10000;","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" private DietGoal proteinGoal;","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" private DietGoalList dietGoals;","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" dietGoals \u003d new DietGoalList();","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" proteinGoal \u003d new DietGoal(\"protein\", PROTEIN);","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" void add_addOneGoal_expectSizeOne() {","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" dietGoals.add(proteinGoal);","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" assertEquals(1, dietGoals.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-11"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" void remove_removeExistingGoal_expectSizeOne() {","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" dietGoals.add(proteinGoal);","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" dietGoals.remove(0);","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" assertEquals(0, dietGoals.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-11"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" void remove_removeFromZeroGoals_expectIndexOutOfRangeError() {","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(IndexOutOfBoundsException.class, () -\u003e {","lastModifiedDate":"2023-10-11"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" dietGoals.remove(0);","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" });","lastModifiedDate":"2023-10-11"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-11"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" void get_addOneGoal_expectGetSameGoal() {","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" dietGoals.add(proteinGoal);","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" assertEquals(proteinGoal, dietGoals.get(0));","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" void size_initializeArgs_expectZero() {","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" assertEquals(0, dietGoals.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" void size_addTenGoals_expectTen() {","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" for (int i \u003d 0; i \u003c 10; i++) {","lastModifiedDate":"2023-10-10"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" dietGoals.add(proteinGoal);","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" assertEquals(10, dietGoals.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-11"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" void testToString_oneExistingGoal_expectCorrectFormat() {","lastModifiedDate":"2023-10-11"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":" dietGoals.add(proteinGoal);","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"yicheng-toh"},"content":" assertEquals(\"\\t1. protein intake progress: (0/10000)\\n\", dietGoals.toString());","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":64,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"yicheng-toh":35,"nihalzp":29}},{"path":"src/test/java/athleticli/data/diet/DietGoalTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.data.diet;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"class DietGoalTest {","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":" void getNutrients_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":" assertEquals(\"protein\", proteinGoal.getNutrients());","lastModifiedDate":"2023-10-10"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-11"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":" void setNutrients_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-11"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-11"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":" proteinGoal.setNutrients(\"Advanced Protein\");","lastModifiedDate":"2023-10-11"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":" assertEquals(\"Advanced Protein\", proteinGoal.getNutrients());","lastModifiedDate":"2023-10-11"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":" void getTargetValue_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-10"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" assertEquals(10000, proteinGoal.getTargetValue());","lastModifiedDate":"2023-10-10"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-11"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" void setTargetValue_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-11"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" proteinGoal.setTargetValue(10);","lastModifiedDate":"2023-10-11"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" assertEquals(10, proteinGoal.getTargetValue());","lastModifiedDate":"2023-10-11"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":" void getCurrentValue_initializeCommonArgs_expectZero() {","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" assertEquals(0, proteinGoal.getCurrentValue());","lastModifiedDate":"2023-10-10"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" void setCurrentValue() {","lastModifiedDate":"2023-10-10"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-10"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":" proteinGoal.setCurrentValue(20);","lastModifiedDate":"2023-10-10"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" assertEquals(20, proteinGoal.getCurrentValue());","lastModifiedDate":"2023-10-10"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" void getIsGoalAchieved_currentValueGreaterThanTargetValue_expectTrue() {","lastModifiedDate":"2023-10-10"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-10"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" proteinGoal.setCurrentValue(20000);","lastModifiedDate":"2023-10-10"},{"lineNumber":54,"author":{"gitId":"yicheng-toh"},"content":" assertTrue(proteinGoal.getIsGoalAchieved());","lastModifiedDate":"2023-10-10"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":56,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":" void getIsGoalAchieved_currentValueEqualToTargetValue_expectTrue() {","lastModifiedDate":"2023-10-10"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-10"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" proteinGoal.setCurrentValue(10000);","lastModifiedDate":"2023-10-10"},{"lineNumber":61,"author":{"gitId":"yicheng-toh"},"content":" assertTrue(proteinGoal.getIsGoalAchieved());","lastModifiedDate":"2023-10-10"},{"lineNumber":62,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":63,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":64,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":65,"author":{"gitId":"yicheng-toh"},"content":" void getIsGoalAchieved_currentValueLesserThanTargetValue_expectFalse() {","lastModifiedDate":"2023-10-10"},{"lineNumber":66,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-10"},{"lineNumber":67,"author":{"gitId":"yicheng-toh"},"content":" proteinGoal.setCurrentValue(100);","lastModifiedDate":"2023-10-10"},{"lineNumber":68,"author":{"gitId":"yicheng-toh"},"content":" assertFalse(proteinGoal.getIsGoalAchieved());","lastModifiedDate":"2023-10-10"},{"lineNumber":69,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":70,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":71,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":72,"author":{"gitId":"yicheng-toh"},"content":" void testToString_initializeCommonArgs_expectCorrectFormat() {","lastModifiedDate":"2023-10-12"},{"lineNumber":73,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-10"},{"lineNumber":74,"author":{"gitId":"yicheng-toh"},"content":" assertEquals(\"protein intake progress: (0/10000)\\n\", proteinGoal.toString());","lastModifiedDate":"2023-10-10"},{"lineNumber":75,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":76,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"yicheng-toh":75,"nihalzp":1}},{"path":"src/test/java/athleticli/data/diet/DietListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.data.diet;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"public class DietListTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" private static final int CALORIES \u003d 10000;","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 20000;","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" private static final int CARB \u003d 30000;","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" private static final int FAT \u003d 40000;","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" private DietList dietList;","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" dietList \u003d new DietList();","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" void add_addOneDiet_expectSizeOne() {","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" assertEquals(1, dietList.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" void remove_removeExistingDiet_expectSizeOne() {","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" dietList.remove(0);","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" assertEquals(0, dietList.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" void remove_removeFromZeroDiets_expectIndexOutOfRangeError() {","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" assertThrows(IndexOutOfBoundsException.class, () -\u003e {","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" dietList.remove(0);","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" });","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" void get_addOneDiet_expectGetSameDiet() {","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" assertEquals(diet, dietList.get(0));","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" void size_initializeArgs_expectZero() {","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" assertEquals(0, dietList.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" void size_addTenDiets_expectTen() {","lastModifiedDate":"2023-10-14"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c 10; i++) {","lastModifiedDate":"2023-10-14"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" assertEquals(10, dietList.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":" void testToString_oneExistingDiet_expectCorrectFormat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"1. \" + diet.toString(), dietList.toString());","lastModifiedDate":"2023-10-14"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":" void testToString_twoExistingDiets_expectCorrectFormat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":" Diet diet1 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":" Diet diet2 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":76,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet1);","lastModifiedDate":"2023-10-14"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet2);","lastModifiedDate":"2023-10-14"},{"lineNumber":78,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"1. \" + diet1.toString() + \"\\n2. \" + diet2.toString(), dietList.toString());","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":80,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":81,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":82,"author":{"gitId":"nihalzp"},"content":" void testToString_zeroExistingDiets_expectCorrectFormat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":83,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"\", dietList.toString());","lastModifiedDate":"2023-10-14"},{"lineNumber":84,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":85,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":86,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":87,"author":{"gitId":"nihalzp"},"content":" void testToString_threeExistingDiets_expectCorrectFormat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":88,"author":{"gitId":"nihalzp"},"content":" Diet diet1 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":89,"author":{"gitId":"nihalzp"},"content":" Diet diet2 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":90,"author":{"gitId":"nihalzp"},"content":" Diet diet3 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":91,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet1);","lastModifiedDate":"2023-10-14"},{"lineNumber":92,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet2);","lastModifiedDate":"2023-10-14"},{"lineNumber":93,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet3);","lastModifiedDate":"2023-10-14"},{"lineNumber":94,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"1. \" + diet1.toString() + \"\\n2. \" + diet2.toString() + \"\\n3. \" + diet3.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":" dietList.toString());","lastModifiedDate":"2023-10-14"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":97,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"nihalzp":97}},{"path":"src/test/java/athleticli/data/diet/DietTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.data.diet;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"public class DietTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":" private static final int CALORIES \u003d 10000;","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 20000;","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" private static final int CARB \u003d 30000;","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" private static final int FAT \u003d 40000;","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" private Diet diet;","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" void getCalories_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" assertEquals(CALORIES, diet.getCalories());","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" void setCalories_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" diet.setCalories(10);","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" assertEquals(10, diet.getCalories());","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" void getProtein_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" assertEquals(PROTEIN, diet.getProtein());","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" void setProtein_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" diet.setProtein(20);","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" assertEquals(20, diet.getProtein());","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" void getCarb_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" assertEquals(CARB, diet.getCarb());","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" void setCarb_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" diet.setCarb(30);","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":" assertEquals(30, diet.getCarb());","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" void getFat_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":" assertEquals(FAT, diet.getFat());","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" void setFat_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" diet.setFat(40);","lastModifiedDate":"2023-10-14"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":" assertEquals(40, diet.getFat());","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" void toString_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":" String expected \u003d \"Calories: 10000 Protein: 20000 Carb: 30000 Fat: 40000\";","lastModifiedDate":"2023-10-14"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected, diet.toString());","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"nihalzp":69}},{"path":"src/test/java/athleticli/data/sleep/SleepListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"package athleticli.data.sleep;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"public class SleepListTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":" private SleepList sleepList;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":" private Sleep sleep1;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":" private Sleep sleep2;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" public void setup() {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" sleepList \u003d new SleepList();","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" sleep1 \u003d new Sleep(LocalDateTime.of(2023, 10, 17, 22, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 18, 6, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" sleep2 \u003d new Sleep(LocalDateTime.of(2023, 10, 18, 22, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 19, 6, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" public void testToStringWithEmptyList() {","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":" assertEquals(\"\", sleepList.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"DaDevChia"},"content":" public void testToStringWithOneSleepObject() {","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep1);","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":" String expected \u003d \"1. sleep record from 17-10-2023 22:00 to 18-10-2023 06:00\\n\";","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"DaDevChia"},"content":" assertEquals(expected, sleepList.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"DaDevChia"},"content":" public void testToStringWithMultipleSleepObjects() {","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep1);","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep2);","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"DaDevChia"},"content":" String expected \u003d \"1. sleep record from 17-10-2023 22:00 to 18-10-2023 06:00\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"DaDevChia"},"content":" + \"2. sleep record from 18-10-2023 22:00 to 19-10-2023 06:00\\n\";","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":" assertEquals(expected, sleepList.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"DaDevChia"},"content":" public void testAddSleep() {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep1);","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"DaDevChia"},"content":" assertEquals(1, sleepList.size());","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"DaDevChia"},"content":" assertEquals(sleep1, sleepList.get(0));","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"DaDevChia"},"content":" public void testRemoveSleep() {","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep1);","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep2);","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"DaDevChia"},"content":" sleepList.remove(sleep1);","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"DaDevChia"},"content":" assertEquals(1, sleepList.size());","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"DaDevChia"},"content":" assertEquals(sleep2, sleepList.get(0));","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":61,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"DaDevChia":61}},{"path":"src/test/java/athleticli/data/sleep/SleepTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"package athleticli.data.sleep;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"public class SleepTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":" public void setup() {","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" from \u003d LocalDateTime.of(2023, 10, 17, 22, 0); // 17-10-2023 22:00","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" to \u003d LocalDateTime.of(2023, 10, 18, 6, 0); // 18-10-2023 06:00","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" public void testToString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" Sleep sleep \u003d new Sleep(from, to);","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" String expected \u003d \"sleep record from 17-10-2023 22:00 to 18-10-2023 06:00\";","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" assertEquals(expected, sleep.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"DaDevChia":28}},{"path":"src/test/java/athleticli/ui/NutrientVerifierTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"package athleticli.ui;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"class NutrientVerifierTest {","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":" void verify_inputApprovedNutrients_expectTrue() {","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":" assertTrue(NutrientVerifier.verify(\"fats\"));","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":" void verify_inputUnapprovedNutrients_expectFalse() {","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":" assertFalse(NutrientVerifier.verify(\"Vitamin A\"));","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"yicheng-toh":18}},{"path":"src/test/java/athleticli/ui/ParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.ui;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.ByeCommand;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.AddDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.DeleteDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.ListDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.sleep.AddSleepCommand;","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.sleep.DeleteSleepCommand;","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.EditSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.sleep.ListSleepCommand;","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"import static athleticli.ui.Parser.parseDietGoalSetEdit;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.splitCommandWordAndArgs;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertInstanceOf;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":"class ParserTest {","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" @Test","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" void splitCommandWordAndArgs_noArgs_expectTwoParts() {","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" final String commandWithNoArgs \u003d \"bye\";","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" assertEquals(splitCommandWordAndArgs(commandWithNoArgs).length, 2);","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" @Test","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" void splitCommandWordAndArgs_multipleArgs_expectTwoParts() {","lastModifiedDate":"2023-10-08"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" final String commandWithMultipleArgs \u003d \"set-diet-goal calories/1 carb/3\";","lastModifiedDate":"2023-10-08"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" assertEquals(splitCommandWordAndArgs(commandWithMultipleArgs).length, 2);","lastModifiedDate":"2023-10-08"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" @Test","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" void parseCommand_unknownCommand_expectAthletiException() {","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" final String unknownCommand \u003d \"hello\";","lastModifiedDate":"2023-10-08"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(unknownCommand));","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" @Test","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" void parseCommand_byeCommand_expectByeCommand() throws AthletiException {","lastModifiedDate":"2023-10-08"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" final String byeCommand \u003d \"bye\";","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" assertInstanceOf(ByeCommand.class, parseCommand(byeCommand));","lastModifiedDate":"2023-10-08"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":49,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_addSleepCommand_expectAddSleepCommand() throws AthletiException {","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"DaDevChia"},"content":" final String addSleepCommandString \u003d \"add-sleep start/06-10-2021 10:00 end/07-10-2021 06:00\";","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"DaDevChia"},"content":" assertInstanceOf(AddSleepCommand.class, parseCommand(addSleepCommandString));","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"DaDevChia"},"content":" @Test ","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_addSleepCommand_missingStartExpectAthletiException() {","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"DaDevChia"},"content":" final String addSleepCommandString \u003d \"add-sleep end/07-10-2021 06:00\";","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addSleepCommandString));","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":63,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_expectEditSleepCommand() throws AthletiException {","lastModifiedDate":"2023-10-14"},{"lineNumber":64,"author":{"gitId":"DaDevChia"},"content":" final String editSleepCommandString \u003d \"edit-sleep 1 start/06-10-2021 10:00 end/07-10-2021 06:00\";","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"DaDevChia"},"content":" assertInstanceOf(EditSleepCommand.class, parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-14"},{"lineNumber":66,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":67,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_missingStartExpectAthletiException() {","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"DaDevChia"},"content":" final String editSleepCommandString \u003d \"edit-sleep 1 end/07-10-2021 06:00\";","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":75,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_deleteSleepCommand_expectDeleteSleepCommand() throws AthletiException {","lastModifiedDate":"2023-10-14"},{"lineNumber":76,"author":{"gitId":"DaDevChia"},"content":" final String deleteSleepCommandString \u003d \"delete-sleep 1\";","lastModifiedDate":"2023-10-14"},{"lineNumber":77,"author":{"gitId":"DaDevChia"},"content":" assertInstanceOf(DeleteSleepCommand.class, parseCommand(deleteSleepCommandString));","lastModifiedDate":"2023-10-14"},{"lineNumber":78,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":79,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":80,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_deleteSleepCommand_invalidIndexExpectAthletiException() {","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"DaDevChia"},"content":" final String deleteSleepCommandString \u003d \"delete-sleep abc\";","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(deleteSleepCommandString));","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":87,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_listSleepCommand_expectListSleepCommand() throws AthletiException {","lastModifiedDate":"2023-10-14"},{"lineNumber":88,"author":{"gitId":"DaDevChia"},"content":" final String listSleepCommandString \u003d \"list-sleep\";","lastModifiedDate":"2023-10-14"},{"lineNumber":89,"author":{"gitId":"DaDevChia"},"content":" assertInstanceOf(ListSleepCommand.class, parseCommand(listSleepCommandString));","lastModifiedDate":"2023-10-14"},{"lineNumber":90,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":91,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_expectAddDietCommand() throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 carb/3 fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":" assertInstanceOf(AddDietCommand.class, parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"nihalzp"},"content":" void parseCommand_deleteDietCommand_expectDeleteDietCommand() throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"nihalzp"},"content":" final String deleteDietCommandString \u003d \"delete-diet 1\";","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"nihalzp"},"content":" assertInstanceOf(DeleteDietCommand.class, parseCommand(deleteDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"nihalzp"},"content":" void parseCommand_listDietCommand_expectListDietCommand() throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"nihalzp"},"content":" final String listDietCommandString \u003d \"list-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"nihalzp"},"content":" assertInstanceOf(ListDietCommand.class, parseCommand(listDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_missingCaloriesExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet protein/2 carb/3 fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_missingProteinExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 carb/3 fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":122,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_missingCarbExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":128,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_missingFatExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":130,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 carb/3\";","lastModifiedDate":"2023-10-15"},{"lineNumber":131,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":132,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":133,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":134,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":135,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_emptyCaloriesExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":136,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/ protein/2 carb/3 fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":137,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":138,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":139,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":140,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":141,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_emptyProteinExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":142,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/ carb/3 fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":143,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":144,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":145,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":146,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":147,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_emptyCarbExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":148,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 carb/ fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":149,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":150,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":151,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":152,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":153,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_emptyFatExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":154,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 carb/3 fat/\";","lastModifiedDate":"2023-10-15"},{"lineNumber":155,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":156,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":157,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":158,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":159,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_invalidCaloriesExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":160,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/abc protein/2 carb/3 fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":161,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":162,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":163,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":164,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":165,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_invalidProteinExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":166,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/abc carb/3 fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":167,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":168,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":169,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":170,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":171,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_invalidCarbExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":172,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 carb/abc fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":173,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":174,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":175,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":176,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":177,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_invalidFatExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":178,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 carb/3 fat/abc\";","lastModifiedDate":"2023-10-15"},{"lineNumber":179,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":180,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":181,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":182,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":183,"author":{"gitId":"nihalzp"},"content":" void parseCommand_deleteDietCommand_invalidIndexExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":184,"author":{"gitId":"nihalzp"},"content":" final String deleteDietCommandString \u003d \"delete-diet abc\";","lastModifiedDate":"2023-10-15"},{"lineNumber":185,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(deleteDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":186,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":187,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":188,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":189,"author":{"gitId":"nihalzp"},"content":" void parseCommand_deleteDietCommand_emptyIndexExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":190,"author":{"gitId":"nihalzp"},"content":" final String deleteDietCommandString \u003d \"delete-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":191,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(deleteDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":192,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":193,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":194,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":195,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSet_oneValidGoal_oneGoalInList() {","lastModifiedDate":"2023-10-15"},{"lineNumber":196,"author":{"gitId":"yicheng-toh"},"content":" String oneValidGoalString \u003d \"calories/60\";","lastModifiedDate":"2023-10-15"},{"lineNumber":197,"author":{"gitId":"yicheng-toh"},"content":" assertDoesNotThrow(() -\u003e parseDietGoalSetEdit(oneValidGoalString));","lastModifiedDate":"2023-10-16"},{"lineNumber":198,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":199,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":200,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":201,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSet_oneValidOneInvalidGoal_throwAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":202,"author":{"gitId":"yicheng-toh"},"content":" String oneValidOneInvalidGoalString \u003d \"calories/60 protein/protine\";","lastModifiedDate":"2023-10-15"},{"lineNumber":203,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalSetEdit(oneValidOneInvalidGoalString));","lastModifiedDate":"2023-10-16"},{"lineNumber":204,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":205,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":206,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":207,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSet_zeroTargetValue_throwAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":208,"author":{"gitId":"yicheng-toh"},"content":" String zeroTargetValueGoalString \u003d \"calories/0\";","lastModifiedDate":"2023-10-15"},{"lineNumber":209,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalSetEdit(zeroTargetValueGoalString));","lastModifiedDate":"2023-10-16"},{"lineNumber":210,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":211,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":212,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":213,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSet_oneInvalidGoal_throwAthlethiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":214,"author":{"gitId":"yicheng-toh"},"content":" String invalidGoalString \u003d \"calories/caloreis protein/protein\";","lastModifiedDate":"2023-10-15"},{"lineNumber":215,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalSetEdit(invalidGoalString));","lastModifiedDate":"2023-10-16"},{"lineNumber":216,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":217,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":31,"DaDevChia":45,"yicheng-toh":27,"nihalzp":114}},{"path":"text-ui-test/runtest.bat","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@echo off","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"setlocal enableextensions","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"pushd %~dp0","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"cd ..","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"call gradlew clean shadowJar","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"cd build\\libs","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"for /f \"tokens\u003d*\" %%a in (","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u0027dir /b *.jar\u0027","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":") do (","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" set jarloc\u003d%%a","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"java -jar %jarloc% \u003c ..\\..\\text-ui-test\\input.txt \u003e ..\\..\\text-ui-test\\ACTUAL.TXT","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":"cd ..\\..\\text-ui-test","lastModifiedDate":"2020-05-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":"FC /W ACTUAL.TXT EXPECTED.TXT \u003eNUL \u0026\u0026 ECHO Test passed! || Echo Test failed!","lastModifiedDate":"2023-10-21"}],"authorContributionMap":{"skylee03":1,"-":18}},{"path":"text-ui-test/runtest.sh","fileType":"other","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":"# change to script directory","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"cd \"${0%/*}\"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"cd ..","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"./gradlew clean shadowJar","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"cd text-ui-test","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"java -jar $(find ../build/libs/ -mindepth 1 -print -quit) \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"dos2unix EXPECTED-UNIX.TXT ACTUAL.TXT","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":"diff -w EXPECTED-UNIX.TXT ACTUAL.TXT","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"Test passed!\"","lastModifiedDate":"2020-05-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" echo \"Test failed!\"","lastModifiedDate":"2020-05-24"},{"lineNumber":22,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"skylee03":1,"-":22}}] +[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"# AthletiCLI project template","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11 (use the exact version), update Intellij to the most recent version.","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. **Ensure Intellij JDK 11 is defined as an SDK**, as described [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk) -- this step is not needed if you have used JDK 11 in a previous Intellij project.","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. **Import the project _as a Gradle project_**, as described [here](https://se-education.org/guides/tutorials/intellijImportGradleProject.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"1. **Verify the set up**: After the importing is complete, locate the `src/main/java/seedu/duke/Duke.java` file, right-click it, and choose `Run Duke.main()`. If the setup is correct, you should see something like the below:","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003e Task :compileJava","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003e Task :processResources NO-SOURCE","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003e Task :classes","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003e Task :Duke.main()","lastModifiedDate":"2020-05-24"},{"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-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":" What is your name?","lastModifiedDate":"2020-05-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" Type some word and press enter to let the execution proceed to the end.","lastModifiedDate":"2020-05-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":"## Build automation using Gradle","lastModifiedDate":"2020-05-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":"* This project uses Gradle for build automation and dependency management. It includes a basic build script as well (i.e. the `build.gradle` file).","lastModifiedDate":"2020-05-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":"* If you are new to Gradle, refer to the [Gradle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/gradle.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":"## Testing","lastModifiedDate":"2020-05-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":"### I/O redirection tests","lastModifiedDate":"2020-05-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"* To run _I/O redirection_ tests (aka _Text UI tests_), navigate to the `text-ui-test` and run the `runtest(.bat/.sh)` script.","lastModifiedDate":"2020-05-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":"### JUnit tests","lastModifiedDate":"2020-05-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":42,"author":{"gitId":"-"},"content":"* A skeleton JUnit test (`src/test/java/seedu/duke/DukeTest.java`) is provided with this project template. ","lastModifiedDate":"2020-05-24"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* If you are new to JUnit, refer to the [JUnit Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/junit.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":"## Checkstyle","lastModifiedDate":"2020-05-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* A sample CheckStyle rule configuration is provided in this project.","lastModifiedDate":"2020-05-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* If you are new to Checkstyle, refer to the [Checkstyle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/checkstyle.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":"## CI using GitHub Actions","lastModifiedDate":"2020-05-24"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":52,"author":{"gitId":"-"},"content":"The project uses [GitHub actions](https://github.com/features/actions) for CI. When you push a commit to this repo or PR against it, GitHub actions will run automatically to build and verify the code as updated by the commit/PR.","lastModifiedDate":"2020-05-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":"## Documentation","lastModifiedDate":"2020-05-24"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":56,"author":{"gitId":"-"},"content":"`/docs` folder contains a skeleton version of the project documentation.","lastModifiedDate":"2020-05-24"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":58,"author":{"gitId":"-"},"content":"Steps for publishing documentation to the public: ","lastModifiedDate":"2020-05-24"},{"lineNumber":59,"author":{"gitId":"-"},"content":"1. If you are using this project template for an individual project, go your fork on GitHub.\u003cbr\u003e","lastModifiedDate":"2020-05-24"},{"lineNumber":60,"author":{"gitId":"-"},"content":" If you are using this project template for a team project, go to the team fork on GitHub.","lastModifiedDate":"2020-05-24"},{"lineNumber":61,"author":{"gitId":"-"},"content":"1. Click on the `settings` tab.","lastModifiedDate":"2020-05-24"},{"lineNumber":62,"author":{"gitId":"-"},"content":"1. Scroll down to the `GitHub Pages` section.","lastModifiedDate":"2020-05-24"},{"lineNumber":63,"author":{"gitId":"-"},"content":"1. Set the `source` as `master branch /docs folder`.","lastModifiedDate":"2020-05-24"},{"lineNumber":64,"author":{"gitId":"-"},"content":"1. Optionally, use the `choose a theme` button to choose a theme for your documentation.","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"AlWo223":1,"-":63}},{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" mainClass.set(\"athleticli.AthletiCLI\")","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" archiveBaseName.set(\"athleticli\")","lastModifiedDate":"2023-10-08"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"skylee03":2,"yicheng-toh":1,"-":44}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"| Display | Name | Github Profile | Portfolio |","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"|-----------------------------------------------------------|:-----------------:|:----------------------------------------:|:-----------------------------------------:|","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"| ![](https://via.placeholder.com/100.png?text\u003dPhoto) | Alexander Wolters | [Github](https://github.com/AlWo223) | [Portfolio](docs/team/johndoe.md) |","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"| ![](https://via.placeholder.com/100.png?text\u003dPhoto) | Nihal | [Github](https://github.com/nihalzp) | [Portfolio](docs/team/nihalzp.md) |","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"| ![](https://github.com/DaDevChia) | Dylan Chia | [Github](https://github.com/DaDevChia) | [Portfolio](https://github.com/DaDevChia) |","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"| ![](https://via.placeholder.com/100.png?text\u003dPhoto) | Yi Cheng | [Github](https://github.com/yicheng-toh) | [Portfolio](docs/team/yicheng.md) |","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"| ![](https://avatars.githubusercontent.com/u/24489025?v\u003d4) | Yang Ming-Tian | [Github](https://github.com/skylee03) | [Portfolio](docs/team/skylee03.md) |","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"yicheng-toh":8,"-":2}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"# AthletiCLI User Guide","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"**AthletiCLI** is your all-in-one solution to track, analyse, and optimize your athletic performance. Designed for the","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"committed athlete, this command-line interface (CLI) tool not only keeps tabs on your physical activities but also","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"covers dietary habits, sleep metrics, and more.","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"## Quick Start","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"* Ensure you have the required runtime environment installed on your computer.","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"* Download the latest AthletiCLI from the official repository.","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"* Copy the downloaded file to a folder you want to designate as the home for AthletiCLI.","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"* Open a command terminal, cd into the folder where you copied the file, and run java -jar AthletiCLI.jar","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"## Features","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"**Notes about Command Format**","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":"* Words in UPPER_CASE are parameters provided by the user.","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":"* Parameters can be in any order.","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"* Parameters enclosed in square brackets [] are optional.","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":"## Activity Management","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":"### Adding Activities:","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":"`activity`, `run`, `swim`, `cycle`","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":"You can record your activities in AtheltiCLI by adding different activities including running, cycling, and swimming.","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"**Syntax:**","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":"* `activity CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME`","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":"* `run CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":"* `swim CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS`","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":"* `cycle CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":"**Parameters:**","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":"* CAPTION: A short description of the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":"* DURATION: The duration of the activity in minutes.","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":"* DISTANCE: The distance of the activity in meters.","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":"* DATETIME: The date and time of the start of the activity. It must follow the ISO Date Time Format: YYYY-MM-DD HH:MM","lastModifiedDate":"2023-10-13"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":"**Examples:**","lastModifiedDate":"2023-10-13"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":"* `activity Morning Run duration/60 distance/10000 datetime/2021-09-01 06:00`","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":"* `cycle Evening Ride duration/120 distance/20000 datetime/2021-09-01 18:00 elevation/1000`","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":"### Deleting Activities:","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":"`delete-activity`","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":"Accidentally added an activity? You can quickly delete activities by using the following command.","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":"The index must be a positive number and is not larger than the number of activities recorded.","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":"**Syntax:**","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":"* `delete-activity INDEX`","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":"**Parameters:**","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":"* INDEX: The index of the activity as shown in the displayed activity list.","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":"**Examples:**","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":"* `delete-activity 2` deletes the second activity in the activity list.","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":"* `delete-activity 1` deletes the first activity in the activity list.","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":"### Listing Activities:","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":"`list-activity`","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":"You can see all your tracked activities in a list by using this command. For more detailed information, you can use","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":"the detailed flag.","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":"* `list-activity [-d]`","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":"**Flags:**","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":"* `-d`: Shows a detailed list of activities.","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":"* `list-activity` shows a brief overview of all activities.","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"AlWo223"},"content":"* `list-activity -d` shows a detailed summary of all activities.","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"AlWo223"},"content":"### Editing Activities:","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"AlWo223"},"content":"`edit-activity`, `edit-run`, `edit-swim`, `edit-cycle`","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"AlWo223"},"content":"You can edit your activities in AthletiCLI by editing the activity at the specified index.","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"AlWo223"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"AlWo223"},"content":"* `edit-activity INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME`","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"AlWo223"},"content":"* `edit-run INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"AlWo223"},"content":"* `edit-swim INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS`","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"AlWo223"},"content":"* `edit-cycle INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION`","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"AlWo223"},"content":"**Parameters:**","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":104,"author":{"gitId":"AlWo223"},"content":"* INDEX: The index of the activity to be edited - must be a positive number","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"AlWo223"},"content":"* see adding activities for the other parameters","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"AlWo223"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"AlWo223"},"content":"* `edit-activity 1 Morning Run duration/60 distance/10000 datetime/2021-09-01 06:00`","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"AlWo223"},"content":"* `edit-cycle 2 Evening Ride duration/120 distance/20000 datetime/2021-09-01 18:00 elevation/1000`","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"nihalzp"},"content":"## Diet Management","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"nihalzp"},"content":"### Adding Diets:","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"nihalzp"},"content":"`add-diet`","lastModifiedDate":"2023-10-18"},{"lineNumber":117,"author":{"gitId":"nihalzp"},"content":"You can record your diet in AtheltiCLI by adding your calorie, protein, carbohydrate,and fat intake of your meals.","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"nihalzp"},"content":"* `add-diet calories/CALORIES protein/PROTEIN carb/CARB fat/FAT`","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"nihalzp"},"content":"**Parameters:**","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"nihalzp"},"content":"* CALORIES: The total calories of the meal.","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"nihalzp"},"content":"* PROTEIN: The total protein of the meal.","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"nihalzp"},"content":"* CARB: The total carbohydrates of the meal.","lastModifiedDate":"2023-10-18"},{"lineNumber":128,"author":{"gitId":"nihalzp"},"content":"* FAT: The total fat of the meal.","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":130,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-15"},{"lineNumber":131,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":132,"author":{"gitId":"nihalzp"},"content":"* `add-diet calories/500 protein/20 carb/50 fat/10`","lastModifiedDate":"2023-10-18"},{"lineNumber":133,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":134,"author":{"gitId":"nihalzp"},"content":"### Deleting Diets:","lastModifiedDate":"2023-10-15"},{"lineNumber":135,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":136,"author":{"gitId":"nihalzp"},"content":"`delete-diet`","lastModifiedDate":"2023-10-15"},{"lineNumber":137,"author":{"gitId":"nihalzp"},"content":"You can delete your diet in AtheltiCLI by deleting the diet at the specified index.","lastModifiedDate":"2023-10-15"},{"lineNumber":138,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":139,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-15"},{"lineNumber":140,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":141,"author":{"gitId":"nihalzp"},"content":"* `delete-diet INDEX`","lastModifiedDate":"2023-10-15"},{"lineNumber":142,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":143,"author":{"gitId":"nihalzp"},"content":"**Parameters:**","lastModifiedDate":"2023-10-15"},{"lineNumber":144,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":145,"author":{"gitId":"nihalzp"},"content":"* INDEX: The index of the diet to be deleted - must be a positive integer.","lastModifiedDate":"2023-10-15"},{"lineNumber":146,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":147,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-15"},{"lineNumber":148,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":149,"author":{"gitId":"nihalzp"},"content":"* `delete-diet 1`","lastModifiedDate":"2023-10-15"},{"lineNumber":150,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":151,"author":{"gitId":"nihalzp"},"content":"### Listing Diets:","lastModifiedDate":"2023-10-15"},{"lineNumber":152,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":153,"author":{"gitId":"nihalzp"},"content":"`list-diet`","lastModifiedDate":"2023-10-15"},{"lineNumber":154,"author":{"gitId":"nihalzp"},"content":"You can list all your diets in AtheltiCLI.","lastModifiedDate":"2023-10-15"},{"lineNumber":155,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":156,"author":{"gitId":"nihalzp"},"content":"**Syntax:**","lastModifiedDate":"2023-10-15"},{"lineNumber":157,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":158,"author":{"gitId":"nihalzp"},"content":"* `list-diet`","lastModifiedDate":"2023-10-15"},{"lineNumber":159,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":160,"author":{"gitId":"nihalzp"},"content":"**Examples:**","lastModifiedDate":"2023-10-15"},{"lineNumber":161,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":162,"author":{"gitId":"nihalzp"},"content":"* `list-diet`","lastModifiedDate":"2023-10-15"},{"lineNumber":163,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":164,"author":{"gitId":"yicheng-toh"},"content":"## Diet Goal Management","lastModifiedDate":"2023-10-18"},{"lineNumber":165,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":166,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":167,"author":{"gitId":"yicheng-toh"},"content":"### Adding Diet Goals:","lastModifiedDate":"2023-10-18"},{"lineNumber":168,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":169,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":170,"author":{"gitId":"yicheng-toh"},"content":"`set-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":171,"author":{"gitId":"yicheng-toh"},"content":"You can create a new diet goal to track your nutrients intake with AtheltiCLI by adding the nutrients you wish to track and the target value for your nutrient goals.","lastModifiedDate":"2023-10-18"},{"lineNumber":172,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":173,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":174,"author":{"gitId":"yicheng-toh"},"content":"Currently only the following nutrients/metrics are tracked:","lastModifiedDate":"2023-10-18"},{"lineNumber":175,"author":{"gitId":"yicheng-toh"},"content":"1. Calories","lastModifiedDate":"2023-10-18"},{"lineNumber":176,"author":{"gitId":"yicheng-toh"},"content":"2. Protein","lastModifiedDate":"2023-10-18"},{"lineNumber":177,"author":{"gitId":"yicheng-toh"},"content":"3. Carbs","lastModifiedDate":"2023-10-18"},{"lineNumber":178,"author":{"gitId":"yicheng-toh"},"content":"4. Fats","lastModifiedDate":"2023-10-18"},{"lineNumber":179,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":180,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":181,"author":{"gitId":"yicheng-toh"},"content":"You can set multiple nutrients goals at once with the `set-diet-goal` command.","lastModifiedDate":"2023-10-18"},{"lineNumber":182,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":183,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":184,"author":{"gitId":"yicheng-toh"},"content":"**Syntax:**","lastModifiedDate":"2023-10-18"},{"lineNumber":185,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":186,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":187,"author":{"gitId":"yicheng-toh"},"content":"* `set-diet-goal calories/CALORIES protein/PROTEIN carb/CARBS fat/FAT`","lastModifiedDate":"2023-10-18"},{"lineNumber":188,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":189,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":190,"author":{"gitId":"yicheng-toh"},"content":"**Parameters:**","lastModifiedDate":"2023-10-18"},{"lineNumber":191,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":192,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":193,"author":{"gitId":"yicheng-toh"},"content":"* CALORIES: Your target value for calories intake, in terms of cal.","lastModifiedDate":"2023-10-18"},{"lineNumber":194,"author":{"gitId":"yicheng-toh"},"content":"* PROTEIN: The target for protein intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":195,"author":{"gitId":"yicheng-toh"},"content":"* CARB: Your target value for carbohydrate intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":196,"author":{"gitId":"yicheng-toh"},"content":"* FAT: Your target value for fats intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":197,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":198,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":199,"author":{"gitId":"yicheng-toh"},"content":"You can create one or multiple nutrient goals at once with this command.","lastModifiedDate":"2023-10-18"},{"lineNumber":200,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":201,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":202,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":203,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":204,"author":{"gitId":"yicheng-toh"},"content":"**Examples:**","lastModifiedDate":"2023-10-18"},{"lineNumber":205,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":206,"author":{"gitId":"yicheng-toh"},"content":"Create multiple nutrients goals:","lastModifiedDate":"2023-10-18"},{"lineNumber":207,"author":{"gitId":"yicheng-toh"},"content":"* `set-diet-goal calories/500 protein/20 carb/50 fat/10`","lastModifiedDate":"2023-10-18"},{"lineNumber":208,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":209,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":210,"author":{"gitId":"yicheng-toh"},"content":"Create a single calories goal:","lastModifiedDate":"2023-10-18"},{"lineNumber":211,"author":{"gitId":"yicheng-toh"},"content":"* `set-diet-goal calories/500`","lastModifiedDate":"2023-10-18"},{"lineNumber":212,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":213,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":214,"author":{"gitId":"yicheng-toh"},"content":"### Deleting Diet Goals:","lastModifiedDate":"2023-10-18"},{"lineNumber":215,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":216,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":217,"author":{"gitId":"yicheng-toh"},"content":"`delete-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":218,"author":{"gitId":"yicheng-toh"},"content":"You can delete your diet goals in AtheltiCLI by deleting the goal at the specified index.","lastModifiedDate":"2023-10-18"},{"lineNumber":219,"author":{"gitId":"yicheng-toh"},"content":"This index will be referenced via `list-diet-goal` command.","lastModifiedDate":"2023-10-18"},{"lineNumber":220,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":221,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":222,"author":{"gitId":"yicheng-toh"},"content":"**Syntax:**","lastModifiedDate":"2023-10-18"},{"lineNumber":223,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":224,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":225,"author":{"gitId":"yicheng-toh"},"content":"* `delete-diet-goal INDEX`","lastModifiedDate":"2023-10-18"},{"lineNumber":226,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":227,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":228,"author":{"gitId":"yicheng-toh"},"content":"**Parameters:**","lastModifiedDate":"2023-10-18"},{"lineNumber":229,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":230,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":231,"author":{"gitId":"yicheng-toh"},"content":"* INDEX: The index of the diet goal to be deleted. It must be a positive integer.","lastModifiedDate":"2023-10-18"},{"lineNumber":232,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":233,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":234,"author":{"gitId":"yicheng-toh"},"content":"**Examples:**","lastModifiedDate":"2023-10-18"},{"lineNumber":235,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":236,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":237,"author":{"gitId":"yicheng-toh"},"content":"* `delete-diet-goal 1`","lastModifiedDate":"2023-10-18"},{"lineNumber":238,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":239,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":240,"author":{"gitId":"yicheng-toh"},"content":"### Listing Diet Goals:","lastModifiedDate":"2023-10-18"},{"lineNumber":241,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":242,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":243,"author":{"gitId":"yicheng-toh"},"content":"`list-diet-goals`","lastModifiedDate":"2023-10-18"},{"lineNumber":244,"author":{"gitId":"yicheng-toh"},"content":"You can list all your diet goals in AtheltiCLI.","lastModifiedDate":"2023-10-18"},{"lineNumber":245,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":246,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":247,"author":{"gitId":"yicheng-toh"},"content":"**Syntax:**","lastModifiedDate":"2023-10-18"},{"lineNumber":248,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":249,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":250,"author":{"gitId":"yicheng-toh"},"content":"* `list-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":251,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":252,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":253,"author":{"gitId":"yicheng-toh"},"content":"**Examples:**","lastModifiedDate":"2023-10-18"},{"lineNumber":254,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":255,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":256,"author":{"gitId":"yicheng-toh"},"content":"* `list-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":257,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":258,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":259,"author":{"gitId":"yicheng-toh"},"content":"### Editing Diet Goals:","lastModifiedDate":"2023-10-18"},{"lineNumber":260,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":261,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":262,"author":{"gitId":"yicheng-toh"},"content":"`edit-diet-goal`","lastModifiedDate":"2023-10-18"},{"lineNumber":263,"author":{"gitId":"yicheng-toh"},"content":"You can edit the target value of your diet goals in AtheltiCLI, redefining the target value for the specified nutrient.","lastModifiedDate":"2023-10-18"},{"lineNumber":264,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":265,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":266,"author":{"gitId":"yicheng-toh"},"content":"This command takes in at least one argument. You are able to edit multiple diet goals target value at once. No repetition is allowed.","lastModifiedDate":"2023-10-18"},{"lineNumber":267,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":268,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":269,"author":{"gitId":"yicheng-toh"},"content":"**Syntax:**","lastModifiedDate":"2023-10-18"},{"lineNumber":270,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":271,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":272,"author":{"gitId":"yicheng-toh"},"content":"* `edit-diet-goal calories/CALORIES protein/PROTEIN carb/CARBS fat/FAT`","lastModifiedDate":"2023-10-18"},{"lineNumber":273,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":274,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":275,"author":{"gitId":"yicheng-toh"},"content":"**Parameters:**","lastModifiedDate":"2023-10-18"},{"lineNumber":276,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":277,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":278,"author":{"gitId":"yicheng-toh"},"content":"* CALORIES: Your target value for calories intake, in terms of cal.","lastModifiedDate":"2023-10-18"},{"lineNumber":279,"author":{"gitId":"yicheng-toh"},"content":"* PROTEIN: The target for protein intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":280,"author":{"gitId":"yicheng-toh"},"content":"* CARBS: Your target value for carbohydrate intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":281,"author":{"gitId":"yicheng-toh"},"content":"* FAT: Your target value for fats intake, in terms of milligrams.","lastModifiedDate":"2023-10-18"},{"lineNumber":282,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":283,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":284,"author":{"gitId":"yicheng-toh"},"content":"You can create one or multiple nutrient goals with this command.","lastModifiedDate":"2023-10-18"},{"lineNumber":285,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":286,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":287,"author":{"gitId":"yicheng-toh"},"content":"**Examples:**","lastModifiedDate":"2023-10-18"},{"lineNumber":288,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":289,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":290,"author":{"gitId":"yicheng-toh"},"content":"Edit multiple nutrients goals:","lastModifiedDate":"2023-10-18"},{"lineNumber":291,"author":{"gitId":"yicheng-toh"},"content":"* `edit-diet-goal calories/5000 protein/200 carb/500 fat/100`","lastModifiedDate":"2023-10-18"},{"lineNumber":292,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":293,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":294,"author":{"gitId":"yicheng-toh"},"content":"Edit a single calories goal:","lastModifiedDate":"2023-10-18"},{"lineNumber":295,"author":{"gitId":"yicheng-toh"},"content":"* `edit-diet-goal calories/5000`","lastModifiedDate":"2023-10-18"},{"lineNumber":296,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":297,"author":{"gitId":"DaDevChia"},"content":"## Sleep Management","lastModifiedDate":"2023-10-17"},{"lineNumber":298,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":299,"author":{"gitId":"DaDevChia"},"content":"### Adding Sleep:","lastModifiedDate":"2023-10-17"},{"lineNumber":300,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":301,"author":{"gitId":"DaDevChia"},"content":"**Command:** `add-sleep` ","lastModifiedDate":"2023-10-17"},{"lineNumber":302,"author":{"gitId":"DaDevChia"},"content":"You can record your sleep timings in AtheltiCLI by adding your sleep start and end time.","lastModifiedDate":"2023-10-17"},{"lineNumber":303,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":304,"author":{"gitId":"DaDevChia"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":305,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":306,"author":{"gitId":"DaDevChia"},"content":"* `add-sleep start/START end/END`","lastModifiedDate":"2023-10-17"},{"lineNumber":307,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":308,"author":{"gitId":"DaDevChia"},"content":"**Parameters:**","lastModifiedDate":"2023-10-17"},{"lineNumber":309,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":310,"author":{"gitId":"DaDevChia"},"content":"* START: The start time of the sleep in the following Date Time Format: DD-MM-YYYY HH:MM","lastModifiedDate":"2023-10-17"},{"lineNumber":311,"author":{"gitId":"DaDevChia"},"content":"* END: The end time of the sleep in the following Date Time Format: DD-MM-YYYY HH:MM","lastModifiedDate":"2023-10-17"},{"lineNumber":312,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":313,"author":{"gitId":"DaDevChia"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":314,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":315,"author":{"gitId":"DaDevChia"},"content":"* `add-sleep start/01-09-2021 22:00 end/02-09-2021 06:00`","lastModifiedDate":"2023-10-17"},{"lineNumber":316,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":317,"author":{"gitId":"DaDevChia"},"content":"### Listing Sleep:","lastModifiedDate":"2023-10-17"},{"lineNumber":318,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":319,"author":{"gitId":"DaDevChia"},"content":"**Command:** `list-sleep`","lastModifiedDate":"2023-10-17"},{"lineNumber":320,"author":{"gitId":"DaDevChia"},"content":"You can list all your sleep records in AtheltiCLI.","lastModifiedDate":"2023-10-17"},{"lineNumber":321,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":322,"author":{"gitId":"DaDevChia"},"content":"**Syntax:** `list-sleep`","lastModifiedDate":"2023-10-17"},{"lineNumber":323,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":324,"author":{"gitId":"DaDevChia"},"content":"**Examples:** `list-sleep`","lastModifiedDate":"2023-10-17"},{"lineNumber":325,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":326,"author":{"gitId":"DaDevChia"},"content":"### Deleting Sleep:","lastModifiedDate":"2023-10-17"},{"lineNumber":327,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":328,"author":{"gitId":"DaDevChia"},"content":"**Command:** `delete-sleep` ","lastModifiedDate":"2023-10-17"},{"lineNumber":329,"author":{"gitId":"DaDevChia"},"content":"You can delete your sleep in AtheltiCLI by specifying the sleep\u0027s index.","lastModifiedDate":"2023-10-17"},{"lineNumber":330,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":331,"author":{"gitId":"DaDevChia"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":332,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":333,"author":{"gitId":"DaDevChia"},"content":"* `delete-sleep INDEX`","lastModifiedDate":"2023-10-17"},{"lineNumber":334,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":335,"author":{"gitId":"DaDevChia"},"content":"**Parameters:**","lastModifiedDate":"2023-10-17"},{"lineNumber":336,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":337,"author":{"gitId":"DaDevChia"},"content":"* INDEX: The integer index of the sleep record you wish to delete.","lastModifiedDate":"2023-10-17"},{"lineNumber":338,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":339,"author":{"gitId":"DaDevChia"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":340,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":341,"author":{"gitId":"DaDevChia"},"content":"* `delete-sleep 5` ","lastModifiedDate":"2023-10-17"},{"lineNumber":342,"author":{"gitId":"DaDevChia"},"content":" (Note: This will delete the 5th sleep record from your records.)","lastModifiedDate":"2023-10-17"},{"lineNumber":343,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":344,"author":{"gitId":"DaDevChia"},"content":"### Editing Sleep:","lastModifiedDate":"2023-10-17"},{"lineNumber":345,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":346,"author":{"gitId":"DaDevChia"},"content":"**Command:** `edit-sleep` ","lastModifiedDate":"2023-10-17"},{"lineNumber":347,"author":{"gitId":"nihalzp"},"content":"You can modify existing sleep records in AtheltiCLI by specifying the sleep\u0027s index and then providing the new start and","lastModifiedDate":"2023-10-18"},{"lineNumber":348,"author":{"gitId":"nihalzp"},"content":"end times.","lastModifiedDate":"2023-10-18"},{"lineNumber":349,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":350,"author":{"gitId":"DaDevChia"},"content":"**Syntax:**","lastModifiedDate":"2023-10-17"},{"lineNumber":351,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":352,"author":{"gitId":"DaDevChia"},"content":"* `edit-sleep INDEX start/START end/END`","lastModifiedDate":"2023-10-17"},{"lineNumber":353,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":354,"author":{"gitId":"DaDevChia"},"content":"**Parameters:**","lastModifiedDate":"2023-10-17"},{"lineNumber":355,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":356,"author":{"gitId":"DaDevChia"},"content":"* INDEX: The integer index of the sleep record you wish to edit.","lastModifiedDate":"2023-10-17"},{"lineNumber":357,"author":{"gitId":"DaDevChia"},"content":"* START: The new start time of the sleep in the following Date Time Format: DD-MM-YYYY HH:MM","lastModifiedDate":"2023-10-17"},{"lineNumber":358,"author":{"gitId":"DaDevChia"},"content":"* END: The new end time of the sleep in the following Date Time Format: DD-MM-YYYY HH:MM","lastModifiedDate":"2023-10-17"},{"lineNumber":359,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":360,"author":{"gitId":"DaDevChia"},"content":"**Examples:**","lastModifiedDate":"2023-10-17"},{"lineNumber":361,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":362,"author":{"gitId":"DaDevChia"},"content":"* `edit-sleep 5 start/05-09-2021 23:00 end/06-09-2021 07:00` ","lastModifiedDate":"2023-10-17"},{"lineNumber":363,"author":{"gitId":"DaDevChia"},"content":" (Note: This will edit the 5th sleep record to have the new specified timings.)","lastModifiedDate":"2023-10-17"},{"lineNumber":364,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":365,"author":{"gitId":"DaDevChia"},"content":"---","lastModifiedDate":"2023-10-17"},{"lineNumber":366,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":367,"author":{"gitId":"DaDevChia"},"content":"Remember, when using AtheltiCLI:","lastModifiedDate":"2023-10-17"},{"lineNumber":368,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":369,"author":{"gitId":"DaDevChia"},"content":"* Make sure to provide accurate dates and times.","lastModifiedDate":"2023-10-17"},{"lineNumber":370,"author":{"gitId":"DaDevChia"},"content":"* Double-check indexes before deleting or editing records to prevent mistakes.","lastModifiedDate":"2023-10-17"},{"lineNumber":371,"author":{"gitId":"DaDevChia"},"content":"* If you encounter any error messages, read them carefully to understand what went wrong.","lastModifiedDate":"2023-10-17"},{"lineNumber":372,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":373,"author":{"gitId":"DaDevChia"},"content":"---","lastModifiedDate":"2023-10-17"},{"lineNumber":374,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":375,"author":{"gitId":"-"},"content":"Useful links:","lastModifiedDate":"2020-05-24"},{"lineNumber":376,"author":{"gitId":"AlWo223"},"content":"[User Guide](UserGuide.md)","lastModifiedDate":"2023-10-13"},{"lineNumber":377,"author":{"gitId":"AlWo223"},"content":"[Developer Guide](DeveloperGuide.md)","lastModifiedDate":"2023-10-13"},{"lineNumber":378,"author":{"gitId":"AlWo223"},"content":"[About Us](AboutUs.md)","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"DaDevChia":75,"AlWo223":94,"yicheng-toh":133,"-":4,"nihalzp":72}},{"path":"docs/team/skylee03.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"# Yang Ming-Tian - Project Portfolio Page","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"## Overview","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"skylee03":6}},{"path":"docs/team/yicheng.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"# John Doe - Project Portfolio Page","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"## Overview","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"yicheng-toh":6}},{"path":"src/main/java/athleticli/AthletiCLI.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.logging.ConsoleHandler;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import java.util.logging.LogManager;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.SaveCommand;","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":"import athleticli.storage.Storage;","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":"import athleticli.ui.Parser;","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":"import athleticli.ui.Ui;","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" * Defines the basic structure and the behavior of AthletiCLI.","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":"public class AthletiCLI {","lastModifiedDate":"2023-10-08"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" private static Logger logger \u003d Logger.getLogger(AthletiCLI.class.getName());","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" private static Ui ui;","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" private static Data data;","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" * Constructs an \u003ccode\u003eAthletiCLI\u003c/code\u003e object.","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" public AthletiCLI() {","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" data \u003d Storage.load();","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" LogManager.getLogManager().reset();","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" logger.addHandler(new FileHandler(\"%t/athleticli-log.txt\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" } catch(IOException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" logger.addHandler(new ConsoleHandler());","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" * Creates an `AthletiCLI` object and runs it.","lastModifiedDate":"2023-10-08"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" * @param args Arguments obtained from the command line.","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" /* save data when the JVM begins its shutdown sequence */","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" Runtime.getRuntime().addShutdownHook(new Thread(() -\u003e {","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":" final String[] feedback \u003d new SaveCommand().execute(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"skylee03"},"content":" ui.showMessages(feedback);","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"skylee03"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"skylee03"},"content":" ui.showException(e);","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":" }));","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":" new AthletiCLI().run();","lastModifiedDate":"2023-10-08"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":" * Displays the welcome interface, continuously reads user input","lastModifiedDate":"2023-10-08"},{"lineNumber":59,"author":{"gitId":"skylee03"},"content":" * and executes corresponding instructions until exiting.","lastModifiedDate":"2023-10-08"},{"lineNumber":60,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":61,"author":{"gitId":"skylee03"},"content":" public void run() {","lastModifiedDate":"2023-10-08"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" logger.entering(getClass().getName(), \"run\");","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":" ui.showWelcome();","lastModifiedDate":"2023-10-08"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-10-08"},{"lineNumber":65,"author":{"gitId":"skylee03"},"content":" while (!isExit) {","lastModifiedDate":"2023-10-08"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":" final String rawUserInput \u003d ui.getUserCommand();","lastModifiedDate":"2023-10-08"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":" try {","lastModifiedDate":"2023-10-08"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":" logger.info(\"Command read: \" + rawUserInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":" final Command command \u003d Parser.parseCommand(rawUserInput);","lastModifiedDate":"2023-10-08"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":" final String[] feedback \u003d command.execute(data);","lastModifiedDate":"2023-10-08"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":" ui.showMessages(feedback);","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":" logger.info(\"Command executed successfully\");","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":" isExit \u003d command.isExit();","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":" ui.showException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":" logger.warning(\"Exception caught: \" + e);","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":78,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":79,"author":{"gitId":"skylee03"},"content":" logger.exiting(getClass().getName(), \"run\");","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":81,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":81}},{"path":"src/main/java/athleticli/commands/ByeCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"public class ByeCommand extends Command {","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":" * Returns \u003ccode\u003etrue\u003c/code\u003e if this is a \u003ccode\u003eByeCommand\u003c/code\u003e object, otherwise returns \u003ccode\u003efalse\u003c/code\u003e.","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":" * @return \u003ccode\u003etrue\u003c/code\u003e if this is a \u003ccode\u003eByeCommand\u003c/code\u003e object, otherwise returns \u003ccode\u003efalse\u003c/code\u003e.","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" public boolean isExit() {","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" return true;","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" * Returns the bye message to be shown to the user.","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" * @return The messages to be shown to the user.","lastModifiedDate":"2023-10-08"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" return new String[] {Message.MESSAGE_BYE};","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":26}},{"path":"src/main/java/athleticli/commands/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":" * Defines the basic methods of a command.","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"public abstract class Command {","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":" * Executes the command and returns the messages to be shown to the user.","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" * @param data The current data.","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" * @return The messages to be shown to the user.","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" public abstract String[] execute(Data data) throws AthletiException;","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" * Returns \u003ccode\u003etrue\u003c/code\u003e if this is a \u003ccode\u003eByeCommand\u003c/code\u003e object, otherwise returns \u003ccode\u003efalse\u003c/code\u003e.","lastModifiedDate":"2023-10-08"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" * @return \u003ccode\u003etrue\u003c/code\u003e if this is a \u003ccode\u003eByeCommand\u003c/code\u003e object, otherwise returns \u003ccode\u003efalse\u003c/code\u003e.","lastModifiedDate":"2023-10-08"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" public boolean isExit() {","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" return false;","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":27}},{"path":"src/main/java/athleticli/commands/HelpCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands;","lastModifiedDate":"2023-10-21"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import static java.util.Map.entry;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import java.util.Map;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"import athleticli.ui.CommandName;","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" private static final String[] HELP_ALL \u003d {","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" /* Activity Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" \"\\nActivity Management:\",","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" Message.HELP_ADD_ACTIVITY,","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" Message.HELP_ADD_RUN,","lastModifiedDate":"2023-10-21"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" Message.HELP_ADD_SWIM,","lastModifiedDate":"2023-10-21"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" Message.HELP_ADD_CYCLE,","lastModifiedDate":"2023-10-21"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" Message.HELP_DELETE_ACTIVITY,","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" Message.HELP_LIST_ACTIVITY,","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" Message.HELP_EDIT_ACTIVITY,","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" Message.HELP_EDIT_RUN,","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" Message.HELP_EDIT_SWIM,","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" Message.HELP_EDIT_CYCLE,","lastModifiedDate":"2023-10-21"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" /* Diet Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" \"\\nDiet Management:\",","lastModifiedDate":"2023-10-21"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" Message.HELP_ADD_DIET,","lastModifiedDate":"2023-10-21"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" Message.HELP_DELETE_DIET,","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" Message.HELP_LIST_DIET,","lastModifiedDate":"2023-10-21"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" /* Sleep Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" \"\\nSleep Management:\",","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" Message.HELP_ADD_SLEEP,","lastModifiedDate":"2023-10-21"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" Message.HELP_LIST_SLEEP,","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" Message.HELP_DELETE_SLEEP,","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" Message.HELP_EDIT_SLEEP,","lastModifiedDate":"2023-10-21"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" /* Misc */","lastModifiedDate":"2023-10-21"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" \"\\nMisc:\",","lastModifiedDate":"2023-10-21"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" Message.HELP_SAVE,","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" Message.HELP_BYE,","lastModifiedDate":"2023-10-21"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" Message.HELP_HELP,","lastModifiedDate":"2023-10-21"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" \"\\n\" + Message.HELP_DETAILS","lastModifiedDate":"2023-10-21"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" };","lastModifiedDate":"2023-10-21"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" private static final Map\u003cString, String\u003e HELP_MESSAGES \u003d Map.ofEntries(","lastModifiedDate":"2023-10-21"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" /* Activity Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_ACTIVITY, Message.HELP_ADD_ACTIVITY),","lastModifiedDate":"2023-10-21"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_RUN, Message.HELP_ADD_RUN),","lastModifiedDate":"2023-10-21"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SWIM, Message.HELP_ADD_SWIM),","lastModifiedDate":"2023-10-21"},{"lineNumber":49,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_CYCLE, Message.HELP_ADD_CYCLE),","lastModifiedDate":"2023-10-21"},{"lineNumber":50,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_ACTIVITY_DELETE, Message.HELP_DELETE_ACTIVITY),","lastModifiedDate":"2023-10-21"},{"lineNumber":51,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_ACTIVITY_LIST, Message.HELP_LIST_ACTIVITY),","lastModifiedDate":"2023-10-21"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_ACTIVITY_EDIT, Message.HELP_EDIT_ACTIVITY),","lastModifiedDate":"2023-10-21"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_RUN_EDIT, Message.HELP_EDIT_RUN),","lastModifiedDate":"2023-10-21"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SWIM_EDIT, Message.HELP_EDIT_SWIM),","lastModifiedDate":"2023-10-21"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_CYCLE_EDIT, Message.HELP_EDIT_CYCLE),","lastModifiedDate":"2023-10-21"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":" /* Diet Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_DIET_ADD, Message.HELP_ADD_DIET),","lastModifiedDate":"2023-10-21"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_DIET_DELETE, Message.HELP_DELETE_DIET),","lastModifiedDate":"2023-10-21"},{"lineNumber":59,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_DIET_LIST, Message.HELP_LIST_DIET),","lastModifiedDate":"2023-10-21"},{"lineNumber":60,"author":{"gitId":"skylee03"},"content":" /* Sleep Management */","lastModifiedDate":"2023-10-21"},{"lineNumber":61,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SLEEP_ADD, Message.HELP_ADD_SLEEP),","lastModifiedDate":"2023-10-21"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SLEEP_LIST, Message.HELP_LIST_SLEEP),","lastModifiedDate":"2023-10-21"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SLEEP_DELETE, Message.HELP_DELETE_SLEEP),","lastModifiedDate":"2023-10-21"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SLEEP_EDIT, Message.HELP_EDIT_SLEEP),","lastModifiedDate":"2023-10-21"},{"lineNumber":65,"author":{"gitId":"skylee03"},"content":" /* Misc */","lastModifiedDate":"2023-10-21"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_SAVE, Message.HELP_SAVE),","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_BYE, Message.HELP_BYE),","lastModifiedDate":"2023-10-21"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":" entry(CommandName.COMMAND_HELP, Message.HELP_HELP)","lastModifiedDate":"2023-10-21"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":" );","lastModifiedDate":"2023-10-21"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":" private String command;","lastModifiedDate":"2023-10-21"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":" public HelpCommand(String command) {","lastModifiedDate":"2023-10-21"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":" this.command \u003d command;","lastModifiedDate":"2023-10-21"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":" * Returns the help messages to be shown to the user.","lastModifiedDate":"2023-10-21"},{"lineNumber":78,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-21"},{"lineNumber":79,"author":{"gitId":"skylee03"},"content":" * @param data The current data.","lastModifiedDate":"2023-10-21"},{"lineNumber":80,"author":{"gitId":"skylee03"},"content":" * @return The messages to be shown to the user.","lastModifiedDate":"2023-10-21"},{"lineNumber":81,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-21"},{"lineNumber":82,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":83,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-21"},{"lineNumber":84,"author":{"gitId":"skylee03"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-21"},{"lineNumber":85,"author":{"gitId":"skylee03"},"content":" if (HELP_MESSAGES.containsKey(command)) {","lastModifiedDate":"2023-10-21"},{"lineNumber":86,"author":{"gitId":"skylee03"},"content":" return new String[] {\"Usage: \" + HELP_MESSAGES.get(command)};","lastModifiedDate":"2023-10-21"},{"lineNumber":87,"author":{"gitId":"skylee03"},"content":" } else {","lastModifiedDate":"2023-10-21"},{"lineNumber":88,"author":{"gitId":"skylee03"},"content":" return HELP_ALL;","lastModifiedDate":"2023-10-21"},{"lineNumber":89,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":91,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-21"}],"authorContributionMap":{"skylee03":91}},{"path":"src/main/java/athleticli/commands/SaveCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import athleticli.storage.Storage;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"public class SaveCommand extends Command {","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" * Saves the data into the file.","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" * @param data The current data.","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" * @return The messages to be shown to the user.","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" @Override","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" assert data !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" Storage.save(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" throw new AthletiException(Message.MESSAGE_IO_EXCEPTION);","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" return new String[] {Message.MESSAGE_SAVE};","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"skylee03":28}},{"path":"src/main/java/athleticli/commands/activity/AddActivityCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Activity;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityList;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":" * Executes the add activity commands provided by the user.","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"public class AddActivityCommand extends Command {","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" private final Activity activity;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" * Constructor for AddActivityCommand.","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" * @param activity Activity to be added.","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" public AddActivityCommand(Activity activity){","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" this.activity \u003d activity;","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" * Updates the activity list.","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" * @param data The current data containing the activity list.","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" public String[] execute(Data data) {","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" ActivityList activities \u003d data.getActivities();","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" activities.add(this.activity);","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" int size \u003d activities.size();","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" String countMessage;","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" if (size \u003e 1) {","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" countMessage \u003d String.format(Message.MESSAGE_ACTIVITY_COUNT, size);","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" } else {","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" countMessage \u003d Message.MESSAGE_ACTIVITY_FIRST;","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" return new String[]{Message.MESSAGE_ACTIVITY_ADDED, this.activity.toString(), countMessage};","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":3,"AlWo223":39}},{"path":"src/main/java/athleticli/commands/activity/DeleteActivityCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Activity;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityList;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":" * Executes the delete activity command provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"public class DeleteActivityCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private final Integer index;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" * Constructor for DeleteActivityCommand.","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" * @param index Index of activity to be deleted.","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" public DeleteActivityCommand(Integer index) {","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" this.index \u003d index;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" * Executes the delete activity command.","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" * @param data Data object containing the current list of activities.","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" * @return String array containing the messages to be printed to the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the index provided is out of bounds.","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" ActivityList activities \u003d data.getActivities();","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" final Activity activity \u003d activities.get(index-1);","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" activities.remove(activity);","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" return new String[]{Message.MESSAGE_ACTIVITY_DELETED, activity.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" String.format(Message.MESSAGE_ACTIVITY_COUNT, activities.size())};","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_INDEX_OUT_OF_BOUNDS);","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":3,"AlWo223":41}},{"path":"src/main/java/athleticli/commands/activity/EditActivityCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Activity;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" * Executes the edit activity command provided by the user.","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"public class EditActivityCommand extends Command {","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static Logger logger \u003d Logger.getLogger(\"EditActivityCommand\");","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private final int index;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private final Activity activity;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" * Constructor for EditActivityCommand.","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" * @param index Index of the activity to be edited.","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" * @param activity Updated Activity.","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" public EditActivityCommand(Activity activity, int index) {","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" this.index \u003d index;","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" assert index \u003e 0 : \"Index should be greater than 0\";","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" this.activity \u003d activity;","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" * Executes the edit activity command.","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" * @param data Data object containing the current list of activities.","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" * @return String array containing the messages to be printed to the user.","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the index provided is out of bounds.","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" logger.log(Level.INFO, \"Editing activity at index \" + index);","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" ActivityList activities \u003d data.getActivities();","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" activities.set(index-1, activity);","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" logger.log(java.util.logging.Level.INFO, \"Activity at index \" + index + \"successfully edited\");","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" return new String[]{Message.MESSAGE_ACTIVITY_UPDATED, activity.toString(),","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" String.format(Message.MESSAGE_ACTIVITY_COUNT, activities.size())};","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" logger.log(java.util.logging.Level.WARNING, \"Activity index out of bounds\");","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_INDEX_OUT_OF_BOUNDS);","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":3,"AlWo223":49}},{"path":"src/main/java/athleticli/commands/activity/ListActivityCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.ActivityList;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":" * Executes the list activity command provided by the user.","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"public class ListActivityCommand extends Command {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" private final boolean isDetailed;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" * Constructor for ListActivityCommand.","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" * @param isDetailed Whether the list should be detailed.","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" public ListActivityCommand(boolean isDetailed) {","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" this.isDetailed \u003d isDetailed;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" * Lists the activities.","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" * @param data The current data containing the activity list.","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" * @return The message containing listing of activities which will be shown to the user.","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" public String[] execute(Data data) {","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" ActivityList activities \u003d data.getActivities();","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" final int size \u003d activities.size();","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" if (isDetailed) {","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" return printDetailedList(activities, size);","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" return printList(activities, size);","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" public String[] printList(ActivityList activities, int size) {","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" String[] output \u003d new String[size + 1];","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" output[0] \u003d Message.MESSAGE_ACTIVITY_LIST;","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c size; i++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" output[i+1] \u003d (i+1) + \".\" + activities.get(i).toString();","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" return output;","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" public String[] printDetailedList(ActivityList activities, int size) {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" String[] output \u003d new String[size + 1];","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" output[0] \u003d Message.MESSAGE_ACTIVITY_LIST;","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c size; i++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" output[i+1] \u003d activities.get(i).toDetailedString();","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" return output;","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":3,"AlWo223":52}},{"path":"src/main/java/athleticli/commands/diet/AddDietCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.DietList;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" * Executes the add diet commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"public class AddDietCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" private final Diet diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" * Constructor for AddDietCommand.","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" * @param diet Diet to be added.","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" public AddDietCommand(Diet diet) {","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" this.diet \u003d diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" * Updates the diet list.","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" * @param data The current data containing the diet list.","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" public String[] execute(Data data) {","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" DietList diets \u003d data.getDiets();","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" diets.add(this.diet);","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" int size \u003d diets.size();","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" String countMessage;","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" if (size \u003e 1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" countMessage \u003d String.format(Message.MESSAGE_DIET_COUNT, size);","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" countMessage \u003d String.format(Message.MESSAGE_DIET_FIRST, size);","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" return new String[]{Message.MESSAGE_DIET_ADDED, this.diet.toString(), countMessage};","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":44}},{"path":"src/main/java/athleticli/commands/diet/DeleteDietCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.DietList;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" * Executes the add diet commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"public class DeleteDietCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" private final int index;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" * Constructor for AddDietCommand.","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" * @param index Diet to be added.","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" public DeleteDietCommand(int index) {","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" this.index \u003d index;","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" * Updates the diet list.","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" * @param data The current data containing the diet list.","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" DietList dietList \u003d data.getDiets();","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" int size \u003d dietList.size();","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" if (index \u003e size || index \u003c 1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_INVALID_DIET_INDEX);","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" Diet oldDiet \u003d dietList.get(index - 1);","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" dietList.remove(index - 1);","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" return new String[]{Message.MESSAGE_DIET_DELETED, oldDiet.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" String.format(Message.MESSAGE_DIET_COUNT, size - 1)};","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":42}},{"path":"src/main/java/athleticli/commands/diet/DeleteDietGoalCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoal;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoalList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"import java.util.logging.ConsoleHandler;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":"import java.util.logging.LogManager;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"/**","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" * Executes the delete-diet-goal commands provided by the user.","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":"public class DeleteDietGoalCommand extends Command {","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" private static final Logger logger \u003d Logger.getLogger(DeleteDietGoalCommand.class.getName());","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":" private final int deleteIndex;","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" * This is a constructor to set up the delete diet goal command.","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":" * @param deleteIndex Index of the diet goal to be deleted in the users\u0027 perspective.","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":" public DeleteDietGoalCommand(int deleteIndex) {","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" //deleteIndex that is less than or equal to zero would result in exception","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" assert deleteIndex \u003e\u003d 1: \"\u0027deleteIndex\u0027 should has the value of 1 minimally.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" this.deleteIndex \u003d deleteIndex;","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" LogManager.getLogManager().reset();","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" logger.addHandler(new FileHandler(\"%t/athleticli-log.txt\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" } catch(IOException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":" logger.addHandler(new ConsoleHandler());","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" * Deletes a goal from the Diet Goal List.","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":" * @param data The current data containing the different nutrient goals.","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" logger.log(Level.FINE, \"Executing delete command for diet goals\");","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" DietGoalList dietGoals \u003d data.getDietGoals();","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" if (dietGoals.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_EMPTY_DIETGOALLIST);","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" DietGoal dietGoalRemoved \u003d dietGoals.get(deleteIndex - 1);","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"yicheng-toh"},"content":" dietGoals.remove(deleteIndex - 1);","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" logger.log(Level.FINE, String.format(\"Diet goals %s has been successfully removed\",","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":" dietGoalRemoved.getNutrients()));","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":" return new String[]{Message.MESSAGE_DIETGOAL_DELETE_HEADER,","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" dietGoalRemoved.toString()};","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"yicheng-toh"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(String.format(Message.MESSAGE_DIETGOAL_OUT_OF_BOUND, dietGoals.size()));","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"yicheng-toh":65}},{"path":"src/main/java/athleticli/commands/diet/EditDietGoalCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoal;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoalList;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"import java.util.HashSet;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"import java.util.Set;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":" * Executes the edit-diet-goal commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"public class EditDietGoalCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" private final ArrayList\u003cDietGoal\u003e userUpdatedDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" * This is a constructor to set up the edit diet goal command.","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":" * @param dietGoals This is a list consisting of updated existing diet goals.","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":" * to be added to the current goal list.","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" public EditDietGoalCommand(ArrayList\u003cDietGoal\u003e dietGoals) {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":" userUpdatedDietGoals \u003d dietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" * Updates the Diet Goal List.","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" * @param data The current data containing the different nutrient goals.","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":" DietGoalList currentDietGoals \u003d data.getDietGoals();","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" Set\u003cString\u003e currentDietGoalsNutrients \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" // Populate the set with current diet goal nutrients","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" for (DietGoal dietGoal : currentDietGoals) {","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" currentDietGoalsNutrients.add(dietGoal.getNutrients());","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" // Check if user edited diet goals is in records previously","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" boolean isNutrientGoalInCurrentDietGoalList;","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" for (DietGoal userDietGoal : userUpdatedDietGoals) {","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" String userNewNutrient \u003d userDietGoal.getNutrients();","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" isNutrientGoalInCurrentDietGoalList \u003d currentDietGoalsNutrients.contains(userNewNutrient);","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":" if (!isNutrientGoalInCurrentDietGoalList) {","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(String.format(Message.MESSAGE_DIETGOAL_NOT_EXISTED, userNewNutrient));","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" // Edit updated goals to current diet goals","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":" int newTargetValue;","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":" for (DietGoal userUpdatedDietGoal : userUpdatedDietGoals) {","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" for (DietGoal currentDietGoal : currentDietGoals) {","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"yicheng-toh"},"content":" if (!userUpdatedDietGoal.getNutrients().equals(currentDietGoal.getNutrients())) {","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"yicheng-toh"},"content":" continue;","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"yicheng-toh"},"content":" //update new target value to the current goal","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"yicheng-toh"},"content":" newTargetValue \u003d userUpdatedDietGoal.getTargetValue();","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"yicheng-toh"},"content":" currentDietGoal.setTargetValue(newTargetValue);","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"yicheng-toh"},"content":" int dietGoalNum \u003d currentDietGoals.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"yicheng-toh"},"content":" return new String[]{Message.MESSAGE_DIETGOAL_LIST_HEADER, currentDietGoals.toString(),","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"yicheng-toh"},"content":" String.format(Message.MESSAGE_DIETGOAL_COUNT, dietGoalNum)};","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":3,"yicheng-toh":70}},{"path":"src/main/java/athleticli/commands/diet/ListDietCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.DietList;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":" * Executes the list diet commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":"public class ListDietCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" * Constructor for ListDietCommand.","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" public ListDietCommand() {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" * Updates the diet list.","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" * @param data The current data containing the diet list.","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" public String[] execute(Data data) {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" DietList dietList \u003d data.getDiets();","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" int size \u003d dietList.size();","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" return new String[]{Message.MESSAGE_DIET_LIST, dietList.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" String.format(Message.MESSAGE_DIET_COUNT, size)};","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":31}},{"path":"src/main/java/athleticli/commands/diet/ListDietGoalCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoalList;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":" * Executes the list diet goal commands provided by the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":"public class ListDietGoalCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":" * Constructor for ListDietGoalCommand.","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":" public ListDietGoalCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":" * Iterate and returns the string representation for each goal.","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" * @param data The current data containing the diet goal list.","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":" public String[] execute(Data data) {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" DietGoalList dietGoalList \u003d data.getDietGoals();","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" int dietGoalNum \u003d dietGoalList.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":" if (dietGoalNum \u003d\u003d 0) {","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" return new String[]{Message.MESSAGE_DIETGOAL_NONE};","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" return new String[]{Message.MESSAGE_DIETGOAL_LIST_HEADER, dietGoalList.toString(),","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" String.format(Message.MESSAGE_DIETGOAL_COUNT, dietGoalNum)};","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"yicheng-toh":34}},{"path":"src/main/java/athleticli/commands/diet/SetDietGoalCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoal;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoalList;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":"import java.util.HashSet;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"import java.util.Set;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":" * Executes the set-diet-goal commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":"public class SetDietGoalCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" private final ArrayList\u003cDietGoal\u003e userNewDietGoals;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" * This is a constructor to set up the set diet goal command","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":" * @param dietGoals This is a list consisting of new diet goals","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":" * to be added to the current goal list.","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" public SetDietGoalCommand(ArrayList\u003cDietGoal\u003e dietGoals) {","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":" userNewDietGoals \u003d dietGoals;","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" * Updates the Diet Goal list.","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" * @param data The current data containing the different nutrients goal value.","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":" DietGoalList currentDietGoals \u003d data.getDietGoals();","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" Set\u003cString\u003e currentDietGoalsNutrients \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" // Populate the set with current diet goal nutrients","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" for (DietGoal dietGoal : currentDietGoals) {","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" currentDietGoalsNutrients.add(dietGoal.getNutrients());","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" // Check against user new diet goals","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" for (DietGoal userDietGoal : userNewDietGoals) {","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" String userNewNutrient \u003d userDietGoal.getNutrients();","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" if (currentDietGoalsNutrients.contains(userNewNutrient)) {","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(String.format(Message.MESSAGE_DIETGOAL_ALREADY_EXISTED, userNewNutrient));","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" // Add new diet goals to current diet goals","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"yicheng-toh"},"content":" currentDietGoals.addAll(userNewDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" int dietGoalNum \u003d currentDietGoals.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":" return new String[]{Message.MESSAGE_DIETGOAL_LIST_HEADER, currentDietGoals.toString(),","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":" String.format(Message.MESSAGE_DIETGOAL_COUNT, dietGoalNum)};","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":3,"yicheng-toh":59}},{"path":"src/main/java/athleticli/commands/sleep/AddSleepCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.Sleep;","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.SleepList;","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":" * Executes the add sleep commands provided by the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":"public class AddSleepCommand extends Command {","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" private final Logger logger \u003d Logger.getLogger(AddSleepCommand.class.getName());","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" * Constructor for AddSleepCommand.","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" * @param from Start time of the sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" * @param to End time of the sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" public AddSleepCommand(LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":" this.from \u003d from;","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":" this.to \u003d to;","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":" assert from !\u003d null : \"Start time cannot be null\";","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"DaDevChia"},"content":" assert to !\u003d null : \"End time cannot be null\";","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":" assert from.isBefore(to) : \"Start time must be before end time\";","lastModifiedDate":"2023-10-20"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":" logger.fine(\"Creating AddSleepCommand with from: \" + from + \" and to: \" + to);","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"DaDevChia"},"content":" * Adds the sleep record to the sleep list.","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"DaDevChia"},"content":" * @param data The current data containing the sleep list.","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"DaDevChia"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"DaDevChia"},"content":" public String[] execute(Data data) {","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"DaDevChia"},"content":" SleepList sleepList \u003d data.getSleeps();","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":" Sleep newSleep \u003d new Sleep(from, to);","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(newSleep);","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":46,"author":{"gitId":"DaDevChia"},"content":" logger.info(\"Added sleep: \" + newSleep);","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"DaDevChia"},"content":" logger.fine(\"Sleep list: \" + sleepList);","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":49,"author":{"gitId":"DaDevChia"},"content":" String returnMessage2 \u003d String.format(Message.MESSAGE_SLEEP_ADD_RETURN_2, sleepList.size());","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"DaDevChia"},"content":" return new String[] {","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"DaDevChia"},"content":" Message.MESSAGE_SLEEP_ADD_RETURN_1,","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"DaDevChia"},"content":" newSleep.toString(),","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"DaDevChia"},"content":" returnMessage2","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":56,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":58,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"skylee03":3,"DaDevChia":55}},{"path":"src/main/java/athleticli/commands/sleep/DeleteSleepCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.Sleep;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.SleepList;","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":" * Executes the delete sleep commands provided by the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":"public class DeleteSleepCommand extends Command {","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" private int index;","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" private final Logger logger \u003d Logger.getLogger(DeleteSleepCommand.class.getName());","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" * Constructor for DeleteSleepCommand.","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" * @param index Index of the sleep to be deleted.","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" public DeleteSleepCommand(int index) {","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" this.index \u003d index;","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" logger.fine(\"Creating DeleteSleepCommand with index: \" + index);","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":" * Deletes the sleep record at the specified index.","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"DaDevChia"},"content":" * @param data The current data containing the sleep list.","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"DaDevChia"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":" SleepList sleepList \u003d data.getSleeps();","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"DaDevChia"},"content":" //accessIndex is the index of the sleep in the list accounting for zero-indexing","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"DaDevChia"},"content":" int accessIndex \u003d index - 1; ","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"DaDevChia"},"content":" if (accessIndex \u003c 0 || accessIndex \u003e\u003d sleepList.size()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_SLEEP_EDIT_INDEX_OOBE);","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"DaDevChia"},"content":" assert accessIndex \u003e\u003d 0 : \"Access index cannot be less than 0\";","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":" assert accessIndex \u003c sleepList.size() : \"Index cannot be more than size of sleep list\";","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":" Sleep oldSleep \u003d sleepList.get(accessIndex);","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"DaDevChia"},"content":" sleepList.remove(accessIndex);","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"DaDevChia"},"content":" logger.fine(\"Deleted sleep: \" + oldSleep);","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"DaDevChia"},"content":" ","lastModifiedDate":"2023-10-12"},{"lineNumber":49,"author":{"gitId":"DaDevChia"},"content":" String returnMessage \u003d String.format(Message.MESSAGE_SLEEP_DELETE_RETURN, index, oldSleep.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"DaDevChia"},"content":" return new String[] {","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"DaDevChia"},"content":" returnMessage","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":54,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":56,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":58,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"skylee03":3,"DaDevChia":55}},{"path":"src/main/java/athleticli/commands/sleep/EditSleepCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.Sleep;","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.SleepList;","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":" * Executes the edit sleep commands provided by the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":"public class EditSleepCommand extends Command {","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" private final Logger logger \u003d Logger.getLogger(EditSleepCommand.class.getName());","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" private int index;","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" * Constructor for EditSleepCommand.","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" * @param index Index of the sleep to be edited.","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" * @param from New start time of the sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":" * @param to New end time of the sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":" public EditSleepCommand(int index, LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":" this.index \u003d index;","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"DaDevChia"},"content":" this.from \u003d from;","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":" this.to \u003d to;","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":34,"author":{"gitId":"DaDevChia"},"content":" assert from !\u003d null : \"Start time cannot be null\";","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":" assert to !\u003d null : \"End time cannot be null\";","lastModifiedDate":"2023-10-20"},{"lineNumber":36,"author":{"gitId":"DaDevChia"},"content":" assert from.isBefore(to) : \"Start time must be before end time\";","lastModifiedDate":"2023-10-20"},{"lineNumber":37,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":38,"author":{"gitId":"DaDevChia"},"content":" logger.fine(\"Creating EditSleepCommand with index: \" + index + \" from: \" + from + \" and to: \" + to);","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"DaDevChia"},"content":" ","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"DaDevChia"},"content":" * Edits the sleep record at the specified index.","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":" * @param data The current data containing the sleep list.","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"DaDevChia"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"DaDevChia"},"content":" public String[] execute(Data data) throws AthletiException {","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"DaDevChia"},"content":" SleepList sleepList \u003d data.getSleeps();","lastModifiedDate":"2023-10-12"},{"lineNumber":48,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"DaDevChia"},"content":" //accessIndex is the index of the sleep in the list accounting for zero-indexing","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"DaDevChia"},"content":" int accessIndex \u003d index - 1;","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"DaDevChia"},"content":" if (accessIndex \u003c 0 || accessIndex \u003e\u003d sleepList.size()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_SLEEP_EDIT_INDEX_OOBE);","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":55,"author":{"gitId":"DaDevChia"},"content":" assert accessIndex \u003e\u003d 0 : \"Index cannot be less than 0\";","lastModifiedDate":"2023-10-20"},{"lineNumber":56,"author":{"gitId":"DaDevChia"},"content":" assert accessIndex \u003c sleepList.size() : \"Index cannot be more than size of sleep list\";","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":58,"author":{"gitId":"DaDevChia"},"content":" Sleep oldSleep \u003d sleepList.get(accessIndex);","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"DaDevChia"},"content":" Sleep newSleep \u003d new Sleep(from, to);","lastModifiedDate":"2023-10-12"},{"lineNumber":60,"author":{"gitId":"DaDevChia"},"content":" sleepList.set(accessIndex, newSleep);","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":62,"author":{"gitId":"DaDevChia"},"content":" String returnMessage \u003d String.format(Message.MESSAGE_SLEEP_EDIT_RETURN, index);","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"DaDevChia"},"content":" return new String[] {","lastModifiedDate":"2023-10-12"},{"lineNumber":64,"author":{"gitId":"DaDevChia"},"content":" returnMessage,","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"DaDevChia"},"content":" \"original: \" + oldSleep.toString(),","lastModifiedDate":"2023-10-12"},{"lineNumber":66,"author":{"gitId":"DaDevChia"},"content":" \"to new: \" + newSleep.toString(),","lastModifiedDate":"2023-10-12"},{"lineNumber":67,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-12"},{"lineNumber":68,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":69,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":70,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":71,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-12"},{"lineNumber":72,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":73,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"skylee03":3,"DaDevChia":70}},{"path":"src/main/java/athleticli/commands/sleep/ListSleepCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.SleepList;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"import athleticli.ui.Message;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"public class ListSleepCommand extends Command {","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":" private static final Logger logger \u003d Logger.getLogger(ListSleepCommand.class.getName());","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":" * Lists all the sleep records in the sleep list.","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" * @param data The current data containing the sleep list.","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" * @return The message which will be shown to the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" public String[] execute(Data data) {","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" logger.info(\"Executing ListSleepCommand\");","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" SleepList sleeps \u003d data.getSleeps();","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" final int size \u003d sleeps.size();","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" if (size \u003d\u003d 0) {","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" logger.warning(\"Sleep list is empty\");","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" return new String[] {","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":" Message.MESSAGE_SLEEP_LIST_EMPTY","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"DaDevChia"},"content":" return printList(sleeps, size);","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":34,"author":{"gitId":"DaDevChia"},"content":" public String[] printList(SleepList sleeps, int size) {","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":" logger.fine(\"Printing sleep list\");","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"DaDevChia"},"content":" String[] returnString \u003d new String[size+1];","lastModifiedDate":"2023-10-20"},{"lineNumber":37,"author":{"gitId":"DaDevChia"},"content":" returnString[0] \u003d Message.MESSAGE_SLEEP_LIST;","lastModifiedDate":"2023-10-20"},{"lineNumber":38,"author":{"gitId":"DaDevChia"},"content":" for (int i \u003d 0; i \u003c size; i++) {","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"DaDevChia"},"content":" assert sleeps.get(i) !\u003d null : \"Sleep record cannot be null\";","lastModifiedDate":"2023-10-20"},{"lineNumber":40,"author":{"gitId":"DaDevChia"},"content":" returnString[i+1] \u003d (i + 1) + \". \" + sleeps.get(i).toString();","lastModifiedDate":"2023-10-20"},{"lineNumber":41,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"DaDevChia"},"content":" ","lastModifiedDate":"2023-10-20"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":" return returnString;","lastModifiedDate":"2023-10-20"},{"lineNumber":44,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":" ","lastModifiedDate":"2023-10-20"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":3,"DaDevChia":43}},{"path":"src/main/java/athleticli/commands/sleep/SetSleepGoalCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":" * To be implemented in future version of AthletiCLI.","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"public class SetSleepGoalCommand {","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":4,"DaDevChia":4}},{"path":"src/main/java/athleticli/commands/sleep/ViewSleepGoalCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":" * To be implemented in future version of AthletiCLI.","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"public class ViewSleepGoalCommand {","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"DaDevChia":8}},{"path":"src/main/java/athleticli/data/Data.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import athleticli.data.activity.ActivityGoalList;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import athleticli.data.activity.ActivityList;","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import athleticli.data.diet.DietGoalList;","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.DietList;","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"import athleticli.data.sleep.SleepGoalList;","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"import athleticli.data.sleep.SleepList;","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" * Defines the basic fields and methods of data.","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":"public class Data implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" private ActivityList activities;","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" private ActivityGoalList activityGoals;","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" private DietList diets;","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" private DietGoalList dietGoals;","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" private SleepList sleeps;","lastModifiedDate":"2023-10-08"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" private SleepGoalList sleepGoals;","lastModifiedDate":"2023-10-08"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" * Constructs an empty \u003ccode\u003eData\u003c/code\u003e object.","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" public Data() {","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" this.activities \u003d new ActivityList();","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" this.activityGoals \u003d new ActivityGoalList();","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" this.diets \u003d new DietList();","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" this.dietGoals \u003d new DietGoalList();","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" this.sleeps \u003d new SleepList();","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" this.sleepGoals \u003d new SleepGoalList();","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" this.dietGoals \u003d new DietGoalList();","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"DaDevChia"},"content":" * Get all the objects","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"DaDevChia"},"content":" public ActivityList getActivities() {","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"DaDevChia"},"content":" return activities;","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"DaDevChia"},"content":" public ActivityGoalList getActivityGoals() {","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":" return activityGoals;","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":47,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":48,"author":{"gitId":"DaDevChia"},"content":" public DietList getDiets() {","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"DaDevChia"},"content":" return diets;","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"DaDevChia"},"content":" public DietGoalList getDietGoals() {","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"DaDevChia"},"content":" return dietGoals;","lastModifiedDate":"2023-10-12"},{"lineNumber":54,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":56,"author":{"gitId":"DaDevChia"},"content":" public SleepList getSleeps() {","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"DaDevChia"},"content":" return sleeps;","lastModifiedDate":"2023-10-12"},{"lineNumber":58,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":59,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":60,"author":{"gitId":"DaDevChia"},"content":" public SleepGoalList getSleepGoals() {","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"DaDevChia"},"content":" return sleepGoals;","lastModifiedDate":"2023-10-12"},{"lineNumber":62,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":64,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":65,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"DaDevChia"},"content":" * Set all the objects","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"DaDevChia"},"content":" public void setActivities(ActivityList activities) {","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"DaDevChia"},"content":" this.activities \u003d activities;","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"DaDevChia"},"content":" public void setActivityGoals(ActivityGoalList activityGoals) {","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"DaDevChia"},"content":" this.activityGoals \u003d activityGoals;","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"DaDevChia"},"content":" public void setDiets(DietList diets) {","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"DaDevChia"},"content":" this.diets \u003d diets;","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"DaDevChia"},"content":" public void setDietGoals(DietGoalList dietGoals) {","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"DaDevChia"},"content":" this.dietGoals \u003d dietGoals;","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"DaDevChia"},"content":" public void setSleeps(SleepList sleeps) {","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"DaDevChia"},"content":" this.sleeps \u003d sleeps;","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"DaDevChia"},"content":" public void setSleepGoals(SleepGoalList sleepGoals) {","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"DaDevChia"},"content":" this.sleepGoals \u003d sleepGoals;","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"DaDevChia"},"content":" ","lastModifiedDate":"2023-10-12"},{"lineNumber":92,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":31,"DaDevChia":57,"yicheng-toh":1,"nihalzp":3}},{"path":"src/main/java/athleticli/data/activity/Activity.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import java.util.Locale;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-10"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":" * Represents a physical activity consisting of basic sports data.","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-10"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"public class Activity implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" public static final DateTimeFormatter DATE_TIME_FORMATTER \u003d DateTimeFormatter.ofPattern(\"\\\"MMMM d, \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" \"yyyy \u0027at\u0027 h:mm a\\\"\", Locale.ENGLISH);","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final int columnWidth \u003d 40;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private String description;","lastModifiedDate":"2023-10-10"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private final String caption;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private final int movingTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" private final int distance;","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" private int calories;","lastModifiedDate":"2023-10-10"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" private final LocalDateTime startDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-10"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" * Generates a new general sports activity with some basic stats.","lastModifiedDate":"2023-10-10"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" * By default, calories is 0, i.e., not tracked.","lastModifiedDate":"2023-10-10"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" * @param movingTime duration of the activity in minutes","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" * @param distance distance covered in meters","lastModifiedDate":"2023-10-10"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" * @param startDateTime start date and time of the activity","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" * @param caption a caption of the activity chosen by the user (e.g., \"Morning Run\")","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" public Activity(String caption, int movingTime, int distance, LocalDateTime startDateTime) {","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" this.movingTime \u003d movingTime;","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" this.distance \u003d distance;","lastModifiedDate":"2023-10-10"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" this.startDateTime \u003d startDateTime;","lastModifiedDate":"2023-10-10"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" this.caption \u003d caption;","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" public int getMovingTime() {","lastModifiedDate":"2023-10-10"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" return movingTime;","lastModifiedDate":"2023-10-10"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" public int getDistance() {","lastModifiedDate":"2023-10-10"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" return distance;","lastModifiedDate":"2023-10-10"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" public String getCaption() {","lastModifiedDate":"2023-10-12"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" return caption;","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" public LocalDateTime getStartDateTime() {","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" return startDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" public int getCalories() {","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" return this.calories;","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" public int getColumnWidth() {","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" return columnWidth;","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" * Returns a single line summary of the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the activity","lastModifiedDate":"2023-10-13"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" String movingTimeOutput \u003d generateMovingTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" String distanceOutput \u003d generateDistanceStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" String startDateTimeOutput \u003d generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" return \"[Activity] \" + caption + \" | \" + distanceOutput + \" | \" + movingTimeOutput + \" | \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":" startDateTimeOutput;","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":" public String generateDistanceStringOutput() {","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" double distanceInKm \u003d distance / 1000.0;","lastModifiedDate":"2023-10-13"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":" return \"Distance: \" + String.format(\"%.2f\", distanceInKm).replace(\",\", \".\")","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":" + \" km\";","lastModifiedDate":"2023-10-13"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":" public String generateMovingTimeStringOutput() {","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":" int movingTimeHours \u003d movingTime / 60;","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":" int movingTimeMinutes \u003d movingTime % 60;","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":" return \"Time: \" + movingTimeHours + \"h \" + movingTimeMinutes + \"m\";","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"AlWo223"},"content":" public String generateStartDateTimeStringOutput() {","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"AlWo223"},"content":" return startDateTime.format(DATE_TIME_FORMATTER).replace(\"\\\"\", \"\");","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"AlWo223"},"content":" * Returns a detailed summary of the activity.","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"AlWo223"},"content":" * @return a multiline string representation of the activity","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"AlWo223"},"content":" public String toDetailedString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"AlWo223"},"content":" String startDateTimeOutput \u003d generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"AlWo223"},"content":" String movingTimeOutput \u003d generateMovingTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"AlWo223"},"content":" String distanceOutput \u003d generateDistanceStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"AlWo223"},"content":" String header \u003d \"[Activity - \" + this.getCaption() + \" - \" + startDateTimeOutput + \"]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"AlWo223"},"content":" String firstRow \u003d formatTwoColumns(\"\\tDistance: \" + distanceOutput, \"Moving Time: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"AlWo223"},"content":" movingTimeOutput, columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"AlWo223"},"content":" String secondRow \u003d formatTwoColumns(\"\\tCalories: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"AlWo223"},"content":" this.getCalories() + \" kcal\", \"...\", columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"AlWo223"},"content":" return String.join(System.lineSeparator(), header, firstRow, secondRow);","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"AlWo223"},"content":" public String formatTwoColumns(String left, String right, int columnWidth) {","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"AlWo223"},"content":" return String.format(\"%-\" + columnWidth + \"s%s\", left, right);","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":114,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":115,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":7,"AlWo223":108}},{"path":"src/main/java/athleticli/data/activity/ActivityGoal.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"public class ActivityGoal implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":6}},{"path":"src/main/java/athleticli/data/activity/ActivityGoalList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"public class ActivityGoalList extends ArrayList\u003cActivityGoal\u003e implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":7}},{"path":"src/main/java/athleticli/data/activity/ActivityList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"public class ActivityList extends ArrayList\u003cActivity\u003e implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":7}},{"path":"src/main/java/athleticli/data/activity/Cycle.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":" * Represents a cycling activity consisting of relevant evaluation data.","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"public class Cycle extends Activity implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":" private final int elevationGain;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" private final double averageSpeed;","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" * Generates a new cycling activity with cycling specific stats.","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" * By default, calories is 0, i.e., not tracked.","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" * averageSpeed is calculated automatically based on the distance and movingTime.","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" * @param movingTime duration of the activity in minutes","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" * @param distance distance covered in meters","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" * @param startDateTime start date and time of the activity","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" * @param caption a caption of the activity chosen by the user (e.g., \"Morning Run\")","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" * @param elevationGain elevation gain in meters","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" public Cycle(String caption, int movingTime, int distance, LocalDateTime startDateTime, int elevationGain) {","lastModifiedDate":"2023-10-11"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" super(caption, movingTime, distance, startDateTime);","lastModifiedDate":"2023-10-11"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" this.elevationGain \u003d elevationGain;","lastModifiedDate":"2023-10-11"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" this.averageSpeed \u003d this.calculateAverageSpeed();","lastModifiedDate":"2023-10-11"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" * Calculates the average speed of the cycle in km/h.","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" * @return average speed of the cycle in km/h","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" public double calculateAverageSpeed() {","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" double dist \u003d (double) this.getDistance();","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" double time \u003d (double) this.getMovingTime();","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" return (dist/1000) / (time/60);","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" * Returns a single line summary of the cycling activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the cycle","lastModifiedDate":"2023-10-13"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" String result \u003d super.toString();","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"[Activity]\", \"[Cycle]\");","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" String speedOutput \u003d String.format(\"%.2f\", this.averageSpeed).replace(\",\", \".\") + \" km/h\";","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"Time: \", \"Speed: \" + speedOutput + \" | Time: \");","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" return result;","lastModifiedDate":"2023-10-13"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" * Returns a detailed summary of the cycle.","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" * @return a multiline string representation of the cycle","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" public String toDetailedString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" String startDateTimeOutput \u003d generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" String movingTimeOutput \u003d generateMovingTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" String distanceOutput \u003d generateDistanceStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" String speedOutput \u003d this.averageSpeed + \" km/h\";","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" int columnWidth \u003d getColumnWidth();","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" String header \u003d \"[Cycle - \" + this.getCaption() + \" - \" + startDateTimeOutput + \"]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" String firstRow \u003d formatTwoColumns(\"\\tDistance: \" + distanceOutput, \"Elevation Gain: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" elevationGain + \" m\", columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" String secondRow \u003d formatTwoColumns(\"\\tMoving Time: \" + movingTimeOutput, \"Avg Speed: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" speedOutput, columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" String thirdRow \u003d formatTwoColumns(\"\\tCalories: \" + this.getCalories() + \" kcal\", \"Max Speed: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" \"tbd\", columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" return String.join(System.lineSeparator(), header, firstRow, secondRow, thirdRow);","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"skylee03":2,"AlWo223":72}},{"path":"src/main/java/athleticli/data/activity/Run.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"/**","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":" * Represents a running activity consisting of relevant evaluation data.","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"public class Run extends Activity implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":" private final int elevationGain;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":" private final double averagePace;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" private final int steps;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" * Generates a new running activity with running specific stats.","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" * By default, calories is 0, i.e., not tracked.","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" * averageSpeed is calculated automatically based on the distance and movingTime.","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" * @param movingTime duration of the activity in minutes","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" * @param distance distance covered in meters","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" * @param startDateTime start date and time of the activity","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" * @param caption a caption of the activity chosen by the user (e.g., \"Morning Run\")","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" * @param elevationGain elevation gain in meters","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" public Run(String caption, int movingTime, int distance, LocalDateTime startDateTime, int elevationGain) {","lastModifiedDate":"2023-10-11"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" super(caption, movingTime, distance, startDateTime);","lastModifiedDate":"2023-10-11"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" this.elevationGain \u003d elevationGain;","lastModifiedDate":"2023-10-11"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" this.averagePace \u003d this.calculateAveragePace();","lastModifiedDate":"2023-10-11"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" this.steps \u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" * Calculates the average pace of the run in minutes per km.","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" * @return average pace of the run in minutes per km","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" public double calculateAveragePace() {","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" double time \u003d (double) this.getMovingTime();","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" double distance \u003d (double) this.getDistance() / 1000;","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" return time / distance;","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" * Converts the average pace of the run to the user-friendly format mm:ss.","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" * @return average pace of run in mm:ss format","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" public String convertAveragePaceToString() {","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" int totalSeconds \u003d (int) Math.round(this.averagePace*60);","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" int minutes \u003d totalSeconds / 60;","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" int seconds \u003d totalSeconds % 60;","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" return String.format(\"%d:%02d\", minutes, seconds);","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" * Returns a single line summary of the running activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" * @return a string representation of the run","lastModifiedDate":"2023-10-13"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" String result \u003d super.toString();","lastModifiedDate":"2023-10-13"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"[Activity]\", \"[Run]\");","lastModifiedDate":"2023-10-13"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" String paceOutput \u003d this.convertAveragePaceToString() + \" /km\";","lastModifiedDate":"2023-10-13"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"Time: \", \"Pace: \" + paceOutput + \" | Time: \");","lastModifiedDate":"2023-10-13"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" return result;","lastModifiedDate":"2023-10-13"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" * Returns a detailed summary of the run.","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" * @return a multiline string representation of the run","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" public String toDetailedString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":" String startDateTimeOutput \u003d generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" String movingTimeOutput \u003d generateMovingTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" String distanceOutput \u003d generateDistanceStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":" String paceOutput \u003d this.convertAveragePaceToString() + \" /km\";","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"AlWo223"},"content":" int columnWidth \u003d getColumnWidth();","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"AlWo223"},"content":" String header \u003d \"[Run - \" + this.getCaption() + \" - \" + startDateTimeOutput + \"]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"AlWo223"},"content":" String firstRow \u003d formatTwoColumns(\"\\tDistance: \" + distanceOutput, \"Avg Pace: \" + paceOutput,","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"AlWo223"},"content":" columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"AlWo223"},"content":" String secondRow \u003d formatTwoColumns(\"\\tMoving Time: \" + movingTimeOutput, \"Elevation Gain: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"AlWo223"},"content":" elevationGain + \" m\", columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"AlWo223"},"content":" String thirdRow \u003d formatTwoColumns(\"\\tCalories: \" + this.getCalories() + \" kcal\", \"Steps: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"AlWo223"},"content":" this.steps, columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"AlWo223"},"content":" return String.join(System.lineSeparator(), header, firstRow, secondRow, thirdRow);","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"skylee03":2,"AlWo223":86}},{"path":"src/main/java/athleticli/data/activity/Swim.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-11"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-11"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"public class Swim extends Activity implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":" private final int laps;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":" private final SwimmingStyle style;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":" private final int averageLapTime;","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":" public enum SwimmingStyle {","lastModifiedDate":"2023-10-11"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" BUTTERFLY,","lastModifiedDate":"2023-10-11"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" BACKSTROKE,","lastModifiedDate":"2023-10-11"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" BREASTSTROKE,","lastModifiedDate":"2023-10-11"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" FREESTYLE","lastModifiedDate":"2023-10-11"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" public Swim(String caption, int movingTime, int distance, LocalDateTime startDateTime, SwimmingStyle style) {","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" super(caption, movingTime, distance, startDateTime);","lastModifiedDate":"2023-10-11"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" this.laps \u003d this.calculateLaps();","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" this.style \u003d style;","lastModifiedDate":"2023-10-11"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" this.averageLapTime \u003d this.calculateAverageLapTime();","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" * Calculates the average lap time in seconds.","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" * @return average lap time in seconds","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" public int calculateAverageLapTime() {","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" int laps \u003d this.calculateLaps();","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" return this.getMovingTime() * 60 / laps;","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" public int calculateLaps() {","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" return this.getDistance() / 50;","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" public int getLaps() {","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" return laps;","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" public int getAverageLapTime() {","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" return averageLapTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"AlWo223"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"AlWo223"},"content":" String result \u003d super.toString();","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"[Activity]\", \"[Swim]\");","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"AlWo223"},"content":" String averageLapTimeOutput \u003d this.averageLapTime + \"s\";","lastModifiedDate":"2023-10-13"},{"lineNumber":51,"author":{"gitId":"AlWo223"},"content":" result \u003d result.replace(\"Time: \", \"Avg Lap Time: \" + averageLapTimeOutput + \" | Time: \");","lastModifiedDate":"2023-10-13"},{"lineNumber":52,"author":{"gitId":"AlWo223"},"content":" return result;","lastModifiedDate":"2023-10-13"},{"lineNumber":53,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" * Returns a detailed summary of the swim.","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"AlWo223"},"content":" * @return a multiline string representation of the swim","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"AlWo223"},"content":" public String toDetailedString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"AlWo223"},"content":" String startDateTimeOutput \u003d generateStartDateTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" String movingTimeOutput \u003d generateMovingTimeStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"AlWo223"},"content":" String distanceOutput \u003d generateDistanceStringOutput();","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" int columnWidth \u003d getColumnWidth();","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" String header \u003d \"[Swim - \" + this.getCaption() + \" - \" + startDateTimeOutput + \"]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" String firstRow \u003d formatTwoColumns(\"\\tDistance: \" + distanceOutput, \"Moving Time: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" movingTimeOutput, columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"AlWo223"},"content":" String secondRow \u003d formatTwoColumns(\"\\tAvg Lap Time: \" + averageLapTime + \" s\", \"Calories: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"AlWo223"},"content":" this.getCalories() + \" kcal\", columnWidth);","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"AlWo223"},"content":" return String.join(System.lineSeparator(), header, firstRow, secondRow);","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-11"}],"authorContributionMap":{"skylee03":2,"AlWo223":72}},{"path":"src/main/java/athleticli/data/diet/Diet.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.diet;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":" * Defines the basic fields and methods of a diet.","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"public class Diet implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":" private int calories;","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":" private int protein;","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" private int carb;","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" private int fat;","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" * Constructs a \u003ccode\u003eDiet\u003c/code\u003e object.","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" * @param calories The caloric value of the diet in cal.","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" * @param protein Protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" * @param carb Carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" * @param fat Fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" public Diet(int calories, int protein, int carb, int fat) {","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" this.calories \u003d calories;","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" this.protein \u003d protein;","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" this.carb \u003d carb;","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" this.fat \u003d fat;","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" * Returns the caloric value of the diet in cal.","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" * @return The caloric value of the diet in cal.","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" public int getCalories() {","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" return calories;","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" * Sets the caloric value of the diet in cal.","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" * @param calories The caloric value of the diet in cal.","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" public void setCalories(int calories) {","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" this.calories \u003d calories;","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" * Returns the protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":" * @return Protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" public int getProtein() {","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" return protein;","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" * Sets the protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" * @param protein Protein intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":" public void setProtein(int protein) {","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" this.protein \u003d protein;","lastModifiedDate":"2023-10-14"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":" * Returns the carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":" * @return Carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":" public int getCarb() {","lastModifiedDate":"2023-10-14"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":" return carb;","lastModifiedDate":"2023-10-14"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":" * Sets the carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":76,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":" * @param carb Carbohydrate intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":78,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":79,"author":{"gitId":"nihalzp"},"content":" public void setCarb(int carb) {","lastModifiedDate":"2023-10-14"},{"lineNumber":80,"author":{"gitId":"nihalzp"},"content":" this.carb \u003d carb;","lastModifiedDate":"2023-10-14"},{"lineNumber":81,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":82,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":83,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":84,"author":{"gitId":"nihalzp"},"content":" * Returns the fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":85,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":86,"author":{"gitId":"nihalzp"},"content":" * @return Fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":87,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":88,"author":{"gitId":"nihalzp"},"content":" public int getFat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":89,"author":{"gitId":"nihalzp"},"content":" return fat;","lastModifiedDate":"2023-10-14"},{"lineNumber":90,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":91,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":92,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":93,"author":{"gitId":"nihalzp"},"content":" * Sets the fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":94,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":" * @param fat Fat intake in grams.","lastModifiedDate":"2023-10-14"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":97,"author":{"gitId":"nihalzp"},"content":" public void setFat(int fat) {","lastModifiedDate":"2023-10-14"},{"lineNumber":98,"author":{"gitId":"nihalzp"},"content":" this.fat \u003d fat;","lastModifiedDate":"2023-10-14"},{"lineNumber":99,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":100,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":101,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":102,"author":{"gitId":"nihalzp"},"content":" * Returns a string representation of the diet.","lastModifiedDate":"2023-10-14"},{"lineNumber":103,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":104,"author":{"gitId":"nihalzp"},"content":" * @return A string representation of the diet.","lastModifiedDate":"2023-10-14"},{"lineNumber":105,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":106,"author":{"gitId":"nihalzp"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":107,"author":{"gitId":"nihalzp"},"content":" public String toString() {","lastModifiedDate":"2023-10-14"},{"lineNumber":108,"author":{"gitId":"nihalzp"},"content":" return \"Calories: \" + calories + \" Protein: \" + protein + \" Carb: \" + carb + \" Fat: \" + fat;","lastModifiedDate":"2023-10-14"},{"lineNumber":109,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":110,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":6,"nihalzp":104}},{"path":"src/main/java/athleticli/data/diet/DietGoal.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.diet;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":" * Represents a diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"public class DietGoal implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":" private String nutrients;","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":" private int targetValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" private int currentValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" private boolean isGoalAchieved;","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" * Constructs a diet goal with no current value.","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" * @param nutrients The nutrients of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" * @param targetValue The target value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" public DietGoal(String nutrients, int targetValue) {","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" this.nutrients \u003d nutrients;","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" this.targetValue \u003d targetValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" currentValue \u003d 0;","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" isGoalAchieved \u003d false;","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" * Constructs a diet goal with a current value.","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" * @param nutrients The nutrients of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" * @param targetValue The target value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" * @param currentValue The current value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" public DietGoal(String nutrients, int targetValue, int currentValue) {","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" this.nutrients \u003d nutrients;","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" this.targetValue \u003d targetValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" this.currentValue \u003d currentValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" isGoalAchieved \u003d currentValue \u003e\u003d targetValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" * Returns the nutrients of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" * @return The nutrients of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":" public String getNutrients() {","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" return nutrients;","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":" * Sets the nutrients of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" * @param nutrients The nutrients of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":" public void setNutrients(String nutrients) {","lastModifiedDate":"2023-10-13"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" this.nutrients \u003d nutrients;","lastModifiedDate":"2023-10-13"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" * Returns the target value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" * @return The target value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":" public int getTargetValue() {","lastModifiedDate":"2023-10-13"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" return targetValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":" * Sets the target value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":" * @param targetValue The target value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":" public void setTargetValue(int targetValue) {","lastModifiedDate":"2023-10-13"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":" this.targetValue \u003d targetValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":" setIsGoalAchieved(currentValue \u003e\u003d targetValue);","lastModifiedDate":"2023-10-13"},{"lineNumber":76,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":78,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":79,"author":{"gitId":"nihalzp"},"content":" * Returns the current value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":80,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":81,"author":{"gitId":"nihalzp"},"content":" * @return The current value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":82,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":83,"author":{"gitId":"nihalzp"},"content":" public int getCurrentValue() {","lastModifiedDate":"2023-10-13"},{"lineNumber":84,"author":{"gitId":"nihalzp"},"content":" return currentValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":85,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":86,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":87,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":88,"author":{"gitId":"nihalzp"},"content":" * Sets the current value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":89,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":90,"author":{"gitId":"nihalzp"},"content":" * @param currentValue The current value of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":91,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":92,"author":{"gitId":"nihalzp"},"content":" public void setCurrentValue(int currentValue) {","lastModifiedDate":"2023-10-13"},{"lineNumber":93,"author":{"gitId":"nihalzp"},"content":" this.currentValue \u003d currentValue;","lastModifiedDate":"2023-10-13"},{"lineNumber":94,"author":{"gitId":"nihalzp"},"content":" setIsGoalAchieved(currentValue \u003e\u003d targetValue);","lastModifiedDate":"2023-10-14"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":97,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":98,"author":{"gitId":"nihalzp"},"content":" * Returns whether the diet goal is achieved.","lastModifiedDate":"2023-10-14"},{"lineNumber":99,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":100,"author":{"gitId":"nihalzp"},"content":" * @return Whether the diet goal is achieved.","lastModifiedDate":"2023-10-14"},{"lineNumber":101,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":102,"author":{"gitId":"nihalzp"},"content":" public boolean getIsGoalAchieved() {","lastModifiedDate":"2023-10-13"},{"lineNumber":103,"author":{"gitId":"nihalzp"},"content":" return isGoalAchieved;","lastModifiedDate":"2023-10-13"},{"lineNumber":104,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":105,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":106,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":107,"author":{"gitId":"nihalzp"},"content":" * Sets whether the diet goal is achieved.","lastModifiedDate":"2023-10-14"},{"lineNumber":108,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":109,"author":{"gitId":"nihalzp"},"content":" * @param isGoalAchieved Whether the diet goal is achieved.","lastModifiedDate":"2023-10-14"},{"lineNumber":110,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":111,"author":{"gitId":"nihalzp"},"content":" private void setIsGoalAchieved(boolean isGoalAchieved) {","lastModifiedDate":"2023-10-13"},{"lineNumber":112,"author":{"gitId":"nihalzp"},"content":" this.isGoalAchieved \u003d isGoalAchieved;","lastModifiedDate":"2023-10-13"},{"lineNumber":113,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":114,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":115,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":116,"author":{"gitId":"nihalzp"},"content":" * Returns the string representation of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":117,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":118,"author":{"gitId":"nihalzp"},"content":" * @return The string representation of the diet goal.","lastModifiedDate":"2023-10-14"},{"lineNumber":119,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":120,"author":{"gitId":"nihalzp"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":121,"author":{"gitId":"nihalzp"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":122,"author":{"gitId":"nihalzp"},"content":" return nutrients + \" intake progress: (\" + currentValue + \"/\" + targetValue + \")\\n\";","lastModifiedDate":"2023-10-14"},{"lineNumber":123,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":124,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":6,"nihalzp":118}},{"path":"src/main/java/athleticli/data/diet/DietGoalList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.diet;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":" * Represents a list of diet goals.","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"public class DietGoalList extends ArrayList\u003cDietGoal\u003e implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" * Constructs a diet goal list.","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" public DietGoalList() {","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" super();","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" * Returns a string representation of the diet goal list.","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" * @return A string representation of the diet goal list.","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" public String toString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c size(); i++) {","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" result.append(\"\\t\").append(i + 1).append(\". \").append(get(i).toString());","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" if (i !\u003d size() - 1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" result.append(\"\\n\");","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" return result.toString();","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":7,"yicheng-toh":1,"nihalzp":25}},{"path":"src/main/java/athleticli/data/diet/DietList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.diet;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":" * Represents a list of diets.","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"public class DietList extends ArrayList\u003cDiet\u003e implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" * Constructs a diet list.","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" public DietList() {","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" super();","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" * Returns a string representation of the diet list.","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" * @return A string representation of the diet list.","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" @Override","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" public String toString() {","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c size(); i++) {","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" result.append(i + 1).append(\". \").append(get(i).toString());","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" if (i !\u003d size() - 1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" result.append(\"\\n\");","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" return result.toString();","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":7,"nihalzp":26}},{"path":"src/main/java/athleticli/data/sleep/Sleep.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.sleep;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":" * Represents a sleep record.","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"public class Sleep implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":" private static final DateTimeFormatter DATE_TIME_FORMATTER \u003d DateTimeFormatter.ofPattern(\"dd-MM-YYYY HH:mm\");","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" * Constructor for Sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" * @param from Start time of the sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" * @param to End time of the sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" public Sleep(LocalDateTime from, LocalDateTime to) {","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" this.from \u003d from;","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" this.to \u003d to;","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":" * toString method for Sleep.","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"DaDevChia"},"content":" * @return String representation of the sleep record.","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":" public String toString() {","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"DaDevChia"},"content":" return \"sleep record from \" + from.format(DATE_TIME_FORMATTER) + \" to \" + to.format(DATE_TIME_FORMATTER);","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":4,"DaDevChia":32}},{"path":"src/main/java/athleticli/data/sleep/SleepGoal.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":" * To be implemented in future version of AthletiCLI.","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"package athleticli.data.sleep;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"public class SleepGoal implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":6,"DaDevChia":4}},{"path":"src/main/java/athleticli/data/sleep/SleepGoalList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":" * To be implemented in future version of AthletiCLI.","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"package athleticli.data.sleep;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import java.io.Serializable;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"public class SleepGoalList extends ArrayList\u003cSleepGoal\u003e implements Serializable {","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":7,"DaDevChia":3}},{"path":"src/main/java/athleticli/data/sleep/SleepList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.data.sleep;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":" * Represents a list of sleep records.","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"public class SleepList extends ArrayList\u003cSleep\u003e {","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":6,"DaDevChia":3}},{"path":"src/main/java/athleticli/exceptions/AthletiException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.exceptions;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":" * Represents the exceptions that need to be shown to the user.","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"public class AthletiException extends Exception {","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":" public AthletiException(String message) {","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":" super(message);","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":10}},{"path":"src/main/java/athleticli/storage/Config.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.storage;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":" * Defines string literals or configurations used for file storage.","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"public class Config {","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":" public static final String PATH_SAVE \u003d \"./data/athleticli.bin\";","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"skylee03":8}},{"path":"src/main/java/athleticli/storage/Storage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.storage;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.File;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.io.FileInputStream;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import java.io.FileOutputStream;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"import java.io.ObjectInputStream;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":"import java.io.ObjectOutputStream;","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":" * Defines the basic methods for file storage.","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":"public class Storage {","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" * Returns the data read from the file, or an empty \u003ccode\u003eData\u003c/code\u003e","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" * object if the file does not exist or cannot be parsed properly.","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" * @return The data read from the file, or an empty \u003ccode\u003eData\u003c/code\u003e object.","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":" public static Data load() {","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" try (var fileInputStream \u003d new FileInputStream(Config.PATH_SAVE);","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" var objectInputStream \u003d new ObjectInputStream(fileInputStream)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" return (Data) objectInputStream.readObject();","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" return new Data();","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" * Saves the data into the file.","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" * @param data The data to be saved.","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" * @throws IOException","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" public static void save(Data data) throws IOException {","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" File file \u003d new File(Config.PATH_SAVE);","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" file.createNewFile();","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" var fileOutputStream \u003d new FileOutputStream(file, false);","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" var objectOutputStream \u003d new ObjectOutputStream(fileOutputStream);","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" objectOutputStream.writeObject(data);","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"skylee03":47}},{"path":"src/main/java/athleticli/ui/CommandName.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.ui;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":" * Defines string literals for command names.","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"public class CommandName {","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":" public static final String COMMAND_BYE \u003d \"bye\";","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":" public static final String COMMAND_HELP \u003d \"help\";","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":" public static final String COMMAND_SAVE \u003d \"save\";","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":" public static final String COMMAND_SLEEP_ADD \u003d \"add-sleep\";","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":" public static final String COMMAND_SLEEP_EDIT \u003d \"edit-sleep\";","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":" public static final String COMMAND_SLEEP_DELETE \u003d \"delete-sleep\";","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":" public static final String COMMAND_SLEEP_LIST \u003d \"list-sleep\";","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_RUN \u003d \"run\";","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_ACTIVITY \u003d \"activity\";","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_CYCLE \u003d \"cycle\";","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_SWIM \u003d \"swim\";","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_ACTIVITY_DELETE \u003d \"delete-activity\";","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_ACTIVITY_LIST \u003d \"list-activity\";","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_ACTIVITY_EDIT \u003d \"edit-activity\";","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_RUN_EDIT \u003d \"edit-run\";","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_CYCLE_EDIT \u003d \"edit-cycle\";","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" public static final String COMMAND_SWIM_EDIT \u003d \"edit-swim\";","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" public static final String COMMAND_DIET_GOAL_SET \u003d \"set-diet-goal\";","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" public static final String COMMAND_DIET_GOAL_EDIT \u003d \"edit-diet-goal\";","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":" public static final String COMMAND_DIET_GOAL_LIST \u003d \"list-diet-goal\";","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" public static final String COMMAND_DIET_GOAL_DELETE \u003d \"delete-diet-goal\";","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" public static final String COMMAND_DIET_ADD \u003d \"add-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" public static final String COMMAND_DIET_DELETE \u003d \"delete-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" public static final String COMMAND_DIET_LIST \u003d \"list-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":10,"DaDevChia":6,"AlWo223":10,"yicheng-toh":5,"nihalzp":3}},{"path":"src/main/java/athleticli/ui/Message.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.ui;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"public class Message {","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":" public static final String PROMPT \u003d \"\u003e \";","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":" public static final String LINE \u003d \"____________________________________________________________\\n\";","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":" public static final String PREFIX_MESSAGE \u003d \" \";","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":" public static final String PREFIX_EXCEPTION \u003d \"OOPS!!! \";","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":" public static final String MESSAGE_BYE \u003d \"Bye. Hope to see you again soon!\";","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":" public static final String[] MESSAGE_HELLO \u003d {\"Hello! I\u0027m AthletiCLI!\", \"What can I do for you?\"};","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":" public static final String MESSAGE_SAVE \u003d \"File saved successfully!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_CAPTION_MISSING \u003d \"The caption of an activity cannot be empty!\";","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DURATION_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" \"Please specify the activity duration using \\\"duration/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DISTANCE_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" \"Please specify the activity duration using \\\"distance/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DATETIME_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" \"Please specify the activity duration using \\\"datetime/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CALORIES_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" \"Please specify the calories burned using \\\"calories/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_PROTEIN_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" \"Please specify the protein intake using \\\"protein/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CARB_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" \"Please specify the carbohydrate intake using \\\"carb/\\\"!\";","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_FAT_MISSING \u003d \"Please specify the fat intake using \\\"fat/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_CAPTION_EMPTY \u003d \"The caption of an activity cannot be empty!\";","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_DURATION_EMPTY \u003d \"The duration of an activity cannot be empty!\";","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_DISTANCE_EMPTY \u003d \"The distance of an activity cannot be empty!\";","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_DATETIME_EMPTY \u003d \"The datetime of an activity cannot be empty!\";","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CALORIES_EMPTY \u003d \"The calories burned cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_PROTEIN_EMPTY \u003d \"The protein intake cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CARB_EMPTY \u003d \"The carbohydrate intake cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_FAT_EMPTY \u003d \"The fat intake cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DURATION_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" \"The duration of an activity must be a positive integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DISTANCE_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" \"The distance of an activity must be a positive integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DATETIME_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" \"The datetime of an activity must be in the format \" + \"\\\"yyyy-MM-dd HH:mm\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CALORIES_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" \"The calories burned must be a non-negative integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_PROTEIN_INVALID \u003d \"The protein intake must be a non-negative integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_CARB_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" \"The carbohydrate intake must be a non-negative integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_FAT_INVALID \u003d \"The fat intake must be a non-negative integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_ADDED \u003d \"Well done! I\u0027ve added this activity:\";","lastModifiedDate":"2023-10-13"},{"lineNumber":46,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_DELETED \u003d \"Gotcha, I\u0027ve deleted this activity:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_ADDED \u003d \"Well done! I\u0027ve added this diet:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_ELEVATION_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" \"Please specify the elevation gain using \\\"elevation/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_ELEVATION_EMPTY \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" \"The elevation gain of an activity cannot be empty!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_ELEVATION_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" \"The elevation gain of an activity must be an integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_INDEX_INVALID \u003d \"The activity index must be an integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_INDEX_OUT_OF_BOUNDS \u003d \"The activity index does not exist, check your \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"AlWo223"},"content":" \"list for the correct index!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_SWIMMINGSTYLE_MISSING \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" \"Please specify the swimming style using \\\"style/\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_SWIMMINGSTYLE_INVALID \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" \"The swimming style of an activity must be one of \" +","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"AlWo223"},"content":" \"the following: \\\"butterfly\\\", \\\"backstroke\\\", \\\"breaststroke\\\", \\\"freestyle\\\"!\";","lastModifiedDate":"2023-10-13"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_ACTIVITY_COUNT \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"AlWo223"},"content":" \"You have tracked a total of %d activities. Keep pushing!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_LIST \u003d \"These are the activities you have tracked so far:\";","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_EDIT_INVALID \u003d \"Oops, the format of the edit command is wrong! Please\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"AlWo223"},"content":" \" provide the index and the updated entry!\";","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"AlWo223"},"content":" public static final String MESSAGE_ACTIVITY_UPDATED \u003d \"Ok, I\u0027ve updated this activity:\";","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_COUNT \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked a total of %d diets. Keep grinding!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_ACTIVITY_FIRST \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked your first activity. This is just the beginning!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_TARGET_VALUE_NOT_POSITIVE_INT \u003d \"The target value for nutrients \" +","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"yicheng-toh"},"content":" \"must be a positive integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_INVALID_NUTRIENT \u003d \"Key word to nutrients goals has to be one of the \" +","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"yicheng-toh"},"content":" \"following: \\\"calories\\\", \\\"protein\\\", \\\"carb\\\", \\\"fats\\\"!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_ALREADY_EXISTED \u003d \"Diet goal for %s has already existed. \" +","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"yicheng-toh"},"content":" \"Please edit the goal instead!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_NOT_EXISTED \u003d \"Diet goal for %s is not present. \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"yicheng-toh"},"content":" \"Please add the goal before editing it!\";","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_COUNT \u003d \"Now you have %d diet goal(s).\";","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_NONE \u003d \"There are no goals at the moment. Add a diet goal to start.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_LIST_HEADER \u003d \"These are your goal(s):\\n\";","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_INCORRECT_INTEGER_FORMAT \u003d \"Please provide a positive integer.\\n\";","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_EMPTY_DIETGOALLIST \u003d \"There is no diet goals at the moment. \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"yicheng-toh"},"content":" \"Please add one to continue.\\n\";","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_DELETE_HEADER \u003d \"The following goal has been deleted:\\n\";","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_OUT_OF_BOUND \u003d \"Unable to fetch diet goal. \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"yicheng-toh"},"content":" \"Please enter a value from 1 to %d.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSAGE_DIETGOAL_INSUFFICIENT_INPUT \u003d \"Please input the following keywords \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"yicheng-toh"},"content":" \"to create or edit your diet goals:\\n \\\"calories\\\", \\\"protein\\\", \\\"carb\\\", \\\"fats\\\"\";","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"yicheng-toh"},"content":" public static final String MESSSAGE_DIETGOAL_REPEATED_NUTRIENT \u003d \"Please ensure that there are \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"yicheng-toh"},"content":" \"no repetitions for your diet goal nutrients.\";","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_FIRST \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked your first diet. This is just the beginning!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_INVALID_DIET_INDEX \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"nihalzp"},"content":" \"The diet index is invalid! Please enter a valid diet index!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_INDEX_TYPE_INVALID \u003d \"The diet index must be an integer!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_DELETED \u003d \"Noted. I\u0027ve removed this diet:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"nihalzp"},"content":" public static final String MESSAGE_DIET_LIST \u003d \"Here are the diets in your list:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"DaDevChia"},"content":" public static final String MESSAGE_SLEEP_DELETE_INVALID_INDEX \u003d \"Invalid index. Please enter a valid index.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"DaDevChia"},"content":" public static final String MESSAGE_SLEEP_DELETE_RETURN \u003d \"Got it. I\u0027ve deleted this sleep record at index %d: %s\";","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"DaDevChia"},"content":" public static final String MESSAGE_SLEEP_EDIT_RETURN \u003d \"Got it. I\u0027ve changed this sleep record at index %d:\";","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"DaDevChia"},"content":" public static final String MESSAGE_SLEEP_LIST \u003d \"Here are the sleep records in your list:\\n\";","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"DaDevChia"},"content":" public static final String MESSAGE_SLEEP_LIST_EMPTY \u003d \"You have no sleep records in your list.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"DaDevChia"},"content":" public static final String MESSAGE_SLEEP_ADD_RETURN_1 \u003d \"Got it. I\u0027ve added this sleep record:\";","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"DaDevChia"},"content":" public static final String MESSAGE_SLEEP_ADD_RETURN_2 \u003d \"Now you have %d sleep records in the list.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_INVALID_DATE_TIME_FORMAT \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"DaDevChia"},"content":" \"Invalid date-time format. Please use dd-MM-yyyy HH:mm.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"DaDevChia"},"content":" \"Please specify both the start and end time of your sleep.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_END_BEFORE_START \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"DaDevChia"},"content":" \"Please specify the start time of your sleep before the end time.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_DELETE_NO_INDEX \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"DaDevChia"},"content":" \"Please specify the index of the sleep record you want to delete.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_PARSER_SLEEP_EDIT_NO_INDEX \u003d ","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"DaDevChia"},"content":" \"Please specify the index of the sleep record you want to edit.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_SLEEP_EDIT_INDEX_OOBE \u003d ","lastModifiedDate":"2023-10-18"},{"lineNumber":121,"author":{"gitId":"DaDevChia"},"content":" \"The index of the sleep record you want to edit is out of bounds.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"DaDevChia"},"content":" public static final String ERRORMESSAGE_SLEEP_DELETE_INDEX_OOBE \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":123,"author":{"gitId":"DaDevChia"},"content":" \"The index of the sleep record you want to delete is out of bounds.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":124,"author":{"gitId":"skylee03"},"content":" public static final String MESSAGE_UNKNOWN_COMMAND \u003d \"I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-10-16"},{"lineNumber":125,"author":{"gitId":"skylee03"},"content":" public static final String MESSAGE_IO_EXCEPTION \u003d \"An I/O exception occurred.\";","lastModifiedDate":"2023-10-22"},{"lineNumber":126,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":127,"author":{"gitId":"skylee03"},"content":" /* Help Messages */","lastModifiedDate":"2023-10-21"},{"lineNumber":128,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_ACTIVITY \u003d CommandName.COMMAND_ACTIVITY","lastModifiedDate":"2023-10-21"},{"lineNumber":129,"author":{"gitId":"skylee03"},"content":" + \" CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME\";","lastModifiedDate":"2023-10-21"},{"lineNumber":130,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_RUN \u003d CommandName.COMMAND_RUN","lastModifiedDate":"2023-10-21"},{"lineNumber":131,"author":{"gitId":"skylee03"},"content":" + \" CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION\";","lastModifiedDate":"2023-10-21"},{"lineNumber":132,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_SWIM \u003d CommandName.COMMAND_SWIM","lastModifiedDate":"2023-10-21"},{"lineNumber":133,"author":{"gitId":"skylee03"},"content":" + \" CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS\";","lastModifiedDate":"2023-10-21"},{"lineNumber":134,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_CYCLE \u003d CommandName.COMMAND_CYCLE","lastModifiedDate":"2023-10-21"},{"lineNumber":135,"author":{"gitId":"skylee03"},"content":" + \" CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION\";","lastModifiedDate":"2023-10-21"},{"lineNumber":136,"author":{"gitId":"skylee03"},"content":" public static final String HELP_DELETE_ACTIVITY \u003d CommandName.COMMAND_ACTIVITY_DELETE","lastModifiedDate":"2023-10-21"},{"lineNumber":137,"author":{"gitId":"skylee03"},"content":" + \" INDEX\";","lastModifiedDate":"2023-10-21"},{"lineNumber":138,"author":{"gitId":"skylee03"},"content":" public static final String HELP_LIST_ACTIVITY \u003d CommandName.COMMAND_ACTIVITY_LIST","lastModifiedDate":"2023-10-21"},{"lineNumber":139,"author":{"gitId":"skylee03"},"content":" + \" [-d]\";","lastModifiedDate":"2023-10-21"},{"lineNumber":140,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_ACTIVITY \u003d CommandName.COMMAND_ACTIVITY_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":141,"author":{"gitId":"skylee03"},"content":" + \" INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME\";","lastModifiedDate":"2023-10-21"},{"lineNumber":142,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_RUN \u003d CommandName.COMMAND_RUN_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":143,"author":{"gitId":"skylee03"},"content":" + \" INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION\";","lastModifiedDate":"2023-10-21"},{"lineNumber":144,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_SWIM \u003d CommandName.COMMAND_SWIM_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":145,"author":{"gitId":"skylee03"},"content":" + \" INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME laps/LAPS\";","lastModifiedDate":"2023-10-21"},{"lineNumber":146,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_CYCLE \u003d CommandName.COMMAND_CYCLE_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":147,"author":{"gitId":"skylee03"},"content":" + \" INDEX CAPTION duration/DURATION distance/DISTANCE datetime/DATETIME elevation/ELEVATION\";","lastModifiedDate":"2023-10-21"},{"lineNumber":148,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_DIET \u003d CommandName.COMMAND_DIET_ADD","lastModifiedDate":"2023-10-21"},{"lineNumber":149,"author":{"gitId":"skylee03"},"content":" + \" calories/CALORIES protein/PROTEIN carb/CARB fat/FAT\";","lastModifiedDate":"2023-10-21"},{"lineNumber":150,"author":{"gitId":"skylee03"},"content":" public static final String HELP_DELETE_DIET \u003d CommandName.COMMAND_DIET_DELETE","lastModifiedDate":"2023-10-21"},{"lineNumber":151,"author":{"gitId":"skylee03"},"content":" + \" INDEX\";","lastModifiedDate":"2023-10-21"},{"lineNumber":152,"author":{"gitId":"skylee03"},"content":" public static final String HELP_LIST_DIET \u003d CommandName.COMMAND_DIET_LIST;","lastModifiedDate":"2023-10-21"},{"lineNumber":153,"author":{"gitId":"skylee03"},"content":" public static final String HELP_ADD_SLEEP \u003d CommandName.COMMAND_SLEEP_ADD","lastModifiedDate":"2023-10-21"},{"lineNumber":154,"author":{"gitId":"skylee03"},"content":" + \" start/START end/END\";","lastModifiedDate":"2023-10-21"},{"lineNumber":155,"author":{"gitId":"skylee03"},"content":" public static final String HELP_LIST_SLEEP \u003d CommandName.COMMAND_SLEEP_LIST;","lastModifiedDate":"2023-10-21"},{"lineNumber":156,"author":{"gitId":"skylee03"},"content":" public static final String HELP_DELETE_SLEEP \u003d CommandName.COMMAND_SLEEP_DELETE","lastModifiedDate":"2023-10-21"},{"lineNumber":157,"author":{"gitId":"skylee03"},"content":" + \" INDEX\";","lastModifiedDate":"2023-10-21"},{"lineNumber":158,"author":{"gitId":"skylee03"},"content":" public static final String HELP_EDIT_SLEEP \u003d CommandName.COMMAND_SLEEP_EDIT","lastModifiedDate":"2023-10-21"},{"lineNumber":159,"author":{"gitId":"skylee03"},"content":" + \" INDEX start/START end/END\";","lastModifiedDate":"2023-10-21"},{"lineNumber":160,"author":{"gitId":"skylee03"},"content":" public static final String HELP_SAVE \u003d CommandName.COMMAND_SAVE;","lastModifiedDate":"2023-10-22"},{"lineNumber":161,"author":{"gitId":"skylee03"},"content":" public static final String HELP_BYE \u003d CommandName.COMMAND_BYE;","lastModifiedDate":"2023-10-21"},{"lineNumber":162,"author":{"gitId":"skylee03"},"content":" public static final String HELP_HELP \u003d CommandName.COMMAND_HELP","lastModifiedDate":"2023-10-21"},{"lineNumber":163,"author":{"gitId":"skylee03"},"content":" + \" [COMMAND]\";","lastModifiedDate":"2023-10-21"},{"lineNumber":164,"author":{"gitId":"skylee03"},"content":" public static final String HELP_DETAILS \u003d","lastModifiedDate":"2023-10-21"},{"lineNumber":165,"author":{"gitId":"skylee03"},"content":" \"Please check our user guide (https://ay2324s1-cs2113-t17-1.github.io/tp/) for details.\";","lastModifiedDate":"2023-10-21"},{"lineNumber":166,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":53,"DaDevChia":22,"AlWo223":16,"yicheng-toh":25,"nihalzp":50}},{"path":"src/main/java/athleticli/ui/NutrientVerifier.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"package athleticli.ui;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import java.util.Set;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"/**","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":" * Verify the nutrient from a list of approved nutrients to be log in diet and diet goals","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"public class NutrientVerifier {","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":" public static final Set\u003cString\u003e VERIFIED_NUTRIENTS \u003d Set.of(\"fats\", \"carb\", \"protein\", \"calories\");","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":" * Verifies if a nutrient is approved.","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":" * @param nutrient","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":" * @return boolean value if it is found in the approved list.","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":" public static boolean verify(String nutrient) {","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":" return VERIFIED_NUTRIENTS.contains(nutrient);","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"yicheng-toh":21}},{"path":"src/main/java/athleticli/ui/Parameter.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"public class Parameter {","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":" public static final String DURATION_SEPARATOR \u003d \"duration/\";","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":" public static final String DISTANCE_SEPARATOR \u003d \"distance/\";","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":" public static final String DATETIME_SEPARATOR \u003d \"datetime/\";","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":" public static final String ELEVATION_SEPARATOR \u003d \"elevation/\";","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":" public static final String SWIMMING_STYLE_SEPARATOR \u003d \"style/\";","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":" public static final String DETAIL_FLAG \u003d \"-d\";","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":" public static final String START_TIME_SEPARATOR \u003d \"start/\";","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":" public static final String END_TIME_SEPARATOR \u003d \"end/\";","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"DaDevChia":3,"AlWo223":11}},{"path":"src/main/java/athleticli/ui/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.ui;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.ByeCommand;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.Command;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.HelpCommand;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.SaveCommand;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.AddActivityCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.DeleteActivityCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.EditActivityCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"import athleticli.commands.activity.ListActivityCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.AddDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.DeleteDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.DeleteDietGoalCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.EditDietGoalCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.ListDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.ListDietGoalCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.commands.diet.SetDietGoalCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.AddSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.DeleteSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.EditSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.ListSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Activity;","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Cycle;","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Run;","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Swim;","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoal;","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":"import java.util.HashSet;","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":"import java.util.Set;","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" * Defines the basic methods for command parser.","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":"public class Parser {","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":" private static DateTimeFormatter sleepTimeFormatter \u003d DateTimeFormatter.ofPattern(\"dd-MM-yyyy HH:mm\");","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" private static final String CALORIES_MARKER \u003d \"calories\";","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" private static final String PROTEIN_MARKER \u003d \"protein\";","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" private static final String CARB_MARKER \u003d \"carb\";","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" private static final String FAT_MARKER \u003d \"fats\";","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" * Splits the raw user input into two parts, and then returns them. The first part is the command type,","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" * while the second part is the command arguments. The second part can be empty.","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":" * @param rawUserInput The raw user input.","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" * @return A string array whose first element is the command type","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":" * and the second element is the command arguments.","lastModifiedDate":"2023-10-08"},{"lineNumber":59,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":60,"author":{"gitId":"skylee03"},"content":" public static String[] splitCommandWordAndArgs(String rawUserInput) {","lastModifiedDate":"2023-10-08"},{"lineNumber":61,"author":{"gitId":"skylee03"},"content":" assert rawUserInput !\u003d null : \"`rawUserInput` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" final String[] split \u003d rawUserInput.trim().split(\"\\\\s+\", 2);","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":" return split.length \u003d\u003d 2 ? split : new String[]{split[0], \"\"};","lastModifiedDate":"2023-10-08"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":65,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":" * Parses the raw user input and returns the corresponding command object.","lastModifiedDate":"2023-10-08"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":" * @param rawUserInput The raw user input.","lastModifiedDate":"2023-10-08"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":" * @return An object representing the command.","lastModifiedDate":"2023-10-08"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":" public static Command parseCommand(String rawUserInput) throws AthletiException {","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":" assert rawUserInput !\u003d null : \"`rawUserInput` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":" final String[] commandTypeAndParams \u003d splitCommandWordAndArgs(rawUserInput);","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":" final String commandType \u003d commandTypeAndParams[0];","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":" final String commandArgs \u003d commandTypeAndParams[1];","lastModifiedDate":"2023-10-08"},{"lineNumber":78,"author":{"gitId":"skylee03"},"content":" switch (commandType) {","lastModifiedDate":"2023-10-08"},{"lineNumber":79,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_BYE:","lastModifiedDate":"2023-10-08"},{"lineNumber":80,"author":{"gitId":"skylee03"},"content":" return new ByeCommand();","lastModifiedDate":"2023-10-08"},{"lineNumber":81,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_HELP:","lastModifiedDate":"2023-10-21"},{"lineNumber":82,"author":{"gitId":"skylee03"},"content":" return new HelpCommand(commandArgs);","lastModifiedDate":"2023-10-21"},{"lineNumber":83,"author":{"gitId":"skylee03"},"content":" case CommandName.COMMAND_SAVE:","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"skylee03"},"content":" return new SaveCommand();","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"DaDevChia"},"content":" case CommandName.COMMAND_SLEEP_ADD:","lastModifiedDate":"2023-10-12"},{"lineNumber":86,"author":{"gitId":"DaDevChia"},"content":" return parseSleepAdd(commandArgs);","lastModifiedDate":"2023-10-12"},{"lineNumber":87,"author":{"gitId":"DaDevChia"},"content":" case CommandName.COMMAND_SLEEP_LIST:","lastModifiedDate":"2023-10-12"},{"lineNumber":88,"author":{"gitId":"DaDevChia"},"content":" return new ListSleepCommand();","lastModifiedDate":"2023-10-12"},{"lineNumber":89,"author":{"gitId":"DaDevChia"},"content":" case CommandName.COMMAND_SLEEP_EDIT:","lastModifiedDate":"2023-10-12"},{"lineNumber":90,"author":{"gitId":"DaDevChia"},"content":" return parseSleepEdit(commandArgs);","lastModifiedDate":"2023-10-12"},{"lineNumber":91,"author":{"gitId":"DaDevChia"},"content":" case CommandName.COMMAND_SLEEP_DELETE:","lastModifiedDate":"2023-10-12"},{"lineNumber":92,"author":{"gitId":"DaDevChia"},"content":" return parseSleepDelete(commandArgs);","lastModifiedDate":"2023-10-12"},{"lineNumber":93,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_ACTIVITY:","lastModifiedDate":"2023-10-13"},{"lineNumber":94,"author":{"gitId":"AlWo223"},"content":" return new AddActivityCommand(parseActivity(commandArgs));","lastModifiedDate":"2023-10-13"},{"lineNumber":95,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_CYCLE:","lastModifiedDate":"2023-10-13"},{"lineNumber":96,"author":{"gitId":"AlWo223"},"content":" return new AddActivityCommand(parseRunCycle(commandArgs, false));","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_RUN:","lastModifiedDate":"2023-10-13"},{"lineNumber":98,"author":{"gitId":"AlWo223"},"content":" return new AddActivityCommand(parseRunCycle(commandArgs, true));","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_SWIM:","lastModifiedDate":"2023-10-13"},{"lineNumber":100,"author":{"gitId":"AlWo223"},"content":" return new AddActivityCommand(parseSwim(commandArgs));","lastModifiedDate":"2023-10-13"},{"lineNumber":101,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_ACTIVITY_DELETE:","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"AlWo223"},"content":" return new DeleteActivityCommand(parseActivityIndex(commandArgs));","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_ACTIVITY_LIST:","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"AlWo223"},"content":" return new ListActivityCommand(parseActivityListDetail(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_ACTIVITY_EDIT:","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"AlWo223"},"content":" return new EditActivityCommand(parseActivityEdit(commandArgs), parseActivityEditIndex(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_RUN_EDIT:","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"AlWo223"},"content":" return new EditActivityCommand(parseRunEdit(commandArgs), parseActivityEditIndex(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_CYCLE_EDIT:","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"AlWo223"},"content":" return new EditActivityCommand(parseCycleEdit(commandArgs), parseActivityEditIndex(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"AlWo223"},"content":" case CommandName.COMMAND_SWIM_EDIT:","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"AlWo223"},"content":" return new EditActivityCommand(parseSwimEdit(commandArgs), parseActivityEditIndex(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"yicheng-toh"},"content":" case CommandName.COMMAND_DIET_GOAL_SET:","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"yicheng-toh"},"content":" return new SetDietGoalCommand(parseDietGoalSetEdit(commandArgs));","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"yicheng-toh"},"content":" case CommandName.COMMAND_DIET_GOAL_EDIT:","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"yicheng-toh"},"content":" return new EditDietGoalCommand(parseDietGoalSetEdit(commandArgs));","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"yicheng-toh"},"content":" case CommandName.COMMAND_DIET_GOAL_LIST:","lastModifiedDate":"2023-10-16"},{"lineNumber":118,"author":{"gitId":"yicheng-toh"},"content":" return new ListDietGoalCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":119,"author":{"gitId":"yicheng-toh"},"content":" case CommandName.COMMAND_DIET_GOAL_DELETE:","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"yicheng-toh"},"content":" return new DeleteDietGoalCommand(parseDietGoalDelete(commandArgs));","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"nihalzp"},"content":" case CommandName.COMMAND_DIET_ADD:","lastModifiedDate":"2023-10-15"},{"lineNumber":122,"author":{"gitId":"nihalzp"},"content":" return new AddDietCommand(parseDiet(commandArgs));","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"nihalzp"},"content":" case CommandName.COMMAND_DIET_DELETE:","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"nihalzp"},"content":" return new DeleteDietCommand(parseDietIndex(commandArgs));","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"nihalzp"},"content":" case CommandName.COMMAND_DIET_LIST:","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"nihalzp"},"content":" return new ListDietCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"skylee03"},"content":" default:","lastModifiedDate":"2023-10-08"},{"lineNumber":128,"author":{"gitId":"skylee03"},"content":" throw new AthletiException(Message.MESSAGE_UNKNOWN_COMMAND);","lastModifiedDate":"2023-10-16"},{"lineNumber":129,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":130,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":131,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":132,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":133,"author":{"gitId":"AlWo223"},"content":" * Parses the index of an activity.","lastModifiedDate":"2023-10-15"},{"lineNumber":134,"author":{"gitId":"AlWo223"},"content":" * @param commandArgs The raw user input containing the index.","lastModifiedDate":"2023-10-15"},{"lineNumber":135,"author":{"gitId":"AlWo223"},"content":" * @return index The parsed Integer index.","lastModifiedDate":"2023-10-15"},{"lineNumber":136,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input is not an integer.","lastModifiedDate":"2023-10-15"},{"lineNumber":137,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":138,"author":{"gitId":"AlWo223"},"content":" private static int parseActivityIndex(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":139,"author":{"gitId":"AlWo223"},"content":" final String commandArgsTrimmed \u003d commandArgs.trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":140,"author":{"gitId":"AlWo223"},"content":" int index;","lastModifiedDate":"2023-10-15"},{"lineNumber":141,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":142,"author":{"gitId":"AlWo223"},"content":" index \u003d Integer.parseInt(commandArgsTrimmed);","lastModifiedDate":"2023-10-15"},{"lineNumber":143,"author":{"gitId":"AlWo223"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":144,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_INDEX_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":145,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":146,"author":{"gitId":"AlWo223"},"content":" return index;","lastModifiedDate":"2023-10-15"},{"lineNumber":147,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":148,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":149,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":150,"author":{"gitId":"AlWo223"},"content":" * Parses the provided updated activity for the edit command.","lastModifiedDate":"2023-10-18"},{"lineNumber":151,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the updated activity.","lastModifiedDate":"2023-10-18"},{"lineNumber":152,"author":{"gitId":"AlWo223"},"content":" * @return activity The parsed Activity object.","lastModifiedDate":"2023-10-18"},{"lineNumber":153,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":154,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":155,"author":{"gitId":"AlWo223"},"content":" private static Activity parseActivityEdit(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":156,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":157,"author":{"gitId":"AlWo223"},"content":" return parseActivity(arguments.split(\" \", 2)[1]);","lastModifiedDate":"2023-10-17"},{"lineNumber":158,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":159,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":160,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":161,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":162,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":163,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":164,"author":{"gitId":"AlWo223"},"content":" * Parses the provided updated run for the edit command","lastModifiedDate":"2023-10-18"},{"lineNumber":165,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the updated run.","lastModifiedDate":"2023-10-18"},{"lineNumber":166,"author":{"gitId":"AlWo223"},"content":" * @return activity The parsed run object.","lastModifiedDate":"2023-10-18"},{"lineNumber":167,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":168,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":169,"author":{"gitId":"AlWo223"},"content":" private static Activity parseRunEdit(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":170,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":171,"author":{"gitId":"AlWo223"},"content":" return parseRunCycle(arguments.split(\" \", 2)[1], true);","lastModifiedDate":"2023-10-17"},{"lineNumber":172,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":173,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":174,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":175,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":176,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":177,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":178,"author":{"gitId":"AlWo223"},"content":" * Parses the provided updated cycle for the edit command","lastModifiedDate":"2023-10-18"},{"lineNumber":179,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the updated cycle.","lastModifiedDate":"2023-10-18"},{"lineNumber":180,"author":{"gitId":"AlWo223"},"content":" * @return activity The parsed cycle object.","lastModifiedDate":"2023-10-18"},{"lineNumber":181,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":182,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":183,"author":{"gitId":"AlWo223"},"content":" private static Activity parseCycleEdit(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":184,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":185,"author":{"gitId":"AlWo223"},"content":" return parseRunCycle(arguments.split(\" \", 2)[1], false);","lastModifiedDate":"2023-10-17"},{"lineNumber":186,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":187,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":188,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":189,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":190,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":191,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":192,"author":{"gitId":"AlWo223"},"content":" * Parses the provided update swim for the edit command","lastModifiedDate":"2023-10-18"},{"lineNumber":193,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the updated swim.","lastModifiedDate":"2023-10-18"},{"lineNumber":194,"author":{"gitId":"AlWo223"},"content":" * @return activity The parsed swim object.","lastModifiedDate":"2023-10-18"},{"lineNumber":195,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":196,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":197,"author":{"gitId":"AlWo223"},"content":" private static Activity parseSwimEdit(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":198,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":199,"author":{"gitId":"AlWo223"},"content":" return parseSwim(arguments.split(\" \", 2)[1]);","lastModifiedDate":"2023-10-17"},{"lineNumber":200,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":201,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":202,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":203,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":204,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":205,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":206,"author":{"gitId":"AlWo223"},"content":" * Parses the index of an activity update for the edit command.","lastModifiedDate":"2023-10-18"},{"lineNumber":207,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the index.","lastModifiedDate":"2023-10-18"},{"lineNumber":208,"author":{"gitId":"AlWo223"},"content":" * @return index The parsed Integer index.","lastModifiedDate":"2023-10-18"},{"lineNumber":209,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid","lastModifiedDate":"2023-10-18"},{"lineNumber":210,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":211,"author":{"gitId":"AlWo223"},"content":" private static int parseActivityEditIndex(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":212,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":213,"author":{"gitId":"AlWo223"},"content":" return parseActivityIndex(arguments.split(\" \", 2)[0]);","lastModifiedDate":"2023-10-17"},{"lineNumber":214,"author":{"gitId":"AlWo223"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":215,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ACTIVITY_EDIT_INVALID);","lastModifiedDate":"2023-10-17"},{"lineNumber":216,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":217,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":218,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":219,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":220,"author":{"gitId":"AlWo223"},"content":" * Parses the raw user input for viewing the activity list and returns whether the user wants the detailed view","lastModifiedDate":"2023-10-17"},{"lineNumber":221,"author":{"gitId":"AlWo223"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-17"},{"lineNumber":222,"author":{"gitId":"AlWo223"},"content":" * @return boolean Whether the user wants the detailed view.","lastModifiedDate":"2023-10-17"},{"lineNumber":223,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":224,"author":{"gitId":"AlWo223"},"content":" private static boolean parseActivityListDetail(String commandArgs) {","lastModifiedDate":"2023-10-17"},{"lineNumber":225,"author":{"gitId":"AlWo223"},"content":" return commandArgs.toLowerCase().contains(Parameter.DETAIL_FLAG);","lastModifiedDate":"2023-10-18"},{"lineNumber":226,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":227,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":228,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":229,"author":{"gitId":"AlWo223"},"content":" * Parses the raw user input for an activity and returns the corresponding activity object.","lastModifiedDate":"2023-10-13"},{"lineNumber":230,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":231,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the arguments.","lastModifiedDate":"2023-10-13"},{"lineNumber":232,"author":{"gitId":"AlWo223"},"content":" * @return An object representing the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":233,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-13"},{"lineNumber":234,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":235,"author":{"gitId":"AlWo223"},"content":" public static Activity parseActivity(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-12"},{"lineNumber":236,"author":{"gitId":"AlWo223"},"content":" final int durationIndex \u003d arguments.indexOf(Parameter.DURATION_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":237,"author":{"gitId":"AlWo223"},"content":" final int distanceIndex \u003d arguments.indexOf(Parameter.DISTANCE_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":238,"author":{"gitId":"AlWo223"},"content":" final int datetimeIndex \u003d arguments.indexOf(Parameter.DATETIME_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":239,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":240,"author":{"gitId":"AlWo223"},"content":" checkMissingActivityArguments(durationIndex, distanceIndex, datetimeIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":241,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":242,"author":{"gitId":"AlWo223"},"content":" final String caption \u003d arguments.substring(0, durationIndex).trim();","lastModifiedDate":"2023-10-13"},{"lineNumber":243,"author":{"gitId":"AlWo223"},"content":" final String duration \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":244,"author":{"gitId":"AlWo223"},"content":" arguments.substring(durationIndex + Parameter.DURATION_SEPARATOR.length(), distanceIndex).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":245,"author":{"gitId":"AlWo223"},"content":" final String distance \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":246,"author":{"gitId":"AlWo223"},"content":" arguments.substring(distanceIndex + Parameter.DISTANCE_SEPARATOR.length(), datetimeIndex).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":247,"author":{"gitId":"AlWo223"},"content":" final String datetime \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":248,"author":{"gitId":"AlWo223"},"content":" arguments.substring(datetimeIndex + Parameter.DATETIME_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":249,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":250,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":251,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":252,"author":{"gitId":"AlWo223"},"content":" final int durationParsed \u003d parseDuration(duration);","lastModifiedDate":"2023-10-13"},{"lineNumber":253,"author":{"gitId":"AlWo223"},"content":" final int distanceParsed \u003d parseDistance(distance);","lastModifiedDate":"2023-10-13"},{"lineNumber":254,"author":{"gitId":"AlWo223"},"content":" final LocalDateTime datetimeParsed \u003d parseDateTime(datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":255,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":256,"author":{"gitId":"AlWo223"},"content":" return new Activity(caption, durationParsed, distanceParsed, datetimeParsed);","lastModifiedDate":"2023-10-13"},{"lineNumber":257,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":258,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":259,"author":{"gitId":"AlWo223"},"content":" public static int parseDuration(String duration) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":260,"author":{"gitId":"AlWo223"},"content":" int durationParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":261,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-13"},{"lineNumber":262,"author":{"gitId":"AlWo223"},"content":" durationParsed \u003d Integer.parseInt(duration);","lastModifiedDate":"2023-10-13"},{"lineNumber":263,"author":{"gitId":"AlWo223"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-13"},{"lineNumber":264,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DURATION_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":265,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":266,"author":{"gitId":"AlWo223"},"content":" return durationParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":267,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":268,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":269,"author":{"gitId":"AlWo223"},"content":" public static LocalDateTime parseDateTime(String datetime) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":270,"author":{"gitId":"AlWo223"},"content":" LocalDateTime datetimeParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":271,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-13"},{"lineNumber":272,"author":{"gitId":"AlWo223"},"content":" datetimeParsed \u003d LocalDateTime.parse(datetime.replace(\" \", \"T\"));","lastModifiedDate":"2023-10-13"},{"lineNumber":273,"author":{"gitId":"AlWo223"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-13"},{"lineNumber":274,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DATETIME_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":275,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":276,"author":{"gitId":"AlWo223"},"content":" return datetimeParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":277,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":278,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":279,"author":{"gitId":"AlWo223"},"content":" public static int parseDistance(String distance) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":280,"author":{"gitId":"AlWo223"},"content":" int distanceParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":281,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-13"},{"lineNumber":282,"author":{"gitId":"AlWo223"},"content":" distanceParsed \u003d Integer.parseInt(distance);","lastModifiedDate":"2023-10-13"},{"lineNumber":283,"author":{"gitId":"AlWo223"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-13"},{"lineNumber":284,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DISTANCE_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":285,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":286,"author":{"gitId":"AlWo223"},"content":" return distanceParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":287,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":288,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":289,"author":{"gitId":"nihalzp"},"content":" public static void checkMissingActivityArguments(int durationIndex, int distanceIndex,","lastModifiedDate":"2023-10-15"},{"lineNumber":290,"author":{"gitId":"nihalzp"},"content":" int datetimeIndex) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":291,"author":{"gitId":"AlWo223"},"content":" if (durationIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-12"},{"lineNumber":292,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DURATION_MISSING);","lastModifiedDate":"2023-10-12"},{"lineNumber":293,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":294,"author":{"gitId":"AlWo223"},"content":" if (distanceIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-12"},{"lineNumber":295,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DISTANCE_MISSING);","lastModifiedDate":"2023-10-12"},{"lineNumber":296,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":297,"author":{"gitId":"AlWo223"},"content":" if (datetimeIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-12"},{"lineNumber":298,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DATETIME_MISSING);","lastModifiedDate":"2023-10-12"},{"lineNumber":299,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":300,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":301,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":302,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":303,"author":{"gitId":"AlWo223"},"content":" * Parses the raw user input for a run or cycle and returns the corresponding activity object.","lastModifiedDate":"2023-10-13"},{"lineNumber":304,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":305,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the arguments.","lastModifiedDate":"2023-10-13"},{"lineNumber":306,"author":{"gitId":"AlWo223"},"content":" * @return An object representing the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":307,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException If the input format is invalid.","lastModifiedDate":"2023-10-18"},{"lineNumber":308,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":309,"author":{"gitId":"AlWo223"},"content":" public static Activity parseRunCycle(String arguments, boolean isRun) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":310,"author":{"gitId":"AlWo223"},"content":" final int durationIndex \u003d arguments.indexOf(Parameter.DURATION_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":311,"author":{"gitId":"AlWo223"},"content":" final int distanceIndex \u003d arguments.indexOf(Parameter.DISTANCE_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":312,"author":{"gitId":"AlWo223"},"content":" final int datetimeIndex \u003d arguments.indexOf(Parameter.DATETIME_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":313,"author":{"gitId":"AlWo223"},"content":" final int elevationIndex \u003d arguments.indexOf(Parameter.ELEVATION_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":314,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":315,"author":{"gitId":"AlWo223"},"content":" checkMissingRunCycleArguments(durationIndex, distanceIndex, datetimeIndex, elevationIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":316,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":317,"author":{"gitId":"AlWo223"},"content":" final String caption \u003d arguments.substring(0, durationIndex).trim();","lastModifiedDate":"2023-10-13"},{"lineNumber":318,"author":{"gitId":"AlWo223"},"content":" final String duration \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":319,"author":{"gitId":"AlWo223"},"content":" arguments.substring(durationIndex + Parameter.DURATION_SEPARATOR.length(), distanceIndex).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":320,"author":{"gitId":"AlWo223"},"content":" final String distance \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":321,"author":{"gitId":"AlWo223"},"content":" arguments.substring(distanceIndex + Parameter.DISTANCE_SEPARATOR.length(), datetimeIndex).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":322,"author":{"gitId":"AlWo223"},"content":" final String datetime \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":323,"author":{"gitId":"AlWo223"},"content":" arguments.substring(datetimeIndex + Parameter.DATETIME_SEPARATOR.length(), elevationIndex).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":324,"author":{"gitId":"AlWo223"},"content":" final String elevation \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":325,"author":{"gitId":"AlWo223"},"content":" arguments.substring(elevationIndex + Parameter.ELEVATION_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":326,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":327,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime, elevation);","lastModifiedDate":"2023-10-13"},{"lineNumber":328,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":329,"author":{"gitId":"AlWo223"},"content":" final int durationParsed \u003d parseDuration(duration);","lastModifiedDate":"2023-10-13"},{"lineNumber":330,"author":{"gitId":"AlWo223"},"content":" final int distanceParsed \u003d parseDistance(distance);","lastModifiedDate":"2023-10-13"},{"lineNumber":331,"author":{"gitId":"AlWo223"},"content":" final LocalDateTime datetimeParsed \u003d parseDateTime(datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":332,"author":{"gitId":"AlWo223"},"content":" final int elevationParsed \u003d parseElevation(elevation);","lastModifiedDate":"2023-10-13"},{"lineNumber":333,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":334,"author":{"gitId":"AlWo223"},"content":" if (isRun) {","lastModifiedDate":"2023-10-17"},{"lineNumber":335,"author":{"gitId":"AlWo223"},"content":" return new Run(caption, durationParsed, distanceParsed, datetimeParsed, elevationParsed);","lastModifiedDate":"2023-10-13"},{"lineNumber":336,"author":{"gitId":"AlWo223"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":337,"author":{"gitId":"AlWo223"},"content":" return new Cycle(caption, durationParsed, distanceParsed, datetimeParsed, elevationParsed);","lastModifiedDate":"2023-10-17"},{"lineNumber":338,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":339,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":340,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":341,"author":{"gitId":"AlWo223"},"content":" public static int parseElevation(String elevation) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":342,"author":{"gitId":"AlWo223"},"content":" int elevationParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":343,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":344,"author":{"gitId":"AlWo223"},"content":" elevationParsed \u003d Integer.parseInt(elevation);","lastModifiedDate":"2023-10-13"},{"lineNumber":345,"author":{"gitId":"AlWo223"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":346,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ELEVATION_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":347,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":348,"author":{"gitId":"AlWo223"},"content":" return elevationParsed;","lastModifiedDate":"2023-10-13"},{"lineNumber":349,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":350,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":351,"author":{"gitId":"AlWo223"},"content":" public static void checkMissingRunCycleArguments(int durationIndex, int distanceIndex, int datetimeIndex,","lastModifiedDate":"2023-10-13"},{"lineNumber":352,"author":{"gitId":"AlWo223"},"content":" int elevationIndex) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":353,"author":{"gitId":"AlWo223"},"content":" checkMissingActivityArguments(durationIndex, distanceIndex, datetimeIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":354,"author":{"gitId":"AlWo223"},"content":" if (elevationIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-13"},{"lineNumber":355,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ELEVATION_MISSING);","lastModifiedDate":"2023-10-13"},{"lineNumber":356,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":357,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":358,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":359,"author":{"gitId":"AlWo223"},"content":" public static void checkMissingSwimArguments(int durationIndex, int distanceIndex, int datetimeIndex,","lastModifiedDate":"2023-10-13"},{"lineNumber":360,"author":{"gitId":"AlWo223"},"content":" int swimmingStyleIndex) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":361,"author":{"gitId":"AlWo223"},"content":" checkMissingActivityArguments(durationIndex, distanceIndex, datetimeIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":362,"author":{"gitId":"AlWo223"},"content":" if (swimmingStyleIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-13"},{"lineNumber":363,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_SWIMMINGSTYLE_MISSING);","lastModifiedDate":"2023-10-13"},{"lineNumber":364,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":365,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":366,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":367,"author":{"gitId":"nihalzp"},"content":" public static void checkEmptyActivityArguments(String caption, String duration, String distance,","lastModifiedDate":"2023-10-15"},{"lineNumber":368,"author":{"gitId":"nihalzp"},"content":" String datetime) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":369,"author":{"gitId":"AlWo223"},"content":" if (caption.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":370,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_CAPTION_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":371,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":372,"author":{"gitId":"AlWo223"},"content":" if (duration.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":373,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DURATION_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":374,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":375,"author":{"gitId":"AlWo223"},"content":" if (distance.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":376,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DISTANCE_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":377,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":378,"author":{"gitId":"AlWo223"},"content":" if (datetime.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":379,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_DATETIME_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":380,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":381,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":382,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":383,"author":{"gitId":"nihalzp"},"content":" public static void checkEmptyActivityArguments(String caption, String duration, String distance,","lastModifiedDate":"2023-10-15"},{"lineNumber":384,"author":{"gitId":"nihalzp"},"content":" String datetime,","lastModifiedDate":"2023-10-15"},{"lineNumber":385,"author":{"gitId":"AlWo223"},"content":" String elevation) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":386,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":387,"author":{"gitId":"AlWo223"},"content":" if (elevation.isEmpty()) {","lastModifiedDate":"2023-10-13"},{"lineNumber":388,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_ELEVATION_EMPTY);","lastModifiedDate":"2023-10-13"},{"lineNumber":389,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":390,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":391,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":392,"author":{"gitId":"nihalzp"},"content":" public static void checkEmptyActivityArguments(String caption, String duration, String distance,","lastModifiedDate":"2023-10-15"},{"lineNumber":393,"author":{"gitId":"nihalzp"},"content":" String datetime,","lastModifiedDate":"2023-10-15"},{"lineNumber":394,"author":{"gitId":"AlWo223"},"content":" int swimmingStyleIndex) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":395,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":396,"author":{"gitId":"AlWo223"},"content":" if (swimmingStyleIndex \u003d\u003d -1) {","lastModifiedDate":"2023-10-13"},{"lineNumber":397,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_SWIMMINGSTYLE_MISSING);","lastModifiedDate":"2023-10-13"},{"lineNumber":398,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":399,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":400,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":401,"author":{"gitId":"AlWo223"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":402,"author":{"gitId":"AlWo223"},"content":" * Parses the raw user input for a swim and returns the corresponding activity object.","lastModifiedDate":"2023-10-13"},{"lineNumber":403,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":404,"author":{"gitId":"AlWo223"},"content":" * @param arguments The raw user input containing the arguments.","lastModifiedDate":"2023-10-13"},{"lineNumber":405,"author":{"gitId":"AlWo223"},"content":" * @return activity An object representing the activity.","lastModifiedDate":"2023-10-13"},{"lineNumber":406,"author":{"gitId":"AlWo223"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-13"},{"lineNumber":407,"author":{"gitId":"AlWo223"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":408,"author":{"gitId":"AlWo223"},"content":" public static Activity parseSwim(String arguments) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":409,"author":{"gitId":"AlWo223"},"content":" final int durationIndex \u003d arguments.indexOf(Parameter.DURATION_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":410,"author":{"gitId":"AlWo223"},"content":" final int distanceIndex \u003d arguments.indexOf(Parameter.DISTANCE_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":411,"author":{"gitId":"AlWo223"},"content":" final int datetimeIndex \u003d arguments.indexOf(Parameter.DISTANCE_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":412,"author":{"gitId":"AlWo223"},"content":" final int swimmingStyleIndex \u003d arguments.indexOf(Parameter.SWIMMING_STYLE_SEPARATOR);","lastModifiedDate":"2023-10-18"},{"lineNumber":413,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":414,"author":{"gitId":"AlWo223"},"content":" checkMissingSwimArguments(durationIndex, distanceIndex, datetimeIndex, swimmingStyleIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":415,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":416,"author":{"gitId":"AlWo223"},"content":" final String caption \u003d arguments.substring(0, durationIndex).trim();","lastModifiedDate":"2023-10-13"},{"lineNumber":417,"author":{"gitId":"AlWo223"},"content":" final String duration \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":418,"author":{"gitId":"AlWo223"},"content":" arguments.substring(durationIndex + Parameter.DURATION_SEPARATOR.length(), distanceIndex).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":419,"author":{"gitId":"AlWo223"},"content":" final String distance \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":420,"author":{"gitId":"AlWo223"},"content":" arguments.substring(distanceIndex + Parameter.DISTANCE_SEPARATOR.length(), datetimeIndex).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":421,"author":{"gitId":"AlWo223"},"content":" final String datetime \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":422,"author":{"gitId":"AlWo223"},"content":" arguments.substring(datetimeIndex + Parameter.DATETIME_SEPARATOR.length(), swimmingStyleIndex).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":423,"author":{"gitId":"AlWo223"},"content":" final String swimmingStyle \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":424,"author":{"gitId":"AlWo223"},"content":" arguments.substring(swimmingStyleIndex + Parameter.SWIMMING_STYLE_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":425,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":426,"author":{"gitId":"AlWo223"},"content":" checkEmptyActivityArguments(caption, duration, distance, datetime, swimmingStyleIndex);","lastModifiedDate":"2023-10-13"},{"lineNumber":427,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":428,"author":{"gitId":"AlWo223"},"content":" final int durationParsed \u003d parseDuration(duration);","lastModifiedDate":"2023-10-13"},{"lineNumber":429,"author":{"gitId":"AlWo223"},"content":" final int distanceParsed \u003d parseDistance(distance);","lastModifiedDate":"2023-10-13"},{"lineNumber":430,"author":{"gitId":"AlWo223"},"content":" final LocalDateTime datetimeParsed \u003d parseDateTime(datetime);","lastModifiedDate":"2023-10-13"},{"lineNumber":431,"author":{"gitId":"AlWo223"},"content":" final Swim.SwimmingStyle swimmingStyleParsed \u003d parseSwimmingStyle(swimmingStyle);","lastModifiedDate":"2023-10-13"},{"lineNumber":432,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":433,"author":{"gitId":"AlWo223"},"content":" return new Swim(caption, durationParsed, distanceParsed, datetimeParsed, swimmingStyleParsed);","lastModifiedDate":"2023-10-18"},{"lineNumber":434,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":435,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":436,"author":{"gitId":"AlWo223"},"content":" public static Swim.SwimmingStyle parseSwimmingStyle(String swimmingStyle) throws AthletiException {","lastModifiedDate":"2023-10-13"},{"lineNumber":437,"author":{"gitId":"AlWo223"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":438,"author":{"gitId":"AlWo223"},"content":" return Swim.SwimmingStyle.valueOf(swimmingStyle);","lastModifiedDate":"2023-10-13"},{"lineNumber":439,"author":{"gitId":"AlWo223"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-13"},{"lineNumber":440,"author":{"gitId":"AlWo223"},"content":" throw new AthletiException(Message.MESSAGE_SWIMMINGSTYLE_INVALID);","lastModifiedDate":"2023-10-13"},{"lineNumber":441,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":442,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":443,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":444,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":445,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":446,"author":{"gitId":"DaDevChia"},"content":" * Parses the raw user input for an add sleep command and returns the corresponding command object.","lastModifiedDate":"2023-10-16"},{"lineNumber":447,"author":{"gitId":"DaDevChia"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-16"},{"lineNumber":448,"author":{"gitId":"DaDevChia"},"content":" * @return An object representing the slee0 add command.","lastModifiedDate":"2023-10-16"},{"lineNumber":449,"author":{"gitId":"DaDevChia"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-16"},{"lineNumber":450,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":451,"author":{"gitId":"DaDevChia"},"content":" public static AddSleepCommand parseSleepAdd(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-12"},{"lineNumber":452,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":453,"author":{"gitId":"DaDevChia"},"content":" int startMarkerPos \u003d commandArgs.indexOf(Parameter.START_TIME_SEPARATOR);","lastModifiedDate":"2023-10-20"},{"lineNumber":454,"author":{"gitId":"DaDevChia"},"content":" int endMarkerPos \u003d commandArgs.indexOf(Parameter.END_TIME_SEPARATOR);","lastModifiedDate":"2023-10-20"},{"lineNumber":455,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":456,"author":{"gitId":"DaDevChia"},"content":" if (startMarkerPos \u003d\u003d -1 || endMarkerPos \u003d\u003d -1 || startMarkerPos \u003e endMarkerPos) {","lastModifiedDate":"2023-10-17"},{"lineNumber":457,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME);","lastModifiedDate":"2023-10-17"},{"lineNumber":458,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":459,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":460,"author":{"gitId":"DaDevChia"},"content":" String startTimeStr \u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":461,"author":{"gitId":"DaDevChia"},"content":" commandArgs.substring(startMarkerPos + Parameter.START_TIME_SEPARATOR.length(), endMarkerPos).trim();","lastModifiedDate":"2023-10-20"},{"lineNumber":462,"author":{"gitId":"DaDevChia"},"content":" String endTimeStr \u003d commandArgs.substring(endMarkerPos + Parameter.END_TIME_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-20"},{"lineNumber":463,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":464,"author":{"gitId":"DaDevChia"},"content":" if (startTimeStr.isEmpty() || endTimeStr.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":465,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME);","lastModifiedDate":"2023-10-17"},{"lineNumber":466,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":467,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":468,"author":{"gitId":"DaDevChia"},"content":" // Convert the strings to LocalDateTime","lastModifiedDate":"2023-10-17"},{"lineNumber":469,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime startTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":470,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime endTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":471,"author":{"gitId":"DaDevChia"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":472,"author":{"gitId":"DaDevChia"},"content":" startTime \u003d LocalDateTime.parse(startTimeStr, sleepTimeFormatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":473,"author":{"gitId":"DaDevChia"},"content":" endTime \u003d LocalDateTime.parse(endTimeStr, sleepTimeFormatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":474,"author":{"gitId":"DaDevChia"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":475,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_INVALID_DATE_TIME_FORMAT);","lastModifiedDate":"2023-10-17"},{"lineNumber":476,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":477,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":478,"author":{"gitId":"DaDevChia"},"content":" //Check if the start time is before the end time","lastModifiedDate":"2023-10-17"},{"lineNumber":479,"author":{"gitId":"DaDevChia"},"content":" if (startTime.isAfter(endTime)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":480,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_END_BEFORE_START);","lastModifiedDate":"2023-10-17"},{"lineNumber":481,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":482,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":483,"author":{"gitId":"DaDevChia"},"content":" return new AddSleepCommand(startTime, endTime);","lastModifiedDate":"2023-10-12"},{"lineNumber":484,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":485,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":486,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":487,"author":{"gitId":"DaDevChia"},"content":" * Parses the raw user input for a delete sleep command and returns the corresponding command object.","lastModifiedDate":"2023-10-16"},{"lineNumber":488,"author":{"gitId":"DaDevChia"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-16"},{"lineNumber":489,"author":{"gitId":"DaDevChia"},"content":" * @return An object representing the sleep delete command.","lastModifiedDate":"2023-10-16"},{"lineNumber":490,"author":{"gitId":"DaDevChia"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-16"},{"lineNumber":491,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":492,"author":{"gitId":"DaDevChia"},"content":" public static DeleteSleepCommand parseSleepDelete(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-12"},{"lineNumber":493,"author":{"gitId":"DaDevChia"},"content":" int index;","lastModifiedDate":"2023-10-12"},{"lineNumber":494,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":495,"author":{"gitId":"DaDevChia"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":496,"author":{"gitId":"DaDevChia"},"content":" index \u003d Integer.parseInt(commandArgs.trim());","lastModifiedDate":"2023-10-12"},{"lineNumber":497,"author":{"gitId":"DaDevChia"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":498,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_DELETE_NO_INDEX);","lastModifiedDate":"2023-10-17"},{"lineNumber":499,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":500,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":501,"author":{"gitId":"DaDevChia"},"content":" return new DeleteSleepCommand(index);","lastModifiedDate":"2023-10-12"},{"lineNumber":502,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":503,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":504,"author":{"gitId":"DaDevChia"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":505,"author":{"gitId":"DaDevChia"},"content":" * Parses the raw user input for an edit sleep command and returns the corresponding command object.","lastModifiedDate":"2023-10-16"},{"lineNumber":506,"author":{"gitId":"DaDevChia"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-16"},{"lineNumber":507,"author":{"gitId":"DaDevChia"},"content":" * @return An object representing the sleep edit command.","lastModifiedDate":"2023-10-16"},{"lineNumber":508,"author":{"gitId":"DaDevChia"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-16"},{"lineNumber":509,"author":{"gitId":"DaDevChia"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":510,"author":{"gitId":"DaDevChia"},"content":" public static EditSleepCommand parseSleepEdit(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-12"},{"lineNumber":511,"author":{"gitId":"DaDevChia"},"content":" int startMarkerPos \u003d commandArgs.indexOf(Parameter.START_TIME_SEPARATOR);","lastModifiedDate":"2023-10-20"},{"lineNumber":512,"author":{"gitId":"DaDevChia"},"content":" int endMarkerPos \u003d commandArgs.indexOf(Parameter.END_TIME_SEPARATOR);","lastModifiedDate":"2023-10-20"},{"lineNumber":513,"author":{"gitId":"DaDevChia"},"content":" int index;","lastModifiedDate":"2023-10-12"},{"lineNumber":514,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":515,"author":{"gitId":"DaDevChia"},"content":" if (startMarkerPos \u003d\u003d -1 || endMarkerPos \u003d\u003d -1 || startMarkerPos \u003e endMarkerPos) {","lastModifiedDate":"2023-10-17"},{"lineNumber":516,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME);","lastModifiedDate":"2023-10-17"},{"lineNumber":517,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":518,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":519,"author":{"gitId":"DaDevChia"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":520,"author":{"gitId":"DaDevChia"},"content":" index \u003d Integer.parseInt(commandArgs.substring(0, startMarkerPos).trim());","lastModifiedDate":"2023-10-12"},{"lineNumber":521,"author":{"gitId":"DaDevChia"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":522,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_EDIT_NO_INDEX);","lastModifiedDate":"2023-10-17"},{"lineNumber":523,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":524,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":525,"author":{"gitId":"DaDevChia"},"content":" String startTimeStr \u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":526,"author":{"gitId":"DaDevChia"},"content":" commandArgs.substring(startMarkerPos + Parameter.START_TIME_SEPARATOR.length(), endMarkerPos).trim();","lastModifiedDate":"2023-10-20"},{"lineNumber":527,"author":{"gitId":"DaDevChia"},"content":" String endTimeStr \u003d commandArgs.substring(endMarkerPos + Parameter.END_TIME_SEPARATOR.length()).trim();","lastModifiedDate":"2023-10-20"},{"lineNumber":528,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":529,"author":{"gitId":"DaDevChia"},"content":" if (startTimeStr.isEmpty() || endTimeStr.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":530,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_NO_START_END_DATETIME);","lastModifiedDate":"2023-10-17"},{"lineNumber":531,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":532,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":533,"author":{"gitId":"DaDevChia"},"content":" // Convert the strings to LocalDateTime","lastModifiedDate":"2023-10-17"},{"lineNumber":534,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime startTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":535,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime endTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":536,"author":{"gitId":"DaDevChia"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":537,"author":{"gitId":"DaDevChia"},"content":" startTime \u003d LocalDateTime.parse(startTimeStr, sleepTimeFormatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":538,"author":{"gitId":"DaDevChia"},"content":" endTime \u003d LocalDateTime.parse(endTimeStr, sleepTimeFormatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":539,"author":{"gitId":"DaDevChia"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":540,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_INVALID_DATE_TIME_FORMAT);","lastModifiedDate":"2023-10-17"},{"lineNumber":541,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":542,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":543,"author":{"gitId":"DaDevChia"},"content":" //Check if the start time is before the end time","lastModifiedDate":"2023-10-17"},{"lineNumber":544,"author":{"gitId":"DaDevChia"},"content":" if (startTime.isAfter(endTime)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":545,"author":{"gitId":"DaDevChia"},"content":" throw new AthletiException(Message.ERRORMESSAGE_PARSER_SLEEP_END_BEFORE_START);","lastModifiedDate":"2023-10-17"},{"lineNumber":546,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":547,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":548,"author":{"gitId":"DaDevChia"},"content":" return new EditSleepCommand(index, startTime, endTime);","lastModifiedDate":"2023-10-12"},{"lineNumber":549,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":550,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":551,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":552,"author":{"gitId":"yicheng-toh"},"content":" * @param commandArgs User provided data to create goals for the nutrients defined.","lastModifiedDate":"2023-10-15"},{"lineNumber":553,"author":{"gitId":"yicheng-toh"},"content":" * @return a list of diet goals for further checking in the Set Diet Goal Command.","lastModifiedDate":"2023-10-15"},{"lineNumber":554,"author":{"gitId":"yicheng-toh"},"content":" * @throws AthletiException Invalid input by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":555,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":556,"author":{"gitId":"yicheng-toh"},"content":" public static ArrayList\u003cDietGoal\u003e parseDietGoalSetEdit(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-16"},{"lineNumber":557,"author":{"gitId":"yicheng-toh"},"content":" if (commandArgs.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":558,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_INSUFFICIENT_INPUT);","lastModifiedDate":"2023-10-22"},{"lineNumber":559,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":560,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":561,"author":{"gitId":"yicheng-toh"},"content":" String[] nutrientAndTargetValues;","lastModifiedDate":"2023-10-15"},{"lineNumber":562,"author":{"gitId":"yicheng-toh"},"content":" if (commandArgs.contains(\" \")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":563,"author":{"gitId":"yicheng-toh"},"content":" nutrientAndTargetValues \u003d commandArgs.split(\"\\\\s+\");","lastModifiedDate":"2023-10-15"},{"lineNumber":564,"author":{"gitId":"yicheng-toh"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":565,"author":{"gitId":"yicheng-toh"},"content":" nutrientAndTargetValues \u003d new String[]{commandArgs};","lastModifiedDate":"2023-10-15"},{"lineNumber":566,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":567,"author":{"gitId":"yicheng-toh"},"content":" String[] nutrientAndTargetValue;","lastModifiedDate":"2023-10-15"},{"lineNumber":568,"author":{"gitId":"yicheng-toh"},"content":" String nutrient;","lastModifiedDate":"2023-10-15"},{"lineNumber":569,"author":{"gitId":"yicheng-toh"},"content":" int targetValue;","lastModifiedDate":"2023-10-15"},{"lineNumber":570,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":571,"author":{"gitId":"yicheng-toh"},"content":" ArrayList\u003cDietGoal\u003e dietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":572,"author":{"gitId":"yicheng-toh"},"content":" Set\u003cString\u003e recordedNutrients \u003d new HashSet\u003c\u003e();","lastModifiedDate":"2023-10-22"},{"lineNumber":573,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":574,"author":{"gitId":"yicheng-toh"},"content":" for (int i \u003d 0; i \u003c nutrientAndTargetValues.length; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":575,"author":{"gitId":"yicheng-toh"},"content":" nutrientAndTargetValue \u003d nutrientAndTargetValues[i].split(\"/\");","lastModifiedDate":"2023-10-15"},{"lineNumber":576,"author":{"gitId":"yicheng-toh"},"content":" nutrient \u003d nutrientAndTargetValue[0];","lastModifiedDate":"2023-10-15"},{"lineNumber":577,"author":{"gitId":"yicheng-toh"},"content":" targetValue \u003d Integer.parseInt(nutrientAndTargetValue[1]);","lastModifiedDate":"2023-10-15"},{"lineNumber":578,"author":{"gitId":"yicheng-toh"},"content":" if (targetValue \u003d\u003d 0) {","lastModifiedDate":"2023-10-15"},{"lineNumber":579,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_TARGET_VALUE_NOT_POSITIVE_INT);","lastModifiedDate":"2023-10-15"},{"lineNumber":580,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":581,"author":{"gitId":"yicheng-toh"},"content":" if (!NutrientVerifier.verify(nutrient)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":582,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_INVALID_NUTRIENT);","lastModifiedDate":"2023-10-15"},{"lineNumber":583,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":584,"author":{"gitId":"yicheng-toh"},"content":" if (recordedNutrients.contains(nutrient)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":585,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSSAGE_DIETGOAL_REPEATED_NUTRIENT);","lastModifiedDate":"2023-10-22"},{"lineNumber":586,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":587,"author":{"gitId":"yicheng-toh"},"content":" DietGoal dietGoal \u003d new DietGoal(nutrient, targetValue);","lastModifiedDate":"2023-10-15"},{"lineNumber":588,"author":{"gitId":"yicheng-toh"},"content":" dietGoals.add(dietGoal);","lastModifiedDate":"2023-10-15"},{"lineNumber":589,"author":{"gitId":"yicheng-toh"},"content":" recordedNutrients.add(nutrient);","lastModifiedDate":"2023-10-22"},{"lineNumber":590,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":591,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":592,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":593,"author":{"gitId":"yicheng-toh"},"content":" return dietGoals;","lastModifiedDate":"2023-10-15"},{"lineNumber":594,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":595,"author":{"gitId":"yicheng-toh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":596,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_TARGET_VALUE_NOT_POSITIVE_INT);","lastModifiedDate":"2023-10-15"},{"lineNumber":597,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":598,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":599,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":600,"author":{"gitId":"yicheng-toh"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":601,"author":{"gitId":"yicheng-toh"},"content":" * @param deleteIndexString Index of the goal to be deleted in String format","lastModifiedDate":"2023-10-17"},{"lineNumber":602,"author":{"gitId":"yicheng-toh"},"content":" * @return Index of the goal in integer format in users\u0027 perspective.","lastModifiedDate":"2023-10-17"},{"lineNumber":603,"author":{"gitId":"yicheng-toh"},"content":" * @throws AthletiException Catch invalid characters and numbers.","lastModifiedDate":"2023-10-17"},{"lineNumber":604,"author":{"gitId":"yicheng-toh"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":605,"author":{"gitId":"yicheng-toh"},"content":" public static int parseDietGoalDelete(String deleteIndexString) throws AthletiException {","lastModifiedDate":"2023-10-17"},{"lineNumber":606,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":607,"author":{"gitId":"yicheng-toh"},"content":" int deleteIndex \u003d Integer.parseInt(deleteIndexString.trim());","lastModifiedDate":"2023-10-17"},{"lineNumber":608,"author":{"gitId":"yicheng-toh"},"content":" if (deleteIndex \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":609,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_INCORRECT_INTEGER_FORMAT);","lastModifiedDate":"2023-10-17"},{"lineNumber":610,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":611,"author":{"gitId":"yicheng-toh"},"content":" return deleteIndex;","lastModifiedDate":"2023-10-17"},{"lineNumber":612,"author":{"gitId":"yicheng-toh"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":613,"author":{"gitId":"yicheng-toh"},"content":" throw new AthletiException(Message.MESSAGE_DIETGOAL_INCORRECT_INTEGER_FORMAT);","lastModifiedDate":"2023-10-17"},{"lineNumber":614,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":615,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":616,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":617,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":618,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":619,"author":{"gitId":"nihalzp"},"content":" * Parses the raw user input for a diet and returns the corresponding diet object.","lastModifiedDate":"2023-10-15"},{"lineNumber":620,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":621,"author":{"gitId":"nihalzp"},"content":" * @param commandArgs The raw user input containing the arguments.","lastModifiedDate":"2023-10-15"},{"lineNumber":622,"author":{"gitId":"nihalzp"},"content":" * @return An object representing the diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":623,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":624,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":625,"author":{"gitId":"nihalzp"},"content":" public static Diet parseDiet(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":626,"author":{"gitId":"nihalzp"},"content":" final String caloriesMarkerConstant \u003d \"calories/\";","lastModifiedDate":"2023-10-15"},{"lineNumber":627,"author":{"gitId":"nihalzp"},"content":" final String proteinMarkerConstant \u003d \"protein/\";","lastModifiedDate":"2023-10-15"},{"lineNumber":628,"author":{"gitId":"nihalzp"},"content":" final String carbMarkerConstant \u003d \"carb/\";","lastModifiedDate":"2023-10-15"},{"lineNumber":629,"author":{"gitId":"nihalzp"},"content":" final String fatMarkerConstant \u003d \"fat/\";","lastModifiedDate":"2023-10-15"},{"lineNumber":630,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":631,"author":{"gitId":"nihalzp"},"content":" int caloriesMarkerPos \u003d commandArgs.indexOf(caloriesMarkerConstant);","lastModifiedDate":"2023-10-15"},{"lineNumber":632,"author":{"gitId":"nihalzp"},"content":" int proteinMarkerPos \u003d commandArgs.indexOf(proteinMarkerConstant);","lastModifiedDate":"2023-10-15"},{"lineNumber":633,"author":{"gitId":"nihalzp"},"content":" int carbMarkerPos \u003d commandArgs.indexOf(carbMarkerConstant);","lastModifiedDate":"2023-10-15"},{"lineNumber":634,"author":{"gitId":"nihalzp"},"content":" int fatMarkerPos \u003d commandArgs.indexOf(fatMarkerConstant);","lastModifiedDate":"2023-10-15"},{"lineNumber":635,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":636,"author":{"gitId":"nihalzp"},"content":" checkMissingDietArguments(caloriesMarkerPos, proteinMarkerPos, carbMarkerPos, fatMarkerPos);","lastModifiedDate":"2023-10-15"},{"lineNumber":637,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":638,"author":{"gitId":"nihalzp"},"content":" String calories \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":639,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(caloriesMarkerPos + caloriesMarkerConstant.length(), proteinMarkerPos)","lastModifiedDate":"2023-10-15"},{"lineNumber":640,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":641,"author":{"gitId":"nihalzp"},"content":" String protein \u003d","lastModifiedDate":"2023-10-15"},{"lineNumber":642,"author":{"gitId":"nihalzp"},"content":" commandArgs.substring(proteinMarkerPos + proteinMarkerConstant.length(), carbMarkerPos)","lastModifiedDate":"2023-10-15"},{"lineNumber":643,"author":{"gitId":"nihalzp"},"content":" .trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":644,"author":{"gitId":"nihalzp"},"content":" String carb \u003d commandArgs.substring(carbMarkerPos + carbMarkerConstant.length(), fatMarkerPos).trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":645,"author":{"gitId":"nihalzp"},"content":" String fat \u003d commandArgs.substring(fatMarkerPos + fatMarkerConstant.length()).trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":646,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":647,"author":{"gitId":"nihalzp"},"content":" checkEmptyDietArguments(calories, protein, carb, fat);","lastModifiedDate":"2023-10-15"},{"lineNumber":648,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":649,"author":{"gitId":"nihalzp"},"content":" int caloriesParsed \u003d parseCalories(calories);","lastModifiedDate":"2023-10-15"},{"lineNumber":650,"author":{"gitId":"nihalzp"},"content":" int proteinParsed \u003d parseProtein(protein);","lastModifiedDate":"2023-10-15"},{"lineNumber":651,"author":{"gitId":"nihalzp"},"content":" int carbParsed \u003d parseCarb(carb);","lastModifiedDate":"2023-10-15"},{"lineNumber":652,"author":{"gitId":"nihalzp"},"content":" int fatParsed \u003d parseFat(fat);","lastModifiedDate":"2023-10-15"},{"lineNumber":653,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":654,"author":{"gitId":"nihalzp"},"content":" return new Diet(caloriesParsed, proteinParsed, carbParsed, fatParsed);","lastModifiedDate":"2023-10-15"},{"lineNumber":655,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":656,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":657,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":658,"author":{"gitId":"nihalzp"},"content":" * Checks if the user input for a diet contains all the required arguments.","lastModifiedDate":"2023-10-15"},{"lineNumber":659,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":660,"author":{"gitId":"nihalzp"},"content":" * @param caloriesMarkerPos The position of the calories marker.","lastModifiedDate":"2023-10-15"},{"lineNumber":661,"author":{"gitId":"nihalzp"},"content":" * @param proteinMarkerPos The position of the protein marker.","lastModifiedDate":"2023-10-15"},{"lineNumber":662,"author":{"gitId":"nihalzp"},"content":" * @param carbMarkerPos The position of the carb marker.","lastModifiedDate":"2023-10-15"},{"lineNumber":663,"author":{"gitId":"nihalzp"},"content":" * @param fatMarkerPos The position of the fat marker.","lastModifiedDate":"2023-10-15"},{"lineNumber":664,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":665,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":666,"author":{"gitId":"nihalzp"},"content":" private static void checkMissingDietArguments(int caloriesMarkerPos, int proteinMarkerPos,","lastModifiedDate":"2023-10-15"},{"lineNumber":667,"author":{"gitId":"nihalzp"},"content":" int carbMarkerPos,","lastModifiedDate":"2023-10-15"},{"lineNumber":668,"author":{"gitId":"nihalzp"},"content":" int fatMarkerPos) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":669,"author":{"gitId":"nihalzp"},"content":" if (caloriesMarkerPos \u003d\u003d -1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":670,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CALORIES_MISSING);","lastModifiedDate":"2023-10-15"},{"lineNumber":671,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":672,"author":{"gitId":"nihalzp"},"content":" if (proteinMarkerPos \u003d\u003d -1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":673,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_PROTEIN_MISSING);","lastModifiedDate":"2023-10-15"},{"lineNumber":674,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":675,"author":{"gitId":"nihalzp"},"content":" if (carbMarkerPos \u003d\u003d -1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":676,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CARB_MISSING);","lastModifiedDate":"2023-10-15"},{"lineNumber":677,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":678,"author":{"gitId":"nihalzp"},"content":" if (fatMarkerPos \u003d\u003d -1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":679,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_FAT_MISSING);","lastModifiedDate":"2023-10-15"},{"lineNumber":680,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":681,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":682,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":683,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":684,"author":{"gitId":"nihalzp"},"content":" * Checks if the user input for a diet is empty.","lastModifiedDate":"2023-10-15"},{"lineNumber":685,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":686,"author":{"gitId":"nihalzp"},"content":" * @param calories The calories input.","lastModifiedDate":"2023-10-15"},{"lineNumber":687,"author":{"gitId":"nihalzp"},"content":" * @param protein The protein input.","lastModifiedDate":"2023-10-15"},{"lineNumber":688,"author":{"gitId":"nihalzp"},"content":" * @param carb The carb input.","lastModifiedDate":"2023-10-15"},{"lineNumber":689,"author":{"gitId":"nihalzp"},"content":" * @param fat The fat input.","lastModifiedDate":"2023-10-15"},{"lineNumber":690,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":691,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":692,"author":{"gitId":"nihalzp"},"content":" private static void checkEmptyDietArguments(String calories, String protein, String carb,","lastModifiedDate":"2023-10-15"},{"lineNumber":693,"author":{"gitId":"nihalzp"},"content":" String fat) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":694,"author":{"gitId":"nihalzp"},"content":" if (calories.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":695,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CALORIES_EMPTY);","lastModifiedDate":"2023-10-15"},{"lineNumber":696,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":697,"author":{"gitId":"nihalzp"},"content":" if (protein.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":698,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_PROTEIN_EMPTY);","lastModifiedDate":"2023-10-15"},{"lineNumber":699,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":700,"author":{"gitId":"nihalzp"},"content":" if (carb.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":701,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CARB_EMPTY);","lastModifiedDate":"2023-10-15"},{"lineNumber":702,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":703,"author":{"gitId":"nihalzp"},"content":" if (fat.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":704,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_FAT_EMPTY);","lastModifiedDate":"2023-10-15"},{"lineNumber":705,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":706,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":707,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":708,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":709,"author":{"gitId":"nihalzp"},"content":" * Parses the calories input for a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":710,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":711,"author":{"gitId":"nihalzp"},"content":" * @param calories The calories input.","lastModifiedDate":"2023-10-15"},{"lineNumber":712,"author":{"gitId":"nihalzp"},"content":" * @return The parsed calories.","lastModifiedDate":"2023-10-15"},{"lineNumber":713,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":714,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":715,"author":{"gitId":"nihalzp"},"content":" private static int parseCalories(String calories) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":716,"author":{"gitId":"nihalzp"},"content":" int caloriesParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":717,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":718,"author":{"gitId":"nihalzp"},"content":" caloriesParsed \u003d Integer.parseInt(calories);","lastModifiedDate":"2023-10-15"},{"lineNumber":719,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":720,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CALORIES_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":721,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":722,"author":{"gitId":"nihalzp"},"content":" return caloriesParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":723,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":724,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":725,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":726,"author":{"gitId":"nihalzp"},"content":" * Parses the protein input for a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":727,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":728,"author":{"gitId":"nihalzp"},"content":" * @param protein The protein input.","lastModifiedDate":"2023-10-15"},{"lineNumber":729,"author":{"gitId":"nihalzp"},"content":" * @return The parsed protein.","lastModifiedDate":"2023-10-15"},{"lineNumber":730,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":731,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":732,"author":{"gitId":"nihalzp"},"content":" public static int parseProtein(String protein) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":733,"author":{"gitId":"nihalzp"},"content":" int proteinParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":734,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":735,"author":{"gitId":"nihalzp"},"content":" proteinParsed \u003d Integer.parseInt(protein);","lastModifiedDate":"2023-10-15"},{"lineNumber":736,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":737,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_PROTEIN_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":738,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":739,"author":{"gitId":"nihalzp"},"content":" return proteinParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":740,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":741,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":742,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":743,"author":{"gitId":"nihalzp"},"content":" * Parses the carb input for a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":744,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":745,"author":{"gitId":"nihalzp"},"content":" * @param carb The carb input.","lastModifiedDate":"2023-10-15"},{"lineNumber":746,"author":{"gitId":"nihalzp"},"content":" * @return The parsed carb.","lastModifiedDate":"2023-10-15"},{"lineNumber":747,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":748,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":749,"author":{"gitId":"nihalzp"},"content":" public static int parseCarb(String carb) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":750,"author":{"gitId":"nihalzp"},"content":" int carbParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":751,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":752,"author":{"gitId":"nihalzp"},"content":" carbParsed \u003d Integer.parseInt(carb);","lastModifiedDate":"2023-10-15"},{"lineNumber":753,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":754,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_CARB_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":755,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":756,"author":{"gitId":"nihalzp"},"content":" return carbParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":757,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":758,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":759,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":760,"author":{"gitId":"nihalzp"},"content":" * Parses the fat input for a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":761,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":762,"author":{"gitId":"nihalzp"},"content":" * @param fat The fat input.","lastModifiedDate":"2023-10-15"},{"lineNumber":763,"author":{"gitId":"nihalzp"},"content":" * @return The parsed fat.","lastModifiedDate":"2023-10-15"},{"lineNumber":764,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":765,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":766,"author":{"gitId":"nihalzp"},"content":" public static int parseFat(String fat) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":767,"author":{"gitId":"nihalzp"},"content":" int fatParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":768,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":769,"author":{"gitId":"nihalzp"},"content":" fatParsed \u003d Integer.parseInt(fat);","lastModifiedDate":"2023-10-15"},{"lineNumber":770,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":771,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_FAT_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":772,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":773,"author":{"gitId":"nihalzp"},"content":" return fatParsed;","lastModifiedDate":"2023-10-15"},{"lineNumber":774,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":775,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":776,"author":{"gitId":"nihalzp"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":777,"author":{"gitId":"nihalzp"},"content":" * Parses the index of a diet.","lastModifiedDate":"2023-10-15"},{"lineNumber":778,"author":{"gitId":"nihalzp"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":779,"author":{"gitId":"nihalzp"},"content":" * @param commandArgs The raw user input containing the index.","lastModifiedDate":"2023-10-15"},{"lineNumber":780,"author":{"gitId":"nihalzp"},"content":" * @return The parsed index.","lastModifiedDate":"2023-10-15"},{"lineNumber":781,"author":{"gitId":"nihalzp"},"content":" * @throws AthletiException","lastModifiedDate":"2023-10-15"},{"lineNumber":782,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":783,"author":{"gitId":"nihalzp"},"content":" public static int parseDietIndex(String commandArgs) throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":784,"author":{"gitId":"nihalzp"},"content":" int index;","lastModifiedDate":"2023-10-15"},{"lineNumber":785,"author":{"gitId":"nihalzp"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":786,"author":{"gitId":"nihalzp"},"content":" index \u003d Integer.parseInt(commandArgs.trim());","lastModifiedDate":"2023-10-15"},{"lineNumber":787,"author":{"gitId":"nihalzp"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":788,"author":{"gitId":"nihalzp"},"content":" throw new AthletiException(Message.MESSAGE_DIET_INDEX_TYPE_INVALID);","lastModifiedDate":"2023-10-15"},{"lineNumber":789,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":790,"author":{"gitId":"nihalzp"},"content":" return index;","lastModifiedDate":"2023-10-15"},{"lineNumber":791,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":792,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":49,"DaDevChia":118,"AlWo223":331,"yicheng-toh":93,"nihalzp":201}},{"path":"src/main/java/athleticli/ui/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.ui;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import java.io.InputStream;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"skylee03"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"skylee03"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"skylee03"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"skylee03"},"content":" * Defines the behavior of the CLI.","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"skylee03"},"content":"public class Ui {","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":" private final Scanner in;","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":" private final PrintStream out;","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":" * Constructs a \u003ccode\u003eUi\u003c/code\u003e object, whose input \u003ccode\u003ein\u003c/code\u003e","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"skylee03"},"content":" * and output \u003ccode\u003eout\u003c/code\u003e is the standard input and the standard","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"skylee03"},"content":" * output, respectively.","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":" public Ui() {","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"skylee03"},"content":" this(System.in, System.out);","lastModifiedDate":"2023-10-08"},{"lineNumber":21,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":22,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":23,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":" * Constructs a \u003ccode\u003eUi\u003c/code\u003e object, whose input is an \u003ccode\u003eInputStream\u003c/code\u003e","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":" * object \u003ccode\u003ein\u003c/code\u003e and output is an \u003ccode\u003ePrintStream\u003c/code\u003e object \u003ccode\u003eout\u003c/code\u003e.","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" * @param in The \u003ccode\u003eInputStream\u003c/code\u003e accepting the user\u0027s input.","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" * @param out The \u003ccode\u003ePrintStream\u003c/code\u003e displaying the program\u0027s output.","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" public Ui(InputStream in, PrintStream out) {","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":" assert in !\u003d null : \"Input stream `in` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" assert out !\u003d null : \"Print stream `out` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" this.in \u003d new Scanner(in);","lastModifiedDate":"2023-10-08"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" this.out \u003d out;","lastModifiedDate":"2023-10-08"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" * Returns the user\u0027s input.","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" * @return The user\u0027s input.","lastModifiedDate":"2023-10-08"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" public String getUserCommand() {","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":" out.print(Message.PROMPT);","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" return in.nextLine();","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":" * Shows the \u003ccode\u003emessages\u003c/code\u003e in a beautiful format.","lastModifiedDate":"2023-10-08"},{"lineNumber":49,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":50,"author":{"gitId":"skylee03"},"content":" * @param messages The messages to be shown.","lastModifiedDate":"2023-10-08"},{"lineNumber":51,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":52,"author":{"gitId":"skylee03"},"content":" public void showMessages(String... messages) {","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"skylee03"},"content":" assert messages !\u003d null : \"Messages should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"skylee03"},"content":" out.print(Message.LINE);","lastModifiedDate":"2023-10-08"},{"lineNumber":55,"author":{"gitId":"skylee03"},"content":" for (String message : messages) {","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"skylee03"},"content":" out.println(Message.PREFIX_MESSAGE + message);","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"skylee03"},"content":" out.println(Message.LINE);","lastModifiedDate":"2023-10-08"},{"lineNumber":59,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":60,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":61,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":62,"author":{"gitId":"skylee03"},"content":" * Shows message for exception \u003ccode\u003ee\u003c/code\u003e.","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"skylee03"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":64,"author":{"gitId":"skylee03"},"content":" * @param e The exception whose message will be shown.","lastModifiedDate":"2023-10-08"},{"lineNumber":65,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":66,"author":{"gitId":"skylee03"},"content":" public void showException(Exception e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":67,"author":{"gitId":"skylee03"},"content":" assert e !\u003d null : \"Exception `e` should not be null\";","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"skylee03"},"content":" showMessages(Message.PREFIX_EXCEPTION + e.getMessage());","lastModifiedDate":"2023-10-08"},{"lineNumber":69,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":70,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":71,"author":{"gitId":"skylee03"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"skylee03"},"content":" * Shows the welcome message.","lastModifiedDate":"2023-10-08"},{"lineNumber":73,"author":{"gitId":"skylee03"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"skylee03"},"content":" public void showWelcome() {","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"skylee03"},"content":" showMessages(Message.MESSAGE_HELLO);","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":77}},{"path":"src/test/java/athleticli/commands/activity/AddActivityCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.commands.activity;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import athleticli.data.activity.Run;","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":"class AddActivityCommandTest {","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Night Run\";","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final int DURATION \u003d 85;","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 18120;","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 10, 10, 23, 21);","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private static final int ELEVATION \u003d 60;","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" private Run run;","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" private AddActivityCommand addActivityCommand;","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" private Data data;","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" void setUp() {","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" run \u003d new Run(CAPTION, DURATION, DISTANCE, DATE, ELEVATION);","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" addActivityCommand \u003d new AddActivityCommand(run);","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" void execute() {","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" String[] expected \u003d {\"Well done! I\u0027ve added this activity:\", run.toString(), \"Now you have tracked your \" +","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" \"first activity. This is just the beginning!\"};","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" String[] actual \u003d addActivityCommand.execute(data);","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":41}},{"path":"src/test/java/athleticli/commands/diet/AddDietCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" * Tests the add diet commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":"public class AddDietCommandTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" private static final int CALORIES \u003d 100;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 20;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" private static final int CARB \u003d 30;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" private static final int FAT \u003d 40;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" private Diet diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" private AddDietCommand addDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" private Data data;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" addDietCommand \u003d new AddDietCommand(diet);","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Well done! I\u0027ve added this diet:\", diet.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked your \" + \"first diet. This is just the beginning!\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d addDietCommand.execute(data);","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":39}},{"path":"src/test/java/athleticli/commands/diet/DeleteDietCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" * Tests the delete diet commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":"public class DeleteDietCommandTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" private static final int CALORIES \u003d 100;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 20;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" private static final int CARB \u003d 30;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" private static final int FAT \u003d 40;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" private Diet diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" private DeleteDietCommand deleteDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" private Data data;","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" deleteDietCommand \u003d new DeleteDietCommand(1);","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" data.getDiets().add(diet);","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" void execute() throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Noted. I\u0027ve removed this diet:\", diet.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked a total of 0 diets. Keep grinding!\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d deleteDietCommand.execute(data);","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" void execute_invalidIndex_expectException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" deleteDietCommand \u003d new DeleteDietCommand(2);","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e deleteDietCommand.execute(data));","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" void execute_negativeIndex_expectException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":" deleteDietCommand \u003d new DeleteDietCommand(-1);","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e deleteDietCommand.execute(data));","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":53}},{"path":"src/test/java/athleticli/commands/diet/DeleteDietGoalCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoal;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":"class DeleteDietGoalCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":" private Data data;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":" private DietGoal dietGoalFats;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e filledInputDietGoals;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":" void setUp() {","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" dietGoalFats \u003d new DietGoal(\"fats\", 10000);","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals.add(dietGoalFats);","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" void execute_deleteOneItemFromFilledDietGoalList_expectCorrectMessage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" System.out.println(data.getDietGoals());","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":" DeleteDietGoalCommand deleteDietGoalCommand \u003d new DeleteDietGoalCommand(1);","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":" String[] expectedString \u003d new String[]{\"The following goal has been deleted:\\n\", \"fats intake progress: \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" \"(0/10000)\\n\",};","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, deleteDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" void execute_deleteOneItemFromEmptyDietGoalList_expectAthletiException() {","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" DeleteDietGoalCommand deleteDietGoalCommand \u003d new DeleteDietGoalCommand(100);","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e deleteDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"yicheng-toh":52}},{"path":"src/test/java/athleticli/commands/diet/EditDietGoalCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoal;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"class EditDietGoalCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e emptyInputDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e filledInputDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e filledChangedInputDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":" private DietGoal dietGoalFats;","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" private DietGoal newDietGoalFats;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":" private Data data;","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":" @BeforeEach","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" void setUp() {","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" dietGoalFats \u003d new DietGoal(\"fats\", 10000);","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":" newDietGoalFats \u003d new DietGoal(\"fats\", 10);","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" emptyInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals.add(dietGoalFats);","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" filledChangedInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" filledChangedInputDietGoals.add(newDietGoalFats);","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" void execute_emptyInputList_expectNoError() {","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":" EditDietGoalCommand editDietGoalCommand \u003d new EditDietGoalCommand(emptyInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" assertDoesNotThrow(() -\u003e editDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":" void execute_emptyInputList_expectCorrectMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" EditDietGoalCommand editDietGoalCommand \u003d new EditDietGoalCommand(emptyInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" String[] expectedString \u003d {\"These are your goal(s):\\n\", \"\", \"Now you have 0 diet goal(s).\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" String[] actualString \u003d editDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, actualString);","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":" void execute_oneNewInputDietGoal_expectError() {","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":" EditDietGoalCommand editDietGoalCommand \u003d new EditDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e editDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"yicheng-toh"},"content":" void execute_oneExistingInputDietGoal_expectNoError() {","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"yicheng-toh"},"content":" EditDietGoalCommand editDietGoalCommand \u003d new EditDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"yicheng-toh"},"content":" setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"yicheng-toh"},"content":" assertDoesNotThrow(() -\u003e editDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"yicheng-toh"},"content":" void execute_changeOneExistingInputDietGoal_expectCorrectMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"yicheng-toh"},"content":" EditDietGoalCommand editDietGoalCommand \u003d new EditDietGoalCommand(filledChangedInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"yicheng-toh"},"content":" String[] expectedString \u003d {\"These are your goal(s):\\n\", \"\\t1. fats intake progress: \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"yicheng-toh"},"content":" \"(0/10)\\n\", \"Now you have 1 diet goal(s).\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"yicheng-toh"},"content":" setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, editDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"yicheng-toh":90}},{"path":"src/test/java/athleticli/commands/diet/ListDietCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import athleticli.data.diet.Diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" * Tests the list diet commands provided by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"public class ListDietCommandTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" private static final int CALORIES \u003d 100;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 20;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" private static final int CARB \u003d 30;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" private static final int FAT \u003d 40;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" private Diet diet;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" private ListDietCommand listDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" private Data data;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" listDietCommand \u003d new ListDietCommand();","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" data.getDiets().add(diet);","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" String[] expected \u003d {\"Here are the diets in your list:\", \"1. \" + diet.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" \"Now you have tracked a total of 1 diets. Keep grinding!\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" String[] actual \u003d listDietCommand.execute(data);","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c actual.length; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected[i], actual[i]);","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"nihalzp":39}},{"path":"src/test/java/athleticli/commands/diet/ListDietGoalCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoal;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"class ListDietGoalCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e filledInputDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":" private DietGoal dietGoalFats;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":" private Data data;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" @BeforeEach","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":" void setUp() {","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":" dietGoalFats \u003d new DietGoal(\"fats\", 10000);","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals.add(dietGoalFats);","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":" void execute_emptyInputList_returnNoDietGoalMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" String[] expectedString \u003d {\"There are no goals at the moment. Add a diet goal to start.\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" ListDietGoalCommand listDietGoalCommand \u003d new ListDietGoalCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, listDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" void execute_filledInputList_returnDietGoalPresentMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":" String[] expectedString \u003d {\"These are your goal(s):\\n\", \"\\t1. fats intake progress: \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" \"(0/10000)\\n\", \"Now you have 1 diet goal(s).\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":" ListDietGoalCommand listDietGoalCommand \u003d new ListDietGoalCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, listDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":" assert (false);","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"yicheng-toh":49}},{"path":"src/test/java/athleticli/commands/diet/SetDietGoalCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"package athleticli.commands.diet;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.data.diet.DietGoal;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.fail;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":"class SetDietGoalCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e emptyInputDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":" private ArrayList\u003cDietGoal\u003e filledInputDietGoals;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":" private DietGoal dietGoalFats;","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" private Data data;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":" @BeforeEach","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":" void setUp() {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" emptyInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" dietGoalFats \u003d new DietGoal(\"fats\", 10000);","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":" filledInputDietGoals.add(dietGoalFats);","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" void execute_emptyInputList_expectNoError() {","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(emptyInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":" assertDoesNotThrow(() -\u003e setDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" void execute_emptyInputList_expectCorrectMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(emptyInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" String[] expectedString \u003d {\"These are your goal(s):\\n\", \"\", \"Now you have 0 diet goal(s).\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" String[] actualString \u003d setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, actualString);","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":" void execute_oneNewInputDietGoal_expectNoError() {","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"yicheng-toh"},"content":" assertDoesNotThrow(() -\u003e setDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":" void execute_oneNewInputDietGoal_expectCorrectMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"yicheng-toh"},"content":" String[] expectedString \u003d {\"These are your goal(s):\\n\", \"\\t1. fats intake progress: \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"yicheng-toh"},"content":" \"(0/10000)\\n\", \"Now you have 1 diet goal(s).\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"yicheng-toh"},"content":" String[] actualString \u003d setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"yicheng-toh"},"content":" assertArrayEquals(expectedString, actualString);","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"yicheng-toh"},"content":" void execute_oneExistingInputDietGoal_expectAthletiException() {","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"yicheng-toh"},"content":" SetDietGoalCommand setDietGoalCommand \u003d new SetDietGoalCommand(filledInputDietGoals);","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"yicheng-toh"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"yicheng-toh"},"content":" setDietGoalCommand.execute(data);","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"yicheng-toh"},"content":" } catch (AthletiException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"yicheng-toh"},"content":" fail(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e setDietGoalCommand.execute(data));","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"yicheng-toh":80}},{"path":"src/test/java/athleticli/commands/sleep/AddSleepCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.SleepList;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":"public class AddSleepCommandTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":" private Data data;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" public void setup() {","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" data.setSleeps(new SleepList());","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" public void testExecuteWithValidInput() {","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime from \u003d LocalDateTime.of(2023, 10, 17, 22, 0);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime to \u003d LocalDateTime.of(2023, 10, 18, 6, 0);","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":" AddSleepCommand command \u003d new AddSleepCommand(from, to);","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":" String[] expected \u003d {","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":" \"Got it. I\u0027ve added this sleep record:\",","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"DaDevChia"},"content":" \"sleep record from 17-10-2023 22:00 to 18-10-2023 06:00\",","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":" \"Now you have 1 sleep records in the list.\"","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"DaDevChia"},"content":" ","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":" assertArrayEquals(expected, command.execute(data));","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"DaDevChia"},"content":" public void testExecuteCountingSleepRecords() {","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime from1 \u003d LocalDateTime.of(2023, 10, 17, 22, 0);","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime to1 \u003d LocalDateTime.of(2023, 10, 18, 6, 0);","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"DaDevChia"},"content":" AddSleepCommand command1 \u003d new AddSleepCommand(from1, to1);","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":" command1.execute(data); // Add first sleep record","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime from2 \u003d LocalDateTime.of(2023, 10, 18, 22, 0);","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime to2 \u003d LocalDateTime.of(2023, 10, 19, 6, 0);","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"DaDevChia"},"content":" AddSleepCommand command2 \u003d new AddSleepCommand(from2, to2);","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"DaDevChia"},"content":" String[] expected \u003d {","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"DaDevChia"},"content":" \"Got it. I\u0027ve added this sleep record:\",","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"DaDevChia"},"content":" \"sleep record from 18-10-2023 22:00 to 19-10-2023 06:00\",","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"DaDevChia"},"content":" \"Now you have 2 sleep records in the list.\"","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"DaDevChia"},"content":" ","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"DaDevChia"},"content":" assertArrayEquals(expected, command2.execute(data));","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"DaDevChia":57}},{"path":"src/test/java/athleticli/commands/sleep/DeleteSleepCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.Sleep;","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.SleepList;","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":"public class DeleteSleepCommandTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" private Data data;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" private Sleep sleep1;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" private Sleep sleep2;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" public void setup() {","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" SleepList sleepList \u003d new SleepList();","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" sleep1 \u003d new Sleep(LocalDateTime.of(2023, 10, 17, 22, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 18, 6, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":" sleep2 \u003d new Sleep(LocalDateTime.of(2023, 10, 18, 22, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 19, 6, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep1);","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep2);","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":" data.setSleeps(sleepList);","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"DaDevChia"},"content":" public void testExecuteWithValidIndex() throws AthletiException {","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"DaDevChia"},"content":" DeleteSleepCommand command \u003d new DeleteSleepCommand(1);","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"DaDevChia"},"content":" String[] expected \u003d {","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"DaDevChia"},"content":" \"Got it. I\u0027ve deleted this sleep record at index 1: sleep record from 17-10-2023 22:00 to 18-10-2023 06:00\"","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"DaDevChia"},"content":" assertArrayEquals(expected, command.execute(data));","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":" public void testExecuteWithInvalidIndex() throws AthletiException {","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"DaDevChia"},"content":" DeleteSleepCommand commandNegative \u003d new DeleteSleepCommand(-1);","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e commandNegative.execute(data));","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"DaDevChia"},"content":" DeleteSleepCommand commandZero \u003d new DeleteSleepCommand(0);","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e commandZero.execute(data));","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"DaDevChia"},"content":" DeleteSleepCommand commandBeyond \u003d new DeleteSleepCommand(3); // Only 2 records in the list.","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e commandBeyond.execute(data));","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"DaDevChia"},"content":" public void testExecuteWithEmptyList() throws AthletiException {","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"DaDevChia"},"content":" data.setSleeps(new SleepList()); // Empty list","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"DaDevChia"},"content":" DeleteSleepCommand command \u003d new DeleteSleepCommand(1);","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e command.execute(data));","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"DaDevChia":63}},{"path":"src/test/java/athleticli/commands/sleep/EditSleepCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.Sleep;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.SleepList;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":"public class EditSleepCommandTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" private Data data;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" private Sleep sleep1;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" private Sleep sleep2;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" public void setup() {","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" SleepList sleepList \u003d new SleepList();","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" sleep1 \u003d new Sleep(LocalDateTime.of(2023, 10, 17, 22, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 18, 6, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":" sleep2 \u003d new Sleep(LocalDateTime.of(2023, 10, 18, 22, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 19, 6, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep1);","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep2);","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":" data.setSleeps(sleepList);","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"DaDevChia"},"content":" public void testExecuteWithValidIndex() throws AthletiException {","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"DaDevChia"},"content":" EditSleepCommand command \u003d new EditSleepCommand(1, LocalDateTime.of(2023, 10, 17, 23, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 18, 7, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"DaDevChia"},"content":" String[] expected \u003d {","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"DaDevChia"},"content":" \"Got it. I\u0027ve changed this sleep record at index 1:\",","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"DaDevChia"},"content":" \"original: sleep record from 17-10-2023 22:00 to 18-10-2023 06:00\",","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"DaDevChia"},"content":" \"to new: sleep record from 17-10-2023 23:00 to 18-10-2023 07:00\",","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"DaDevChia"},"content":" ","lastModifiedDate":"2023-10-20"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":" assertArrayEquals(expected, command.execute(data));","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"DaDevChia"},"content":" public void testExecuteWithInvalidIndex() {","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"DaDevChia"},"content":" EditSleepCommand commandNegative \u003d new EditSleepCommand(-1, LocalDateTime.of(2023, 10, 17, 23, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 18, 7, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e commandNegative.execute(data));","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"DaDevChia"},"content":" EditSleepCommand commandZero \u003d new EditSleepCommand(0, LocalDateTime.of(2023, 10, 17, 23, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 18, 7, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e commandZero.execute(data));","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"DaDevChia"},"content":" EditSleepCommand commandBeyond \u003d new EditSleepCommand(3, LocalDateTime.of(2023, 10, 17, 23, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 18, 7, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e commandBeyond.execute(data));","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-14"},{"lineNumber":64,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"DaDevChia":64}},{"path":"src/test/java/athleticli/commands/sleep/ListSleepCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"package athleticli.commands.sleep;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import static org.junit.jupiter.api.Assertions.assertArrayEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.Data;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.Sleep;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":"import athleticli.data.sleep.SleepList;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":"public class ListSleepCommandTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":" private Data data;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" private Sleep sleep1;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" private Sleep sleep2;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" public void setup() {","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" data \u003d new Data();","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" SleepList sleepList \u003d new SleepList();","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" sleep1 \u003d new Sleep(LocalDateTime.of(2023, 10, 17, 22, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 18, 6, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" sleep2 \u003d new Sleep(LocalDateTime.of(2023, 10, 18, 22, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 19, 6, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep1);","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep2);","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":" data.setSleeps(sleepList);","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"DaDevChia"},"content":" public void testExecuteWithRecords() {","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":" ListSleepCommand command \u003d new ListSleepCommand();","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"DaDevChia"},"content":" String[] expected \u003d {","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"DaDevChia"},"content":" \"Here are the sleep records in your list:\\n\",","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"DaDevChia"},"content":" \"1. sleep record from 17-10-2023 22:00 to 18-10-2023 06:00\",","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"DaDevChia"},"content":" \"2. sleep record from 18-10-2023 22:00 to 19-10-2023 06:00\"","lastModifiedDate":"2023-10-20"},{"lineNumber":40,"author":{"gitId":"DaDevChia"},"content":" }; ","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"DaDevChia"},"content":" String[] actual \u003d command.execute(data);","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"DaDevChia"},"content":" assertArrayEquals(expected, actual);","lastModifiedDate":"2023-10-20"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"DaDevChia"},"content":" public void testExecuteWithEmptyList() {","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"DaDevChia"},"content":" data.setSleeps(new SleepList()); ","lastModifiedDate":"2023-10-20"},{"lineNumber":48,"author":{"gitId":"DaDevChia"},"content":" ListSleepCommand command \u003d new ListSleepCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"DaDevChia"},"content":" String[] expected \u003d {","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"DaDevChia"},"content":" \"You have no sleep records in your list.\"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"DaDevChia"},"content":" };","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"DaDevChia"},"content":" String[] actual \u003d command.execute(data);","lastModifiedDate":"2023-10-20"},{"lineNumber":53,"author":{"gitId":"DaDevChia"},"content":" assertArrayEquals(expected, actual);","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"DaDevChia":56}},{"path":"src/test/java/athleticli/data/activity/ActivityTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"public class ActivityTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Sunday \u003d Runday\";","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" private static final int DURATION \u003d 84;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 18120;","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 10, 10, 23, 21);","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" private Activity activity;","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" public void setUp() {","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" activity \u003d new Activity(CAPTION, DURATION, DISTANCE, DATE);","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" public void testConstructor() {","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" assertEquals(CAPTION, activity.getCaption());","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" assertEquals(DURATION, activity.getMovingTime());","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" assertEquals(DISTANCE, activity.getDistance());","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" assertEquals(DATE, activity.getStartDateTime());","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" public void testToString_longRun() {","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Activity] Sunday \u003d Runday | Distance: 18.12 km | Time: 1h 24m | \" +","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" \"October 10, 2023 at 11:21 PM\";","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, activity.toString());","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":37}},{"path":"src/test/java/athleticli/data/activity/CycleTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"public class CycleTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Cycling in the afternoon\";","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" private static final int DURATION \u003d 133;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 40460;","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final int ELEVATION \u003d 101;","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 10, 7, 14, 0);","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private Cycle cycle;","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" public void setUp() {","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" cycle \u003d new Cycle(CAPTION, DURATION, DISTANCE, DATE, ELEVATION);","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" public void calculateAverageSpeed() {","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" double expected \u003d 18.25;","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" double actual \u003d cycle.calculateAverageSpeed();","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual, 0.005);","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" public void testToString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Cycle] Cycling in the afternoon | Distance: 40.46 km | Speed: 18.25 km/h | Time: 2h 13m | \"","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" + \"October 7, 2023 at 2:00 PM\";","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, cycle.toString());","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":37}},{"path":"src/test/java/athleticli/data/activity/RunTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"public class RunTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Night Run\";","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" private static final int DURATION \u003d 85;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 18120;","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 10, 10, 23,","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" 21);","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private static final int ELEVATION \u003d 60;","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":" private Run run;","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" public void setUp() {","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" run \u003d new Run(CAPTION, DURATION, DISTANCE, DATE, ELEVATION);","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" public void calculateAveragePace() {","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" double averagePace \u003d run.calculateAveragePace();","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":" assertEquals(4.69, averagePace, 0.005);","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" public void convertAveragePaceToString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"4:41\";","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" String actual \u003d run.convertAveragePaceToString();","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" public void testToString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Run] Night Run | Distance: 18.12 km | Pace: 4:41 /km | Time: 1h 25m | \" +","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":" \"October 10, 2023 at 11:21 PM\";","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, run.toString());","lastModifiedDate":"2023-10-13"},{"lineNumber":43,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":44}},{"path":"src/test/java/athleticli/data/activity/SwimTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"AlWo223"},"content":"package athleticli.data.activity;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"AlWo223"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"AlWo223"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"AlWo223"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"AlWo223"},"content":"public class SwimTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"AlWo223"},"content":" private static final String CAPTION \u003d \"Afternoon Swim\";","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"AlWo223"},"content":" private static final int DURATION \u003d 35;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"AlWo223"},"content":" private static final int DISTANCE \u003d 1000;","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"AlWo223"},"content":" private static final LocalDateTime DATE \u003d LocalDateTime.of(2023, 8, 29, 9, 45);","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"AlWo223"},"content":" private static final Swim.SwimmingStyle STYLE \u003d Swim.SwimmingStyle.BUTTERFLY;","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"AlWo223"},"content":" private Swim swim;","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"AlWo223"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"AlWo223"},"content":" public void setUp() {","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"AlWo223"},"content":" swim \u003d new Swim(CAPTION, DURATION, DISTANCE, DATE, STYLE);","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"AlWo223"},"content":" public void calculateAverageLapTime() {","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"AlWo223"},"content":" assertEquals(105, swim.calculateAverageLapTime());","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"AlWo223"},"content":" public void calculateLaps() {","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"AlWo223"},"content":" assertEquals(20, swim.calculateLaps());","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"AlWo223"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"AlWo223"},"content":" public void testToString() {","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"AlWo223"},"content":" String expected \u003d \"[Swim] Afternoon Swim | Distance: 1.00 km | Avg Lap Time: 105s | Time: 0h 35m | \" +","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"AlWo223"},"content":" \"August 29, 2023 at 9:45 AM\";","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"AlWo223"},"content":" assertEquals(expected, swim.toString());","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"AlWo223"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"AlWo223"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"AlWo223"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"AlWo223":42}},{"path":"src/test/java/athleticli/data/diet/DietGoalListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.data.diet;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-11"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"class DietGoalListTest {","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 10000;","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" private DietGoal proteinGoal;","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" private DietGoalList dietGoals;","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" dietGoals \u003d new DietGoalList();","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" proteinGoal \u003d new DietGoal(\"protein\", PROTEIN);","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" void add_addOneGoal_expectSizeOne() {","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" dietGoals.add(proteinGoal);","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" assertEquals(1, dietGoals.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-11"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" void remove_removeExistingGoal_expectSizeOne() {","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" dietGoals.add(proteinGoal);","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" dietGoals.remove(0);","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" assertEquals(0, dietGoals.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-11"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" void remove_removeFromZeroGoals_expectIndexOutOfRangeError() {","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(IndexOutOfBoundsException.class, () -\u003e {","lastModifiedDate":"2023-10-11"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" dietGoals.remove(0);","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" });","lastModifiedDate":"2023-10-11"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-11"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" void get_addOneGoal_expectGetSameGoal() {","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" dietGoals.add(proteinGoal);","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" assertEquals(proteinGoal, dietGoals.get(0));","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" void size_initializeArgs_expectZero() {","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" assertEquals(0, dietGoals.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" void size_addTenGoals_expectTen() {","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" for (int i \u003d 0; i \u003c 10; i++) {","lastModifiedDate":"2023-10-10"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" dietGoals.add(proteinGoal);","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" assertEquals(10, dietGoals.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-11"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" void testToString_oneExistingGoal_expectCorrectFormat() {","lastModifiedDate":"2023-10-11"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":" dietGoals.add(proteinGoal);","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"yicheng-toh"},"content":" assertEquals(\"\\t1. protein intake progress: (0/10000)\\n\", dietGoals.toString());","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":64,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"yicheng-toh":35,"nihalzp":29}},{"path":"src/test/java/athleticli/data/diet/DietGoalTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.data.diet;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"class DietGoalTest {","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":" void getNutrients_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":" assertEquals(\"protein\", proteinGoal.getNutrients());","lastModifiedDate":"2023-10-10"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-11"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":" void setNutrients_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-11"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-11"},{"lineNumber":20,"author":{"gitId":"yicheng-toh"},"content":" proteinGoal.setNutrients(\"Advanced Protein\");","lastModifiedDate":"2023-10-11"},{"lineNumber":21,"author":{"gitId":"yicheng-toh"},"content":" assertEquals(\"Advanced Protein\", proteinGoal.getNutrients());","lastModifiedDate":"2023-10-11"},{"lineNumber":22,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":23,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":24,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"yicheng-toh"},"content":" void getTargetValue_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-10"},{"lineNumber":27,"author":{"gitId":"yicheng-toh"},"content":" assertEquals(10000, proteinGoal.getTargetValue());","lastModifiedDate":"2023-10-10"},{"lineNumber":28,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":30,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-11"},{"lineNumber":31,"author":{"gitId":"yicheng-toh"},"content":" void setTargetValue_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-11"},{"lineNumber":33,"author":{"gitId":"yicheng-toh"},"content":" proteinGoal.setTargetValue(10);","lastModifiedDate":"2023-10-11"},{"lineNumber":34,"author":{"gitId":"yicheng-toh"},"content":" assertEquals(10, proteinGoal.getTargetValue());","lastModifiedDate":"2023-10-11"},{"lineNumber":35,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-11"},{"lineNumber":36,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-11"},{"lineNumber":37,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"yicheng-toh"},"content":" void getCurrentValue_initializeCommonArgs_expectZero() {","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"yicheng-toh"},"content":" assertEquals(0, proteinGoal.getCurrentValue());","lastModifiedDate":"2023-10-10"},{"lineNumber":41,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":42,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":43,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":44,"author":{"gitId":"yicheng-toh"},"content":" void setCurrentValue() {","lastModifiedDate":"2023-10-10"},{"lineNumber":45,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-10"},{"lineNumber":46,"author":{"gitId":"yicheng-toh"},"content":" proteinGoal.setCurrentValue(20);","lastModifiedDate":"2023-10-10"},{"lineNumber":47,"author":{"gitId":"yicheng-toh"},"content":" assertEquals(20, proteinGoal.getCurrentValue());","lastModifiedDate":"2023-10-10"},{"lineNumber":48,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":49,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":50,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":51,"author":{"gitId":"yicheng-toh"},"content":" void getIsGoalAchieved_currentValueGreaterThanTargetValue_expectTrue() {","lastModifiedDate":"2023-10-10"},{"lineNumber":52,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-10"},{"lineNumber":53,"author":{"gitId":"yicheng-toh"},"content":" proteinGoal.setCurrentValue(20000);","lastModifiedDate":"2023-10-10"},{"lineNumber":54,"author":{"gitId":"yicheng-toh"},"content":" assertTrue(proteinGoal.getIsGoalAchieved());","lastModifiedDate":"2023-10-10"},{"lineNumber":55,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":56,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":57,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":58,"author":{"gitId":"yicheng-toh"},"content":" void getIsGoalAchieved_currentValueEqualToTargetValue_expectTrue() {","lastModifiedDate":"2023-10-10"},{"lineNumber":59,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-10"},{"lineNumber":60,"author":{"gitId":"yicheng-toh"},"content":" proteinGoal.setCurrentValue(10000);","lastModifiedDate":"2023-10-10"},{"lineNumber":61,"author":{"gitId":"yicheng-toh"},"content":" assertTrue(proteinGoal.getIsGoalAchieved());","lastModifiedDate":"2023-10-10"},{"lineNumber":62,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":63,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":64,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":65,"author":{"gitId":"yicheng-toh"},"content":" void getIsGoalAchieved_currentValueLesserThanTargetValue_expectFalse() {","lastModifiedDate":"2023-10-10"},{"lineNumber":66,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-10"},{"lineNumber":67,"author":{"gitId":"yicheng-toh"},"content":" proteinGoal.setCurrentValue(100);","lastModifiedDate":"2023-10-10"},{"lineNumber":68,"author":{"gitId":"yicheng-toh"},"content":" assertFalse(proteinGoal.getIsGoalAchieved());","lastModifiedDate":"2023-10-10"},{"lineNumber":69,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":70,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":71,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-10"},{"lineNumber":72,"author":{"gitId":"yicheng-toh"},"content":" void testToString_initializeCommonArgs_expectCorrectFormat() {","lastModifiedDate":"2023-10-12"},{"lineNumber":73,"author":{"gitId":"yicheng-toh"},"content":" DietGoal proteinGoal \u003d new DietGoal(\"protein\", 10000);","lastModifiedDate":"2023-10-10"},{"lineNumber":74,"author":{"gitId":"yicheng-toh"},"content":" assertEquals(\"protein intake progress: (0/10000)\\n\", proteinGoal.toString());","lastModifiedDate":"2023-10-10"},{"lineNumber":75,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":76,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"yicheng-toh":75,"nihalzp":1}},{"path":"src/test/java/athleticli/data/diet/DietListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.data.diet;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":"public class DietListTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" private static final int CALORIES \u003d 10000;","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 20000;","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" private static final int CARB \u003d 30000;","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":" private static final int FAT \u003d 40000;","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" private DietList dietList;","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":" dietList \u003d new DietList();","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" void add_addOneDiet_expectSizeOne() {","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" assertEquals(1, dietList.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":" void remove_removeExistingDiet_expectSizeOne() {","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" dietList.remove(0);","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" assertEquals(0, dietList.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" void remove_removeFromZeroDiets_expectIndexOutOfRangeError() {","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" assertThrows(IndexOutOfBoundsException.class, () -\u003e {","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" dietList.remove(0);","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":" });","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" void get_addOneDiet_expectGetSameDiet() {","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" assertEquals(diet, dietList.get(0));","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":" void size_initializeArgs_expectZero() {","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" assertEquals(0, dietList.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":" void size_addTenDiets_expectTen() {","lastModifiedDate":"2023-10-14"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" for (int i \u003d 0; i \u003c 10; i++) {","lastModifiedDate":"2023-10-14"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" assertEquals(10, dietList.size());","lastModifiedDate":"2023-10-14"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":" void testToString_oneExistingDiet_expectCorrectFormat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":" Diet diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet);","lastModifiedDate":"2023-10-14"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"1. \" + diet.toString(), dietList.toString());","lastModifiedDate":"2023-10-14"},{"lineNumber":70,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":71,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":72,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":73,"author":{"gitId":"nihalzp"},"content":" void testToString_twoExistingDiets_expectCorrectFormat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":74,"author":{"gitId":"nihalzp"},"content":" Diet diet1 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":75,"author":{"gitId":"nihalzp"},"content":" Diet diet2 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":76,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet1);","lastModifiedDate":"2023-10-14"},{"lineNumber":77,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet2);","lastModifiedDate":"2023-10-14"},{"lineNumber":78,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"1. \" + diet1.toString() + \"\\n2. \" + diet2.toString(), dietList.toString());","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":80,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":81,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":82,"author":{"gitId":"nihalzp"},"content":" void testToString_zeroExistingDiets_expectCorrectFormat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":83,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"\", dietList.toString());","lastModifiedDate":"2023-10-14"},{"lineNumber":84,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":85,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":86,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":87,"author":{"gitId":"nihalzp"},"content":" void testToString_threeExistingDiets_expectCorrectFormat() {","lastModifiedDate":"2023-10-14"},{"lineNumber":88,"author":{"gitId":"nihalzp"},"content":" Diet diet1 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":89,"author":{"gitId":"nihalzp"},"content":" Diet diet2 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":90,"author":{"gitId":"nihalzp"},"content":" Diet diet3 \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":91,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet1);","lastModifiedDate":"2023-10-14"},{"lineNumber":92,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet2);","lastModifiedDate":"2023-10-14"},{"lineNumber":93,"author":{"gitId":"nihalzp"},"content":" dietList.add(diet3);","lastModifiedDate":"2023-10-14"},{"lineNumber":94,"author":{"gitId":"nihalzp"},"content":" assertEquals(\"1. \" + diet1.toString() + \"\\n2. \" + diet2.toString() + \"\\n3. \" + diet3.toString(),","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"nihalzp"},"content":" dietList.toString());","lastModifiedDate":"2023-10-14"},{"lineNumber":96,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":97,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"nihalzp":97}},{"path":"src/test/java/athleticli/data/diet/DietTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"nihalzp"},"content":"package athleticli.data.diet;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-14"},{"lineNumber":7,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"nihalzp"},"content":"public class DietTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":" private static final int CALORIES \u003d 10000;","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"nihalzp"},"content":" private static final int PROTEIN \u003d 20000;","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"nihalzp"},"content":" private static final int CARB \u003d 30000;","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"nihalzp"},"content":" private static final int FAT \u003d 40000;","lastModifiedDate":"2023-10-14"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":" private Diet diet;","lastModifiedDate":"2023-10-14"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":" @BeforeEach","lastModifiedDate":"2023-10-14"},{"lineNumber":16,"author":{"gitId":"nihalzp"},"content":" void setUp() {","lastModifiedDate":"2023-10-14"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":" diet \u003d new Diet(CALORIES, PROTEIN, CARB, FAT);","lastModifiedDate":"2023-10-14"},{"lineNumber":18,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":19,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":" void getCalories_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":" assertEquals(CALORIES, diet.getCalories());","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"nihalzp"},"content":" void setCalories_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"nihalzp"},"content":" diet.setCalories(10);","lastModifiedDate":"2023-10-14"},{"lineNumber":28,"author":{"gitId":"nihalzp"},"content":" assertEquals(10, diet.getCalories());","lastModifiedDate":"2023-10-14"},{"lineNumber":29,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":30,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":31,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":32,"author":{"gitId":"nihalzp"},"content":" void getProtein_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":33,"author":{"gitId":"nihalzp"},"content":" assertEquals(PROTEIN, diet.getProtein());","lastModifiedDate":"2023-10-14"},{"lineNumber":34,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":36,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":37,"author":{"gitId":"nihalzp"},"content":" void setProtein_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":38,"author":{"gitId":"nihalzp"},"content":" diet.setProtein(20);","lastModifiedDate":"2023-10-14"},{"lineNumber":39,"author":{"gitId":"nihalzp"},"content":" assertEquals(20, diet.getProtein());","lastModifiedDate":"2023-10-14"},{"lineNumber":40,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":41,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":42,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":43,"author":{"gitId":"nihalzp"},"content":" void getCarb_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":44,"author":{"gitId":"nihalzp"},"content":" assertEquals(CARB, diet.getCarb());","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":46,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":47,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":48,"author":{"gitId":"nihalzp"},"content":" void setCarb_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":49,"author":{"gitId":"nihalzp"},"content":" diet.setCarb(30);","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"nihalzp"},"content":" assertEquals(30, diet.getCarb());","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":53,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"nihalzp"},"content":" void getFat_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"nihalzp"},"content":" assertEquals(FAT, diet.getFat());","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":57,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":58,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":59,"author":{"gitId":"nihalzp"},"content":" void setFat_setCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":60,"author":{"gitId":"nihalzp"},"content":" diet.setFat(40);","lastModifiedDate":"2023-10-14"},{"lineNumber":61,"author":{"gitId":"nihalzp"},"content":" assertEquals(40, diet.getFat());","lastModifiedDate":"2023-10-14"},{"lineNumber":62,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":63,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":64,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":65,"author":{"gitId":"nihalzp"},"content":" void toString_initializeCommonArgs_expectArgs() {","lastModifiedDate":"2023-10-14"},{"lineNumber":66,"author":{"gitId":"nihalzp"},"content":" String expected \u003d \"Calories: 10000 Protein: 20000 Carb: 30000 Fat: 40000\";","lastModifiedDate":"2023-10-14"},{"lineNumber":67,"author":{"gitId":"nihalzp"},"content":" assertEquals(expected, diet.toString());","lastModifiedDate":"2023-10-14"},{"lineNumber":68,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":69,"author":{"gitId":"nihalzp"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"nihalzp":69}},{"path":"src/test/java/athleticli/data/sleep/SleepListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"package athleticli.data.sleep;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"public class SleepListTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":" private SleepList sleepList;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":" private Sleep sleep1;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":" private Sleep sleep2;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" public void setup() {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" sleepList \u003d new SleepList();","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" sleep1 \u003d new Sleep(LocalDateTime.of(2023, 10, 17, 22, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 18, 6, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" sleep2 \u003d new Sleep(LocalDateTime.of(2023, 10, 18, 22, 0), ","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" LocalDateTime.of(2023, 10, 19, 6, 0));","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" public void testToStringWithEmptyList() {","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":" assertEquals(\"[]\", sleepList.toString());","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"DaDevChia"},"content":" public void testAddSleep() {","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep1);","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"DaDevChia"},"content":" assertEquals(1, sleepList.size());","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"DaDevChia"},"content":" assertEquals(sleep1, sleepList.get(0));","lastModifiedDate":"2023-10-14"},{"lineNumber":35,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"DaDevChia"},"content":" public void testRemoveSleep() {","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep1);","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"DaDevChia"},"content":" sleepList.add(sleep2);","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"DaDevChia"},"content":" sleepList.remove(sleep1);","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"DaDevChia"},"content":" assertEquals(1, sleepList.size());","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"DaDevChia"},"content":" assertEquals(sleep2, sleepList.get(0));","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":45,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"DaDevChia":45}},{"path":"src/test/java/athleticli/data/sleep/SleepTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DaDevChia"},"content":"package athleticli.data.sleep;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"DaDevChia"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-14"},{"lineNumber":4,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":5,"author":{"gitId":"DaDevChia"},"content":"import java.time.LocalDateTime;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"public class SleepTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DaDevChia"},"content":" private LocalDateTime from;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DaDevChia"},"content":" private LocalDateTime to;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"DaDevChia"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"DaDevChia"},"content":" public void setup() {","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"DaDevChia"},"content":" from \u003d LocalDateTime.of(2023, 10, 17, 22, 0); // 17-10-2023 22:00","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DaDevChia"},"content":" to \u003d LocalDateTime.of(2023, 10, 18, 6, 0); // 18-10-2023 06:00","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":22,"author":{"gitId":"DaDevChia"},"content":" public void testToString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DaDevChia"},"content":" Sleep sleep \u003d new Sleep(from, to);","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DaDevChia"},"content":" String expected \u003d \"sleep record from 17-10-2023 22:00 to 18-10-2023 06:00\";","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DaDevChia"},"content":" assertEquals(expected, sleep.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"DaDevChia"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"DaDevChia":28}},{"path":"src/test/java/athleticli/ui/NutrientVerifierTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"yicheng-toh"},"content":"package athleticli.ui;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"yicheng-toh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"yicheng-toh"},"content":"class NutrientVerifierTest {","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"yicheng-toh"},"content":" void verify_inputApprovedNutrients_expectTrue() {","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"yicheng-toh"},"content":" assertTrue(NutrientVerifier.verify(\"fats\"));","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"yicheng-toh"},"content":" void verify_inputUnapprovedNutrients_expectFalse() {","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":" assertFalse(NutrientVerifier.verify(\"Vitamin A\"));","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"yicheng-toh":18}},{"path":"src/test/java/athleticli/ui/ParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"skylee03"},"content":"package athleticli.ui;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"skylee03"},"content":"import athleticli.commands.ByeCommand;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.AddDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.DeleteDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.diet.ListDietCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.sleep.AddSleepCommand;","lastModifiedDate":"2023-10-14"},{"lineNumber":8,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.sleep.DeleteSleepCommand;","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"nihalzp"},"content":"import athleticli.commands.sleep.EditSleepCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"DaDevChia"},"content":"import athleticli.commands.sleep.ListSleepCommand;","lastModifiedDate":"2023-10-14"},{"lineNumber":11,"author":{"gitId":"skylee03"},"content":"import athleticli.exceptions.AthletiException;","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"nihalzp"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.parseCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"yicheng-toh"},"content":"import static athleticli.ui.Parser.parseDietGoalSetEdit;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"nihalzp"},"content":"import static athleticli.ui.Parser.splitCommandWordAndArgs;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"yicheng-toh"},"content":"import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertInstanceOf;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"nihalzp"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"skylee03"},"content":"class ParserTest {","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"skylee03"},"content":" @Test","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"skylee03"},"content":" void splitCommandWordAndArgs_noArgs_expectTwoParts() {","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"skylee03"},"content":" final String commandWithNoArgs \u003d \"bye\";","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"skylee03"},"content":" assertEquals(splitCommandWordAndArgs(commandWithNoArgs).length, 2);","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"skylee03"},"content":" @Test","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"skylee03"},"content":" void splitCommandWordAndArgs_multipleArgs_expectTwoParts() {","lastModifiedDate":"2023-10-08"},{"lineNumber":34,"author":{"gitId":"skylee03"},"content":" final String commandWithMultipleArgs \u003d \"set-diet-goal calories/1 carb/3\";","lastModifiedDate":"2023-10-08"},{"lineNumber":35,"author":{"gitId":"skylee03"},"content":" assertEquals(splitCommandWordAndArgs(commandWithMultipleArgs).length, 2);","lastModifiedDate":"2023-10-08"},{"lineNumber":36,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":37,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"skylee03"},"content":" @Test","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"skylee03"},"content":" void parseCommand_unknownCommand_expectAthletiException() {","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"skylee03"},"content":" final String unknownCommand \u003d \"hello\";","lastModifiedDate":"2023-10-08"},{"lineNumber":41,"author":{"gitId":"skylee03"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(unknownCommand));","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"skylee03"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"skylee03"},"content":" @Test","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"skylee03"},"content":" void parseCommand_byeCommand_expectByeCommand() throws AthletiException {","lastModifiedDate":"2023-10-08"},{"lineNumber":46,"author":{"gitId":"skylee03"},"content":" final String byeCommand \u003d \"bye\";","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"skylee03"},"content":" assertInstanceOf(ByeCommand.class, parseCommand(byeCommand));","lastModifiedDate":"2023-10-08"},{"lineNumber":48,"author":{"gitId":"skylee03"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":49,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":50,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":51,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_addSleepCommand_expectAddSleepCommand() throws AthletiException {","lastModifiedDate":"2023-10-14"},{"lineNumber":52,"author":{"gitId":"DaDevChia"},"content":" final String addSleepCommandString \u003d \"add-sleep start/06-10-2021 10:00 end/07-10-2021 06:00\";","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"DaDevChia"},"content":" assertInstanceOf(AddSleepCommand.class, parseCommand(addSleepCommandString));","lastModifiedDate":"2023-10-14"},{"lineNumber":54,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":56,"author":{"gitId":"DaDevChia"},"content":" @Test ","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_addSleepCommand_missingStartExpectAthletiException() {","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"DaDevChia"},"content":" final String addSleepCommandString \u003d \"add-sleep end/07-10-2021 06:00\";","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addSleepCommandString));","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"DaDevChia"},"content":" @Test ","lastModifiedDate":"2023-10-20"},{"lineNumber":63,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_addSleepCommand_missingEndExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":64,"author":{"gitId":"DaDevChia"},"content":" final String addSleepCommandString \u003d \"add-sleep start/07-10-2021 06:00\";","lastModifiedDate":"2023-10-20"},{"lineNumber":65,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":66,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":67,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":68,"author":{"gitId":"DaDevChia"},"content":" @Test ","lastModifiedDate":"2023-10-20"},{"lineNumber":69,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_addSleepCommand_missingBothExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":70,"author":{"gitId":"DaDevChia"},"content":" final String addSleepCommandString \u003d \"add-sleep start/ end/\";","lastModifiedDate":"2023-10-20"},{"lineNumber":71,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":72,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":73,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":74,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":75,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_addSleepCommand_invalidDatetimeExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":76,"author":{"gitId":"DaDevChia"},"content":" final String addSleepCommandString \u003d \"add-sleep start/07-10-2021 06:00 end/07-10-2021 05:00\";","lastModifiedDate":"2023-10-20"},{"lineNumber":77,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":78,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":79,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":80,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":81,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_expectEditSleepCommand() throws AthletiException {","lastModifiedDate":"2023-10-14"},{"lineNumber":82,"author":{"gitId":"DaDevChia"},"content":" final String editSleepCommandString \u003d \"edit-sleep 1 start/06-10-2021 10:00 end/07-10-2021 06:00\";","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"DaDevChia"},"content":" assertInstanceOf(EditSleepCommand.class, parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-14"},{"lineNumber":84,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":85,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":86,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_missingStartExpectAthletiException() {","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"DaDevChia"},"content":" final String editSleepCommandString \u003d \"edit-sleep 1 end/07-10-2021 06:00\";","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"DaDevChia"},"content":" @Test ","lastModifiedDate":"2023-10-20"},{"lineNumber":93,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_missingEndExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":94,"author":{"gitId":"DaDevChia"},"content":" final String editSleepCommandString \u003d \"edit-sleep 1 start/07-10-2021 06:00\";","lastModifiedDate":"2023-10-20"},{"lineNumber":95,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":96,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":97,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":98,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":99,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_missingBothExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":100,"author":{"gitId":"DaDevChia"},"content":" final String editSleepCommandString \u003d \"edit-sleep 1 start/ end/\";","lastModifiedDate":"2023-10-20"},{"lineNumber":101,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":102,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":103,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":104,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":105,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_invalidDatetimeExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":106,"author":{"gitId":"DaDevChia"},"content":" final String editSleepCommandString \u003d \"edit-sleep 1 start/07-10-2021 07:00 end/07-10-2021 06:00\";","lastModifiedDate":"2023-10-20"},{"lineNumber":107,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":108,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":109,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":110,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":111,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_editSleepCommand_invalidIndexExpectAthletiException() {","lastModifiedDate":"2023-10-20"},{"lineNumber":112,"author":{"gitId":"DaDevChia"},"content":" final String editSleepCommandString \u003d \"edit-sleep abc start/06-10-2021 10:00 end/07-10-2021 06:00\";","lastModifiedDate":"2023-10-20"},{"lineNumber":113,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(editSleepCommandString));","lastModifiedDate":"2023-10-20"},{"lineNumber":114,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":115,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":116,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":117,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_deleteSleepCommand_expectDeleteSleepCommand() throws AthletiException {","lastModifiedDate":"2023-10-14"},{"lineNumber":118,"author":{"gitId":"DaDevChia"},"content":" final String deleteSleepCommandString \u003d \"delete-sleep 1\";","lastModifiedDate":"2023-10-14"},{"lineNumber":119,"author":{"gitId":"DaDevChia"},"content":" assertInstanceOf(DeleteSleepCommand.class, parseCommand(deleteSleepCommandString));","lastModifiedDate":"2023-10-14"},{"lineNumber":120,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":121,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":122,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_deleteSleepCommand_invalidIndexExpectAthletiException() {","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"DaDevChia"},"content":" final String deleteSleepCommandString \u003d \"delete-sleep abc\";","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"DaDevChia"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(deleteSleepCommandString));","lastModifiedDate":"2023-10-17"},{"lineNumber":126,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":127,"author":{"gitId":"DaDevChia"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"DaDevChia"},"content":" @Test","lastModifiedDate":"2023-10-14"},{"lineNumber":129,"author":{"gitId":"DaDevChia"},"content":" void parseCommand_listSleepCommand_expectListSleepCommand() throws AthletiException {","lastModifiedDate":"2023-10-14"},{"lineNumber":130,"author":{"gitId":"DaDevChia"},"content":" final String listSleepCommandString \u003d \"list-sleep\";","lastModifiedDate":"2023-10-14"},{"lineNumber":131,"author":{"gitId":"DaDevChia"},"content":" assertInstanceOf(ListSleepCommand.class, parseCommand(listSleepCommandString));","lastModifiedDate":"2023-10-14"},{"lineNumber":132,"author":{"gitId":"DaDevChia"},"content":" }","lastModifiedDate":"2023-10-14"},{"lineNumber":133,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":134,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":135,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_expectAddDietCommand() throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":136,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 carb/3 fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":137,"author":{"gitId":"nihalzp"},"content":" assertInstanceOf(AddDietCommand.class, parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":138,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":139,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":140,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":141,"author":{"gitId":"nihalzp"},"content":" void parseCommand_deleteDietCommand_expectDeleteDietCommand() throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":142,"author":{"gitId":"nihalzp"},"content":" final String deleteDietCommandString \u003d \"delete-diet 1\";","lastModifiedDate":"2023-10-15"},{"lineNumber":143,"author":{"gitId":"nihalzp"},"content":" assertInstanceOf(DeleteDietCommand.class, parseCommand(deleteDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":144,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":145,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":146,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":147,"author":{"gitId":"nihalzp"},"content":" void parseCommand_listDietCommand_expectListDietCommand() throws AthletiException {","lastModifiedDate":"2023-10-15"},{"lineNumber":148,"author":{"gitId":"nihalzp"},"content":" final String listDietCommandString \u003d \"list-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":149,"author":{"gitId":"nihalzp"},"content":" assertInstanceOf(ListDietCommand.class, parseCommand(listDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":150,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":151,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":152,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":153,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_missingCaloriesExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":154,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet protein/2 carb/3 fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":155,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":156,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":157,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":158,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":159,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_missingProteinExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":160,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 carb/3 fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":161,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":162,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":163,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":164,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":165,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_missingCarbExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":166,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":167,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":168,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":169,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":170,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":171,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_missingFatExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":172,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 carb/3\";","lastModifiedDate":"2023-10-15"},{"lineNumber":173,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":174,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":175,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":176,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":177,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_emptyCaloriesExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":178,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/ protein/2 carb/3 fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":179,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":180,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":181,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":182,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":183,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_emptyProteinExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":184,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/ carb/3 fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":185,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":186,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":187,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":188,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":189,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_emptyCarbExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":190,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 carb/ fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":191,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":192,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":193,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":194,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":195,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_emptyFatExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":196,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 carb/3 fat/\";","lastModifiedDate":"2023-10-15"},{"lineNumber":197,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":198,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":199,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":200,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":201,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_invalidCaloriesExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":202,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/abc protein/2 carb/3 fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":203,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":204,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":205,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":206,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":207,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_invalidProteinExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":208,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/abc carb/3 fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":209,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":210,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":211,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":212,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":213,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_invalidCarbExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":214,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 carb/abc fat/4\";","lastModifiedDate":"2023-10-15"},{"lineNumber":215,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":216,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":217,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":218,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":219,"author":{"gitId":"nihalzp"},"content":" void parseCommand_addDietCommand_invalidFatExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":220,"author":{"gitId":"nihalzp"},"content":" final String addDietCommandString \u003d \"add-diet calories/1 protein/2 carb/3 fat/abc\";","lastModifiedDate":"2023-10-15"},{"lineNumber":221,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(addDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":222,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":223,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":224,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":225,"author":{"gitId":"nihalzp"},"content":" void parseCommand_deleteDietCommand_invalidIndexExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":226,"author":{"gitId":"nihalzp"},"content":" final String deleteDietCommandString \u003d \"delete-diet abc\";","lastModifiedDate":"2023-10-15"},{"lineNumber":227,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(deleteDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":228,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":229,"author":{"gitId":"nihalzp"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":230,"author":{"gitId":"nihalzp"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":231,"author":{"gitId":"nihalzp"},"content":" void parseCommand_deleteDietCommand_emptyIndexExpectAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":232,"author":{"gitId":"nihalzp"},"content":" final String deleteDietCommandString \u003d \"delete-diet\";","lastModifiedDate":"2023-10-15"},{"lineNumber":233,"author":{"gitId":"nihalzp"},"content":" assertThrows(AthletiException.class, () -\u003e parseCommand(deleteDietCommandString));","lastModifiedDate":"2023-10-15"},{"lineNumber":234,"author":{"gitId":"nihalzp"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":235,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":236,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":237,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSet_oneValidGoal_oneGoalInList() {","lastModifiedDate":"2023-10-15"},{"lineNumber":238,"author":{"gitId":"yicheng-toh"},"content":" String oneValidGoalString \u003d \"calories/60\";","lastModifiedDate":"2023-10-15"},{"lineNumber":239,"author":{"gitId":"yicheng-toh"},"content":" assertDoesNotThrow(() -\u003e parseDietGoalSetEdit(oneValidGoalString));","lastModifiedDate":"2023-10-16"},{"lineNumber":240,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":241,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":242,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":243,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSet_oneValidOneInvalidGoal_throwAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":244,"author":{"gitId":"yicheng-toh"},"content":" String oneValidOneInvalidGoalString \u003d \"calories/60 protein/protine\";","lastModifiedDate":"2023-10-15"},{"lineNumber":245,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalSetEdit(oneValidOneInvalidGoalString));","lastModifiedDate":"2023-10-16"},{"lineNumber":246,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":247,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":248,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":249,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSet_zeroTargetValue_throwAthletiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":250,"author":{"gitId":"yicheng-toh"},"content":" String zeroTargetValueGoalString \u003d \"calories/0\";","lastModifiedDate":"2023-10-15"},{"lineNumber":251,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalSetEdit(zeroTargetValueGoalString));","lastModifiedDate":"2023-10-16"},{"lineNumber":252,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":253,"author":{"gitId":"yicheng-toh"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":254,"author":{"gitId":"yicheng-toh"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":255,"author":{"gitId":"yicheng-toh"},"content":" void parseDietGoalSet_oneInvalidGoal_throwAthlethiException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":256,"author":{"gitId":"yicheng-toh"},"content":" String invalidGoalString \u003d \"calories/caloreis protein/protein\";","lastModifiedDate":"2023-10-15"},{"lineNumber":257,"author":{"gitId":"yicheng-toh"},"content":" assertThrows(AthletiException.class, () -\u003e parseDietGoalSetEdit(invalidGoalString));","lastModifiedDate":"2023-10-16"},{"lineNumber":258,"author":{"gitId":"yicheng-toh"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":259,"author":{"gitId":"skylee03"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"skylee03":31,"DaDevChia":87,"yicheng-toh":27,"nihalzp":114}},{"path":"text-ui-test/runtest.bat","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@echo off","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"setlocal enableextensions","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"pushd %~dp0","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"cd ..","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"call gradlew clean shadowJar","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"cd build\\libs","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"for /f \"tokens\u003d*\" %%a in (","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u0027dir /b *.jar\u0027","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":") do (","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" set jarloc\u003d%%a","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"java -jar %jarloc% \u003c ..\\..\\text-ui-test\\input.txt \u003e ..\\..\\text-ui-test\\ACTUAL.TXT","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":"cd ..\\..\\text-ui-test","lastModifiedDate":"2020-05-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"skylee03"},"content":"FC /W ACTUAL.TXT EXPECTED.TXT \u003eNUL \u0026\u0026 ECHO Test passed! || Echo Test failed!","lastModifiedDate":"2023-10-21"}],"authorContributionMap":{"skylee03":1,"-":18}},{"path":"text-ui-test/runtest.sh","fileType":"other","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":"# change to script directory","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"cd \"${0%/*}\"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"cd ..","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"./gradlew clean shadowJar","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":"cd text-ui-test","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"java -jar $(find ../build/libs/ -mindepth 1 -print -quit) \u003c input.txt \u003e ACTUAL.TXT","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":"cp EXPECTED.TXT EXPECTED-UNIX.TXT","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"dos2unix EXPECTED-UNIX.TXT ACTUAL.TXT","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"skylee03"},"content":"diff -w EXPECTED-UNIX.TXT ACTUAL.TXT","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"-"},"content":"if [ $? -eq 0 ]","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"then","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" echo \"Test passed!\"","lastModifiedDate":"2020-05-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":" exit 0","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"else","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" echo \"Test failed!\"","lastModifiedDate":"2020-05-24"},{"lineNumber":22,"author":{"gitId":"-"},"content":" exit 1","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":"fi","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"skylee03":1,"-":22}}] diff --git a/AY2324S1-CS2113-T17-1_tp_master/commits.json b/AY2324S1-CS2113-T17-1_tp_master/commits.json index 6103bd3..1d56b7d 100644 --- a/AY2324S1-CS2113-T17-1_tp_master/commits.json +++ b/AY2324S1-CS2113-T17-1_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"skylee03":[{"date":"2023-10-05","commitResults":[{"hash":"0b24d95bb5dcdbe7f53c0dd57ecd3e991bca0fba","isMergeCommit":false,"messageTitle":"Update skylee03 in AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":7}}},{"hash":"8ad36b4ca9d2ccd786c5e20b5c8240bc2ca15211","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into skylee03-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"23829d9a0b09e12b0f8f162d5d87add4f6ab4a63","isMergeCommit":true,"messageTitle":"Merge pull request #4 from skylee03/skylee03-AboutUs","messageBody":"Update skylee03 in AboutUs","fileTypesAndContributionMap":{}}]},{"date":"2023-10-08","commitResults":[{"hash":"c3134ce83d36393de4d6cb68d6340f07ebd6b9b0","isMergeCommit":false,"messageTitle":"Add CLI interaction","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":253,"deletions":21},"other":{"insertions":2,"deletions":2}}},{"hash":"135bb1b04338c2e0253592c8342d81b54c82595a","isMergeCommit":false,"messageTitle":"Update build.gradle","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":2}}},{"hash":"0481e59c5747ab3d43fa6b51a3e7c7d864054ca5","isMergeCommit":false,"messageTitle":"Create packages/classes for commands and data","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":164,"deletions":5}}},{"hash":"8cb6c0a847e3eb76064ffce3ace232ec69d49699","isMergeCommit":false,"messageTitle":"Add ParserTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":40,"deletions":12}}}]},{"date":"2023-10-16","commitResults":[{"hash":"710297a46c87d88cf6d8adfe83c5b78db64d15f9","isMergeCommit":false,"messageTitle":"Use `AthletiException` class to handle all exceptions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":17},"test-code":{"insertions":3,"deletions":3}}},{"hash":"8f252f892e5a11a13fc316eb9297662c969c5c31","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into refactor-exception","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"065480e820ccd9cb6be632e7b564ee36cc2f936c","isMergeCommit":true,"messageTitle":"Merge pull request #41 from skylee03/refactor-exception","messageBody":"Use `AthletiException` class to handle all exceptions","fileTypesAndContributionMap":{}},{"hash":"2eb3e967083322cc11ef6500506c6aa6744f9e08","isMergeCommit":false,"messageTitle":"Use `assert` in `ui` package","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}}]},{"date":"2023-10-17","commitResults":[{"hash":"20d90df4a8c446e303b0c3c75d8ee267031a8eb3","isMergeCommit":false,"messageTitle":"Use `logging` in `AthletiCLI` class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":0}}},{"hash":"4e7f3667fbbb2847269403d46dcd42225835f259","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":2}}},{"hash":"1c7afe5447f87cdcb2bfb039cc520c089348ef34","isMergeCommit":false,"messageTitle":"Remove debug output","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"2f854b5605a94a156c6aecaa1c9e777e449a15bc","isMergeCommit":true,"messageTitle":"Merge pull request #44 from skylee03/assert-ui","messageBody":"Use `assert` and `logging`","fileTypesAndContributionMap":{}}]},{"date":"2023-10-21","commitResults":[{"hash":"5214c3b07fb99d09964e9560f954508e5e6e8fc2","isMergeCommit":false,"messageTitle":"Add help command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":132,"deletions":0}}},{"hash":"b84b80eacd7e3743198ed32c6ac92ee230a922fa","isMergeCommit":false,"messageTitle":"Update runtest to ignore trailing spaces","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":2}}},{"hash":"49ba6f0df297e185c7469ac5526aa011133e31e8","isMergeCommit":false,"messageTitle":"Update runtest.sh to make it compatible with MacOS","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"c81d5fb5e06414f18e5e3b2926d8f43d99d823cd","isMergeCommit":false,"messageTitle":"Set locale of DateTimeFormatter to English","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"0114bd9c4a5f135b16959e5b457ed7f0c53ed7a1","isMergeCommit":true,"messageTitle":"Merge pull request #78 from skylee03/set-locale","messageBody":"Set locale of DateTimeFormatter to English","fileTypesAndContributionMap":{}},{"hash":"8d15b73af3f636f95ca95466a39e3b9f55b38583","isMergeCommit":true,"messageTitle":"Merge pull request #77 from skylee03/help-command","messageBody":"Add `help` command","fileTypesAndContributionMap":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"848aa98b502c41aafc8c28bbf396547a31200de6","isMergeCommit":false,"messageTitle":"Add storage features","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":139,"deletions":19}}},{"hash":"79dced6990c7cd3edb33d705becfaa7030943dfc","isMergeCommit":false,"messageTitle":"Add help messages for save command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"51b1217df5232a93d66b1d0711c81fb9f51503ea","isMergeCommit":false,"messageTitle":"Update src/main/java/athleticli/commands/ByeCommand.java","messageBody":"Co-authored-by: Yi Cheng \u003c75836313+yicheng-toh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"11e07f26742dad96e7ab2d5401e90d6c36250ef5","isMergeCommit":false,"messageTitle":"Modify the extension of `PATH_SAVE`","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"1f1d356e443da63e06f4d38e5fab10696da75b49","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into storage","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"273f57174a24242f32de525503aedd6dc76aa477","isMergeCommit":false,"messageTitle":"Save data when the JVM begins its shutdown sequence","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":11}}},{"hash":"d4ff6c77512b078593d0721c1635c4704a35623d","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into storage","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7d8724f1da03d1767abcad57caf2757b1bc37fdc","isMergeCommit":true,"messageTitle":"Merge pull request #79 from skylee03/storage","messageBody":"Add storage features","fileTypesAndContributionMap":{}}]}],"DaDevChia":[{"date":"2023-10-05","commitResults":[{"hash":"0b6a61ab5f9e012eab2a34c0a65593eb3ee747db","isMergeCommit":false,"messageTitle":"Added profile information","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"0694bcffcee38aa324b0dedbaaf61fa8b89ad035","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into dylanChia-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9bed8b4b05c9f4ac170143e58c4c73d268e03d1b","isMergeCommit":true,"messageTitle":"Merge pull request #5 from DaDevChia/dylanChia-AboutUs","messageBody":"Added profile information","fileTypesAndContributionMap":{}}]},{"date":"2023-10-10","commitResults":[{"hash":"e31e4398411fe06ef751b8432a69c3d71b25c757","isMergeCommit":true,"messageTitle":"Merge pull request #8 from skylee03/cli-interaction","messageBody":"Add CLI interaction","fileTypesAndContributionMap":{}},{"hash":"914104a7efdfba71222a6f004d620cb49119934d","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AY2324S1-CS2113-T17-1:master","messageBody":"Master","fileTypesAndContributionMap":{}}]},{"date":"2023-10-12","commitResults":[{"hash":"bc77b66ec8241e85f841294349f30e9b9465178b","isMergeCommit":false,"messageTitle":"Implemented Sleep add, edit, delete, list","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":276,"deletions":8}}}]},{"date":"2023-10-14","commitResults":[{"hash":"46edcdbfd294c5013e0757a607889e71809482be","isMergeCommit":false,"messageTitle":"Added Junit test for sleep class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":20,"deletions":0}}},{"hash":"30613649314867940690602daa35f9c1e8035a45","isMergeCommit":false,"messageTitle":"Added junit test for AddSleepCommand class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":30,"deletions":0}}},{"hash":"f02ea1e04e1a11a4c440b6ebd92499d9f6aabafe","isMergeCommit":false,"messageTitle":"Added junit test for AddSleepCommand class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":41,"deletions":0}}},{"hash":"e335628314a2b34fdc8e888b4123aa841b7a165f","isMergeCommit":true,"messageTitle":"Merge remote master branch into branch-sleep","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"93d65605f87a62f40c372370935fb104f66a5771","isMergeCommit":false,"messageTitle":"Renamed all meal to diet class reference","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"119b279f86e540ae3cb4b7135023cd123a440bcc","isMergeCommit":false,"messageTitle":"Added junit tests for sleep commands in parser","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":29,"deletions":0}}},{"hash":"3daa08c864f2163c73bf65f2c77cee1c53bb0005","isMergeCommit":false,"messageTitle":"Added check for invalid index when deleting sleep","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"9f0b9866dbb061311413c28742ea40725839b51d","isMergeCommit":false,"messageTitle":"Added tests for delete add and list sleep commands","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":2},"test-code":{"insertions":79,"deletions":0}}},{"hash":"3cebb7864672cde7cb8da5f1ec04602c333ce7e9","isMergeCommit":false,"messageTitle":"Moved sleep test to correct directory","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"ca31bd932ae8ad595f649bc2c62ad5228c73a782","isMergeCommit":false,"messageTitle":"Removed unecessary imports from tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":11}}},{"hash":"3a803c14ec3b76f2662b2394eae5f4bacb3246c6","isMergeCommit":false,"messageTitle":"Added junit test for sleep edit command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":34,"deletions":0}}},{"hash":"51303b230c62fca9a6a626211baa7cb9017fac29","isMergeCommit":false,"messageTitle":"Fixed Checkstyle violations","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":30,"deletions":32},"test-code":{"insertions":3,"deletions":3}}}]},{"date":"2023-10-15","commitResults":[{"hash":"eb4541cc26c4cf8d17caaf64796abc08498cfce5","isMergeCommit":false,"messageTitle":"Fixed space formatting","messageBody":"Co-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"44ecbf846f21e675e5ec5eec5be301d5acc06aa1","isMergeCommit":false,"messageTitle":"Apply formatting suggestions from code review","messageBody":"Co-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":15},"test-code":{"insertions":0,"deletions":10}}},{"hash":"a9024e7352c2f21ceb932ed7f88be0cf295225eb","isMergeCommit":true,"messageTitle":"Merge pull request #21 from DaDevChia/branch-sleep","messageBody":"Added sleep tracking functionality, along with list, add, edit, delete methods ","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"500b2e0c0475943eef1256c34867d7d50def75fa","isMergeCommit":false,"messageTitle":"Added javadocs for all sleep features","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":84,"deletions":6}}}]},{"date":"2023-10-17","commitResults":[{"hash":"8f210386deab792857278cb869d6e7dbe81e501e","isMergeCommit":false,"messageTitle":"Implemented LocalDateTime for sleep, fixes #22","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":65,"deletions":27}}},{"hash":"0ee91741c46cd5d09fdf8882c0c6a594c57d7176","isMergeCommit":false,"messageTitle":"Implemented setter methods for data object","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":1}}},{"hash":"2e75378f6fa4f6234a6213b8b9e4e63112ab93a4","isMergeCommit":false,"messageTitle":"Reworked all Junit tests for sleep, fixes #23","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":246,"deletions":104}}},{"hash":"98439a6061cc53595d9b4bcf49dc20ece2e4fdd9","isMergeCommit":false,"messageTitle":"Added and updated Junit tests for sleep parser","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":20,"deletions":2}}},{"hash":"e8a479ebefd85df7f1e5fddd50d57329a538bf2c","isMergeCommit":false,"messageTitle":"Implement Message class for Sleep #24","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":54,"deletions":37},"test-code":{"insertions":3,"deletions":4}}},{"hash":"0966da05332d6d9884a12762f1acca3e8b1cc608","isMergeCommit":false,"messageTitle":"Updated userguide for sleep features #25","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":77,"deletions":0}}},{"hash":"e14aa195ac61c0d1a6904bbd5ce0e58e9eeea98d","isMergeCommit":false,"messageTitle":"Implemeted gradle checkstyle suggestions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":15},"test-code":{"insertions":8,"deletions":4}}},{"hash":"d5233b0465955498343b428ca27862b770758e3e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp into branch-sleep-improvements","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"887ad3d18dea4c1a1eb52f3d136e5c5b77410ff2","isMergeCommit":false,"messageTitle":"Applied spacing suggestions from code review","messageBody":"Added spacing to javadocs as per coding standard\n\nCo-authored-by: nihalzp \u003c81457724+nihalzp@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"0490d9a8a964b89afbc27ff19ccd712fdb8fdfd8","isMergeCommit":false,"messageTitle":"Added exceptions handling for edit / delete sleep","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":10},"test-code":{"insertions":14,"deletions":15}}},{"hash":"ff52e5bb4276c795953d232fda4948bb90a57b90","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-sleep-improvements\u0027 of https://github.com/DaDevChia/tp into branch-sleep-improvements","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"210ec4fe5da9d884e44c7ffebfb4ccfd30b037f2","isMergeCommit":true,"messageTitle":"Merge pull request #51 from DaDevChia/branch-sleep-improvements","messageBody":"Added improvements to sleep feature","fileTypesAndContributionMap":{}}]}],"AlWo223":[{"date":"2023-10-05","commitResults":[{"hash":"d1830be8fa3c9af05ee0c009b1e7e57fefed93d8","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"cae7a967c15901f3c6c233cc6d5d43d26b914577","isMergeCommit":false,"messageTitle":"test forking","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"446cc7162d1d868e5a3050a324ec45953fc26a3a","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AlWo223/devalex","messageBody":"test forking","fileTypesAndContributionMap":{}}]},{"date":"2023-10-10","commitResults":[{"hash":"024c68352be321cb9ceb2f7df72447ae27259dec","isMergeCommit":false,"messageTitle":"Add activity parent class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":62,"deletions":1}}}]},{"date":"2023-10-11","commitResults":[{"hash":"40bd286165eebade7f4426821383a27b08302d21","isMergeCommit":false,"messageTitle":"add run, swim and cycle as activity childs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":60,"deletions":24}}}]},{"date":"2023-10-12","commitResults":[{"hash":"9c6c3ed9e8a77f718996d99605e5ab8393d82f15","isMergeCommit":false,"messageTitle":"Enable user to add run","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":124,"deletions":2}}},{"hash":"06f3e25556e6eb2fbd58459542d9802421b01cdf","isMergeCommit":false,"messageTitle":"Simplify add run to add activity","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":16}}},{"hash":"d0949fc7e73bafcf00af8e84541620da5da2b53d","isMergeCommit":false,"messageTitle":"Provide JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":63,"deletions":1},"test-code":{"insertions":4,"deletions":0}}},{"hash":"b6b92040342ba95378e7a324ff3e28998dfb633f","isMergeCommit":false,"messageTitle":"Implement adding of specific activities swim, cycle and run","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":87,"deletions":19}}},{"hash":"af6cc67a94a9a5362066c4ea936bfd8d19d70ef8","isMergeCommit":false,"messageTitle":"Generate JUnit Tests for different types of activities","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":53,"deletions":24},"test-code":{"insertions":146,"deletions":1}}},{"hash":"22dddf5c7a3a6aab26c295f9c95e46fff7788447","isMergeCommit":false,"messageTitle":"Implement activity parsing","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":74,"deletions":0}}}]},{"date":"2023-10-13","commitResults":[{"hash":"f1a10d37df14ad9eb5360e13fa1d55bf70c3c9d9","isMergeCommit":false,"messageTitle":"Enable parsing of other sport activities","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":202,"deletions":191}}},{"hash":"41a2d7f82fe734fdcc553083763d2f915b68dc88","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":23},"test-code":{"insertions":25,"deletions":22}}},{"hash":"2498fd588fccd610a3ec3c4241f14d417611a689","isMergeCommit":false,"messageTitle":"Place overload methods next to each other","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":16}}},{"hash":"21dfeec67a371f0dccb96b43391c2081a08d9392","isMergeCommit":false,"messageTitle":"Add single line representation of activities","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":76,"deletions":10},"test-code":{"insertions":82,"deletions":30}}},{"hash":"a3e611afddcbc54beb94540e83bc196655f7fdbb","isMergeCommit":false,"messageTitle":"Describe how to add activities in UserGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":40,"deletions":5}}},{"hash":"d18183d67ecfdedc2b15a956a3717447418d735c","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":33},"test-code":{"insertions":10,"deletions":12}}},{"hash":"cb06421b762e002f0014f0a60ec324ebad344cf7","isMergeCommit":false,"messageTitle":"Resolve minor coding standard violations","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":2},"test-code":{"insertions":5,"deletions":4}}},{"hash":"5efb24cc5a01130909e02b92c26e8ae7311a0787","isMergeCommit":false,"messageTitle":"Update src/main/java/athleticli/data/activity/Cycle.java","messageBody":"Co-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"76d67353a828cda2fd27cb32d129ff98ede1c4e6","isMergeCommit":false,"messageTitle":"Update docs/README.md","messageBody":"Co-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":7}}},{"hash":"6ca1d562827ca47c660144ab641fce02869449e4","isMergeCommit":true,"messageTitle":"Merge pull request #19 from AlWo223/activity","messageBody":"Add Activity","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"212799a32b8e92686294704025df23ae828ddad1","isMergeCommit":false,"messageTitle":"Add delete-activity command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":67,"deletions":2}}},{"hash":"f9e927a4e48c4a06c49492e359ef10fc2c08ceda","isMergeCommit":false,"messageTitle":"Remove magic numbers in activity parsing","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":44,"deletions":23}}},{"hash":"fef8602baa76f930bc9a2d94a38a0a26274f3ccb","isMergeCommit":false,"messageTitle":"Add delete-activity instructions in UserGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":18,"deletions":0}}}]},{"date":"2023-10-17","commitResults":[{"hash":"9fef12d5fe197162e1054e2d0fa70c5d09ff0a61","isMergeCommit":false,"messageTitle":"Add list-activity command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":63,"deletions":7}}},{"hash":"bbafeb117839aa2c8046e0566ae84256fa1bb2dd","isMergeCommit":false,"messageTitle":"Enable detailed view of activities","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":142,"deletions":17}}},{"hash":"a95ebe424439167e121ce27bb69140bb45adf76e","isMergeCommit":false,"messageTitle":"change flag parameter of list-activity command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"640898ee0a68ee886104e51336451781857c2330","isMergeCommit":false,"messageTitle":"Describe list-activity command in UserGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":17,"deletions":0}}},{"hash":"ee39eaa464bbfd78829588b8903c4d78848eb924","isMergeCommit":false,"messageTitle":"Add edit command for activities","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":98,"deletions":1}}},{"hash":"d06fe24f8ecab07eb82e821f5261027535368134","isMergeCommit":false,"messageTitle":"Update UserGuide with instruction for editing activities","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":22,"deletions":2}}},{"hash":"3902b0fdc6bfba8d5410dd371a16e912bf2eba43","isMergeCommit":false,"messageTitle":"Enable logging of activity editing process","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"56c4878e53519e4d18bc2f8f8637c93c89fd8615","isMergeCommit":false,"messageTitle":"Add assertion check to edit command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}}]},{"date":"2023-10-18","commitResults":[{"hash":"a3424ee0a5873c1627dae1a67b53a80a80ef0cf0","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":30},"test-code":{"insertions":4,"deletions":6}}},{"hash":"17b7716904ee54cc8059ee038a591ef8ae2f8a10","isMergeCommit":true,"messageTitle":"Merge master branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9444463cdb497bb76c542a5873c8fef01c8c65dd","isMergeCommit":false,"messageTitle":"Add some JavaDoc comments to Parser code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":30,"deletions":0}}},{"hash":"199697e0c7d231bde90cda121530dfc22b080fca","isMergeCommit":true,"messageTitle":"Improve code quality and readability","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bdda8c8d199d157e898e00485c085534f45ace0b","isMergeCommit":true,"messageTitle":"Merge pull request #59 from AlWo223/list","messageBody":"Implement commands for editing, deleting, viewing activities","fileTypesAndContributionMap":{}}]}],"yicheng-toh":[{"date":"2023-10-05","commitResults":[{"hash":"6ef5fd0adac3dbc719b13dbf2b2ab713ac1be1ba","isMergeCommit":false,"messageTitle":"Add profile for yi cheng","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":5}}},{"hash":"9bd5f18d45380e4064736e7e2d522e4bb53d9eb2","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"# Conflicts:\n#\tdocs/AboutUs.md\n","fileTypesAndContributionMap":{}},{"hash":"57a806539f9f12400c7873eb0848e0a808657e68","isMergeCommit":true,"messageTitle":"Merge pull request #2 from yicheng-toh/master","messageBody":"Add profile for yi cheng","fileTypesAndContributionMap":{}}]},{"date":"2023-10-09","commitResults":[{"hash":"00aa40a7cd4f49250b89e8da6e405912972f4f99","isMergeCommit":false,"messageTitle":"Adjust the format of the table to resolve warning from intellij","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"9db4478dbe4192b8579a7f29fb22b9c8e3ee12af","isMergeCommit":true,"messageTitle":"Merge pull request #13 from yicheng-toh/documents","messageBody":"Edit table format for AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-10","commitResults":[{"hash":"834e1ea90ff1c97a9b1cbaa7e4e8fb4d7abcc14b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a4d91b2113c0354343357ff8e7e7726363da2a1d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5b01105df5ebb31111aad46bddda02776f17e218","isMergeCommit":false,"messageTitle":"Add Diet Goal Class and Diet Goal List Class","messageBody":"Fixes #10\n","fileTypesAndContributionMap":{"functional-code":{"insertions":82,"deletions":0},"test-code":{"insertions":102,"deletions":0}}},{"hash":"a6dc7e822f05482d9be899688800bc6c86e65a25","isMergeCommit":false,"messageTitle":"Add delete functionality to DietGoalList","messageBody":"Fixes #11\n","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0},"test-code":{"insertions":17,"deletions":2}}},{"hash":"75db1b825ac2cf0540f12079d025060c6bbfe19b","isMergeCommit":false,"messageTitle":"Revert \"Add delete functionality to DietGoalList\"","messageBody":"This reverts commit a6dc7e822f05482d9be899688800bc6c86e65a25.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4},"test-code":{"insertions":2,"deletions":17}}},{"hash":"833207c30435d8f92a6ee8b459efc0337403084e","isMergeCommit":false,"messageTitle":"Improve code quality to pass build test","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":16,"deletions":14}}}]},{"date":"2023-10-11","commitResults":[{"hash":"e485d117db0d7ff75bd58853df24311d78160ddc","isMergeCommit":false,"messageTitle":"Remove redundant newlines","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":7},"test-code":{"insertions":0,"deletions":5}}},{"hash":"cf8a65f00e5865381818da68829aee12cb12788f","isMergeCommit":false,"messageTitle":"Revert \"Remove redundant newlines\"","messageBody":"This reverts commit e485d117db0d7ff75bd58853df24311d78160ddc.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":0},"test-code":{"insertions":5,"deletions":0}}},{"hash":"5fe5f02580038a546be18b69df69a042fd547467","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"Remove redundant newlines as suggested by skylee03\n\nCo-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4},"test-code":{"insertions":0,"deletions":4}}},{"hash":"35b51d3c961f239a69d6a7e2622813eb9fd764b1","isMergeCommit":true,"messageTitle":"Merge pull request #17 from yicheng-toh/goals","messageBody":"Add DietGoal Class and DietGoalList Class","fileTypesAndContributionMap":{}},{"hash":"f5ad0687c40da73186ba4e69b5915d22f4442099","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3bf1545451d3c35c883dee34f81203d2838e8d71","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d397c52103037b3417e7cfa08b4d3b3897030d55","isMergeCommit":false,"messageTitle":"Add delete function to DietGoalList Fixes #11","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0},"test-code":{"insertions":17,"deletions":0}}},{"hash":"4a11acbfc52340fe1ab7fbf087a0ff27c5c0bb74","isMergeCommit":false,"messageTitle":"Add edit feature for DietGoal","messageBody":"Fixes #12\n","fileTypesAndContributionMap":{"functional-code":{"insertions":17,"deletions":0},"test-code":{"insertions":23,"deletions":0}}},{"hash":"a0f11a58c10e27d786fd91577fceb7fbd7c5692f","isMergeCommit":false,"messageTitle":"Add printing to DietGoalList","messageBody":"Fixes #9\n","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0},"test-code":{"insertions":8,"deletions":0}}}]},{"date":"2023-10-12","commitResults":[{"hash":"a39f610494cda3ed34f6101ab724f15467b13ac9","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"Convert words to American spelling in accordance to code quality standard suggested by skylee03\n\nCo-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":4}}},{"hash":"7b4b871b1b5cd422c23aa3141172e92cc332358e","isMergeCommit":false,"messageTitle":"Edit variable name in accordance to code quality standards","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":6,"deletions":6}}},{"hash":"40a393f46f1e028e0b0011bc7766631b2f53f5c3","isMergeCommit":false,"messageTitle":"Revert \"Edit variable name in accordance to code quality standards\"","messageBody":"This reverts commit 7b4b871b1b5cd422c23aa3141172e92cc332358e.\n","fileTypesAndContributionMap":{"test-code":{"insertions":6,"deletions":6}}},{"hash":"be38b2183bee45d85cc5db3ac78e038bb68c4bb5","isMergeCommit":false,"messageTitle":"Edit variable name in accordance to code quality standard","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":6,"deletions":6}}},{"hash":"fbac222d5e7db32a386c4188c149b87070405c32","isMergeCommit":true,"messageTitle":"Merge branch \u0027goals\u0027 of https://github.com/yicheng-toh/tp into v1.0","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"464bd877f0fa5f195cd1c55468681926140a936e","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"Co-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":5}}},{"hash":"7bb7071d03d906fb653225ec11f8fdc5d2c015b7","isMergeCommit":true,"messageTitle":"Merge pull request #18 from yicheng-toh/goals","messageBody":"Edit, List and Delete feature added to DietGoalList","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"210ec3b65836832798397065349dd6b6125b04a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7fc15d856584c273d1ddd02ef20e6fc945c0b877","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6e6acaa0b85747d95506e6f167879f07be6c3463","isMergeCommit":false,"messageTitle":"Add set diet goal command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":147,"deletions":16}}},{"hash":"1819c00c7b91e021c5a2f6835fa77ef2171e9391","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f260c0f6c97f51cd7d8f08a8088c112738d98b35","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into goals","messageBody":"# Conflicts:\n#\tsrc/main/java/athleticli/ui/CommandName.java\n#\tsrc/main/java/athleticli/ui/Message.java\n#\tsrc/main/java/athleticli/ui/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"265a4ceda6601735b2a77ef0267b41f97882f52c","isMergeCommit":false,"messageTitle":"Add javadoc comment for set new diet goal command and related functions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":3}}},{"hash":"b92037b2a0b42ad19711a90845b07cdd3362e004","isMergeCommit":false,"messageTitle":"Add tests for set diet goals","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":8},"test-code":{"insertions":41,"deletions":0}}},{"hash":"9084bae7158b73dfbb3f0a619f6aebe369b56538","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}}]},{"date":"2023-10-16","commitResults":[{"hash":"07f523f4003ceae8db86a2d1b17802b2e8ac81c1","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"Co-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":7},"test-code":{"insertions":1,"deletions":1}}},{"hash":"8de8cc401abb5d08d84b2bb26252515296bf1f76","isMergeCommit":false,"messageTitle":"Improve code quality as suggested by skylee","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":9},"test-code":{"insertions":7,"deletions":10}}},{"hash":"53dbb39f2e5973f2db0ba853bd36857f40950cf4","isMergeCommit":true,"messageTitle":"Merge branch \u0027goals\u0027 of https://github.com/yicheng-toh/tp into goals","messageBody":"# Conflicts:\n#\tsrc/test/java/athleticli/ui/ParserTest.java\n","fileTypesAndContributionMap":{}},{"hash":"5497a736bb9ba3e81465ba6cd402dd6e440488a3","isMergeCommit":false,"messageTitle":"Remove bugs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"6c48bb7583eb068f7da773feb5f87971a8a7246e","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"from dylan and skylee\n\nCo-authored-by: DaDevChia \u003c88506363+DaDevChia@users.noreply.github.com\u003e\nCo-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":26}}},{"hash":"f9402e37c285cc3353c372f24a72a921c52e9dff","isMergeCommit":true,"messageTitle":"Merge branch \u0027goals\u0027 of https://github.com/yicheng-toh/tp into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"860d0f714dc99262be545f5fcdca7b8b5a7257d5","isMergeCommit":false,"messageTitle":"Remove bugs generated from review","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":22}}},{"hash":"92a226e49532f19b23d888ac1819aaae9db6e453","isMergeCommit":true,"messageTitle":"Merge pull request #35 from yicheng-toh/goals","messageBody":"Add logic for setting diet goals","fileTypesAndContributionMap":{}},{"hash":"aad918a5a820574a24ac760f5e96adc0bd96eaef","isMergeCommit":false,"messageTitle":"Add set diet goal tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":78,"deletions":0}}},{"hash":"8ca8855c2425074d46c5d30c3f295e2eb2b11755","isMergeCommit":false,"messageTitle":"Add edit feature for diet goals","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":59,"deletions":5},"test-code":{"insertions":87,"deletions":1}}},{"hash":"14fa302c8df0c16f18f22083f998f63e76d21804","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fd2680282a51c3b9c969b2701d259479d0fdd064","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"42ef388db1c0eb831020d8ecf8f7bb7cea34004d","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":2}}},{"hash":"9e01b4dd470e2d983b1dcc1c19c6fcbf6977720b","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"test-code":{"insertions":4,"deletions":2}}},{"hash":"d6275c5592af89a77ab748f575a41fafe9df4d81","isMergeCommit":false,"messageTitle":"Update EditDietGoalCommandTest.java","messageBody":"Change assert (false) to fail (e)","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":3}}},{"hash":"74de6f6f59717b4cbff9c03279c74562f4550fb9","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"Co-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"e79340716e4d73ac351d269ef36416455620b8a4","isMergeCommit":false,"messageTitle":"Update SetDietGoalCommandTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":3}}},{"hash":"5120ea5fc744ce8ccd56029ae6b4e62d2fa39720","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":3}}},{"hash":"325a3842beb9c49bbd1abcd5e58f0db615f1d475","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":3}}},{"hash":"4b8e30379d7bfac5327aa2e8a689f81e3586dd4a","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/goals\u0027 into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"38165ec30b062bbee2c2182885be2fc9670b6404","isMergeCommit":false,"messageTitle":"Add list functionality for goals","messageBody":"Fixes #36\n","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":12},"test-code":{"insertions":6,"deletions":4}}},{"hash":"560c41fa157e1c13d3422ba8d005839182f3a529","isMergeCommit":false,"messageTitle":"Revert \"Add list functionality for goals\"","messageBody":"This reverts commit 38165ec30b062bbee2c2182885be2fc9670b6404.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":21},"test-code":{"insertions":4,"deletions":6}}},{"hash":"007f353277c407c23e42689c66846d94f357d711","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Add list functionality for goals\"\"","messageBody":"This reverts commit 560c41fa157e1c13d3422ba8d005839182f3a529.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":12},"test-code":{"insertions":6,"deletions":4}}},{"hash":"bdb4c7ef4c849129a02e24708f4ea7010d658184","isMergeCommit":false,"messageTitle":"Improve code quality as recommended by gradle check","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"3df9060f6f3b4bede451bf9673c60126c2c0d42f","isMergeCommit":false,"messageTitle":"Add list feature and test for diet goals","messageBody":"Fixes #36\n","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":0},"test-code":{"insertions":49,"deletions":0}}},{"hash":"f0c393023640b78601c91c27f90e64fb1be69534","isMergeCommit":true,"messageTitle":"Merge pull request #39 from yicheng-toh/goals","messageBody":"Add logic for edit and list feature for diet goals","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"55bfdce7ca33e0c2d0d7150be776808b39d2ca69","isMergeCommit":false,"messageTitle":"Add delete feature to diet goals","messageBody":"Fixes #47\n","fileTypesAndContributionMap":{"functional-code":{"insertions":56,"deletions":8},"test-code":{"insertions":50,"deletions":0}}},{"hash":"475f260240108ff3e67de71e89b62a50d3e6fc25","isMergeCommit":false,"messageTitle":"Add javaDoc for delete diet goal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":4}}},{"hash":"21c9700f10693d22dee1ca6b3327feaaa48847cd","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"86894b29e040a086c478b5ba17922387c6c27336","isMergeCommit":false,"messageTitle":"Remove bugs pointed out by gradle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":2}}},{"hash":"b97bfd626d44cdc53e734cff74a58ff6650bf2fa","isMergeCommit":false,"messageTitle":"Address bugs pointed by gradle check","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":2}}},{"hash":"d73c39a8cc37866eb2e25f3b63db45c692284ee5","isMergeCommit":false,"messageTitle":"Address bugs pointed out by gradle","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":2}}},{"hash":"c4990ef5c5edfe5288cdbf7bf2d0f286aa0dd961","isMergeCommit":false,"messageTitle":"Add assertion and logging for delete diet goal command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":0}}},{"hash":"8e8d5eb84a2dbbcfa3d1cd2f66d052ddf5fdcd7c","isMergeCommit":false,"messageTitle":"Correct the logic for the use of assert for delete diet goal command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"0626b32e5e8a590d0263836b1fed44e4c0eb0292","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"as suggested by skylee\n\nCo-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"135345773cb5f1df502c0d56bce68f51586e92fc","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"As suggested by skylee\n\nCo-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"de1897900d894a13f7db59b6daf6ea3081ef3dda","isMergeCommit":false,"messageTitle":"Add logger manager as suggested from review","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":1}}},{"hash":"e8ac4eeafc3f90b4831c5e8d6619408afc83318a","isMergeCommit":true,"messageTitle":"Merge branch \u0027goals\u0027 of https://github.com/yicheng-toh/tp into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fe7ba04b1ef4956261e8846d72ad6b3311ed6ea1","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"89accd50f5d41aec4b2b736ba4a307a6c9cdbccc","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into goals","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"c80e15d1671c5a2df29bcce43f8f50b71959368d","isMergeCommit":true,"messageTitle":"Merge pull request #48 from yicheng-toh/goals","messageBody":"Add logic to delete feature for diet goals","fileTypesAndContributionMap":{}},{"hash":"5b8de0f5491f57d04390013b749cfd7de581539e","isMergeCommit":false,"messageTitle":"Remove small bugs for diet goals parser and UI","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"b7517f37d328db94e3fea66f6a79b1f89e6306f1","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"04fa3b597b79559670080a0adacabf5e70830e9d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"097eb979c0f4b6e8a516a3305d12ff79ada4cdbc","isMergeCommit":false,"messageTitle":"Edit tests to suit change in diet goal UI","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":4}}},{"hash":"a1d40b4527fa202c0f0c512e745f00688c4c2156","isMergeCommit":true,"messageTitle":"Merge pull request #60 from yicheng-toh/goals","messageBody":"Resolve UI bugs for diet goals","fileTypesAndContributionMap":{}},{"hash":"6b6615695e8efb333c505354cb0afd26b8a15c58","isMergeCommit":false,"messageTitle":"Add user guide for diet goals","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":133,"deletions":0}}},{"hash":"0d40e04e993615928bad76e6d9cb141a4950c1d1","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"15c1ef7c78934369dff8add9d6d205a5bca275cc","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cfcf09fcc76cd212521658db26e837efbae18b99","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"Standardisation of nutrients name.\n\nCo-authored-by: nihalzp \u003c81457724+nihalzp@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}}]},{"date":"2023-10-22","commitResults":[{"hash":"f3952eacf1f02bde21661454462f27977da36a0e","isMergeCommit":true,"messageTitle":"Merge pull request #67 from yicheng-toh/goals","messageBody":"Add user guide for diet goals","fileTypesAndContributionMap":{}},{"hash":"c3cf1d210ffb57e8afd4f4410734128dcfa1eaad","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2cedf33acacb6375a8eb96318a82e9858c0e4d14","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"148527f78ce0d1854d51ceafb69c1cca1c544f08","isMergeCommit":false,"messageTitle":"Enable assertions when running AthletiCLI","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":0}}},{"hash":"4317cc604503258b97ab92e712a4a93a693295a1","isMergeCommit":false,"messageTitle":"Resolve bugs arising from set and edit diet goal command","messageBody":"Fixes #52, #53\n","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":1}}},{"hash":"3ff13bdb978ea8eb77d520c26c3b8ffdae2379d0","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"as suggested by skylee\n\nCo-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"94d3e74d658af2c79e0f1efafac1e2767585bbcc","isMergeCommit":true,"messageTitle":"Merge pull request #81 from yicheng-toh/v2.0","messageBody":"Bug fixes for diet goals","fileTypesAndContributionMap":{}},{"hash":"91b84f18b59ea71ce90fca62ecce202043fe1827","isMergeCommit":false,"messageTitle":"Add nutrient verifier class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":30,"deletions":12},"test-code":{"insertions":18,"deletions":13}}},{"hash":"bde1fc1aa20fe496200a5b981f495294496cf17b","isMergeCommit":true,"messageTitle":"Merge branch \u0027v2.0\u0027 of https://github.com/yicheng-toh/tp into v2.0","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e8b121a47571b5876785a3e5ec61e78e2de1d3c6","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"564734d174060980d564fa1db7170d0b1a607503","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into v2.0","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e93bd0a55ed69f0a04ac1fdca0f2598197053543","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"as suggested by skylee\n\nCo-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":6}}},{"hash":"4390ac41677bf685e92ec91c085328f1e56b4f90","isMergeCommit":true,"messageTitle":"Merge branch \u0027v2.0\u0027 of https://github.com/yicheng-toh/tp into v2.0","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8da238ac5424b33ab2fed7e24815e260a3b62f79","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"a1261976be0afd2475931767edf5977cfc9ef876","isMergeCommit":true,"messageTitle":"Merge pull request #83 from yicheng-toh/v2.0","messageBody":"Add nutrient verifier class ","fileTypesAndContributionMap":{}}]}],"nihalzp":[{"date":"2023-10-05","commitResults":[{"hash":"5333d4cf1c8a9b0ea1a9ec084892c14dea7d53b2","isMergeCommit":false,"messageTitle":"Add individual info","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"a705a999b30431c68e39f5b0167f9b66b89debaf","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into nihalzp-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ca99d34683f1a8b4ffdca5fa6dbfdf33eb4e6afb","isMergeCommit":true,"messageTitle":"Merge pull request #3 from nihalzp/nihalzp-AboutUs","messageBody":"Add Individual Info - nihalzp","fileTypesAndContributionMap":{}}]},{"date":"2023-10-13","commitResults":[{"hash":"88c9014401be33db3f1415d271d1e6abc593324c","isMergeCommit":false,"messageTitle":"Relocate diet goals files","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":95,"deletions":108}}}]},{"date":"2023-10-14","commitResults":[{"hash":"c977c9aed16f59a17ccb9512d30c061de27a153a","isMergeCommit":false,"messageTitle":"Use ArrayList inheritance for DietGoalList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":23}}},{"hash":"020e4dbefe29062a29b5f8e2eb7e86e20daa3f11","isMergeCommit":false,"messageTitle":"Add JavaDoc comments for diet goal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":63,"deletions":5}}},{"hash":"d8ff94defc829ff2c17be79015165643874ae29d","isMergeCommit":false,"messageTitle":"Use diet instead of meal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3},"other":{"insertions":2,"deletions":2}}},{"hash":"73b7b8ab849eafc755f1903712899e7559f9a8db","isMergeCommit":false,"messageTitle":"Update diet goals test paths","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":22,"deletions":23}}},{"hash":"403cd565a953c696900f240c4c3d250dc81b0aff","isMergeCommit":false,"messageTitle":"Rename meals to diets in Data class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"ead04ae4847fba3c551ac2545117e7225fc7a7a0","isMergeCommit":false,"messageTitle":"Implement Diet class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":104,"deletions":0}}},{"hash":"750a58d6d163985c90f67dae37df9bf6ebcb3e60","isMergeCommit":false,"messageTitle":"Update doc string in diet goal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":1}}},{"hash":"f48538ce055185165435ec50881e37e26220e28b","isMergeCommit":false,"messageTitle":"Implement DietList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":0}}},{"hash":"f9175487993b5ec115a2afa01d38d319e9a86cee","isMergeCommit":false,"messageTitle":"Add DietTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":69,"deletions":0}}},{"hash":"bd3307495eb8061d5b98192d99304d969ad94548","isMergeCommit":false,"messageTitle":"Add DietListTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":97,"deletions":0}}},{"hash":"41f96d52d3dd4b7f0319f83559ca6b09a27929e5","isMergeCommit":false,"messageTitle":"Refactor DietGoalListTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":13,"deletions":14}}},{"hash":"da06f350e71926f9a0ce37d2a7f6701e5ae45f18","isMergeCommit":false,"messageTitle":"End file with new line","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"942346561f3ee347e60d3d95ed802307cdc462f2","isMergeCommit":false,"messageTitle":"Simplify logic in DietGoal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":5}}},{"hash":"24faa7a7468bfc3c3cc48ecfec34c6716c9da92f","isMergeCommit":false,"messageTitle":"Remove redundant blank lines","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":3}}},{"hash":"308d4471b8aaf54fdf59de6692b67e8a2a9e2c17","isMergeCommit":true,"messageTitle":"Merge pull request #20 from nihalzp/diet","messageBody":"Add and Refactor Diet","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"f019f39e5bfa0166876bc7e860a08c729d4911be","isMergeCommit":false,"messageTitle":"Rename meal to diet","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":12}}},{"hash":"6024bdace6ecb11f50c0871bd9a4b3682a83057a","isMergeCommit":false,"messageTitle":"Add AddDietCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":44,"deletions":0}}},{"hash":"a5b6a6729ae36ee4aca74da6255acd9e24a33126","isMergeCommit":false,"messageTitle":"Add DeleteDietCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":44,"deletions":0}}},{"hash":"53b2e8767c47560746212606d5eedc92453abe44","isMergeCommit":false,"messageTitle":"Add ListDietCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":0}}},{"hash":"52fcad706d32a863171d058b0cb5231045833d4b","isMergeCommit":false,"messageTitle":"Add new line in diet and diet goal list toString","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"f0e98e4485fa746bc0a6fd97de9a427f5e962f80","isMergeCommit":false,"messageTitle":"Add diet command names","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":1}}},{"hash":"ec94df1485d57806adf02878b43a045c73efd94c","isMergeCommit":false,"messageTitle":"Add diet specific message strings","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":53,"deletions":15}}},{"hash":"c5b661267550c84a842d366f967a635e8942f7ea","isMergeCommit":false,"messageTitle":"Implement parsers for diet","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":217,"deletions":27}}},{"hash":"1b744ec76329f10942f730964626ba261a75a73c","isMergeCommit":false,"messageTitle":"Add tests for AddDietCommand","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":39,"deletions":0}}},{"hash":"8741c43909a7d7bb3fe8996cdcf9aa800369abf3","isMergeCommit":false,"messageTitle":"Add tests for DeleteDietCommand","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":53,"deletions":0}}},{"hash":"3807da90bac12694e9cd92296769b232f3add879","isMergeCommit":false,"messageTitle":"Add tests for ListDietCommand","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":39,"deletions":0}}},{"hash":"ed9e42c52a404ed0352e1c628b7f67a2f30e5005","isMergeCommit":false,"messageTitle":"Update tests for DietList","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":2}}},{"hash":"bd0136d0adfd32f2a41c64317c3bc71838387800","isMergeCommit":false,"messageTitle":"Add parser tests for diet","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":113,"deletions":10}}},{"hash":"59c9075387f54f1f3f4f6c63f7642bc5e5a162c3","isMergeCommit":false,"messageTitle":"Add diet guide in docs/readme","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":42,"deletions":1}}},{"hash":"14e3ee42cc76c89d4bc0798b127a4014cb78553a","isMergeCommit":false,"messageTitle":"Delete trailing space","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"3c39bbc0af962d145c718b68c3fcbcfabbb88688","isMergeCommit":false,"messageTitle":"Fix JavaDoc comments indentation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":16}}},{"hash":"fd90dd4a778d3fb1d85d7b10df36a48cd23a2fa6","isMergeCommit":false,"messageTitle":"Rename unit test func names","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":17,"deletions":17}}},{"hash":"c4d473794e6bdd31901379ef755f369fbb5e4c66","isMergeCommit":false,"messageTitle":"Fix array initialization indentation","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":3}}},{"hash":"8221d356f374da5947b48eb9f554b0792dbd8c02","isMergeCommit":false,"messageTitle":"Fix formatting issue in readme","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":26,"deletions":9}}},{"hash":"4d38e16e4263892d35bfc181789cb6d6c1155054","isMergeCommit":false,"messageTitle":"Refactor delete diet command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"5e73492dc594864ff26e59d2383f52f5ee46ab4d","isMergeCommit":true,"messageTitle":"Merge pull request #31 from nihalzp/diet-parser","messageBody":"Diet parser","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"8c8189cec6c3badcb1166699f4393be4585477cd","isMergeCommit":false,"messageTitle":"Fix diet commands and formatting","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":36,"deletions":26}}},{"hash":"582f99799f073c326bef887656e215eb02fb78d9","isMergeCommit":false,"messageTitle":"Fix message for carb missing","messageBody":"","tags":["v1.0-Release"],"fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"3132eb598029e7f51223d00284e77d6ad8feef03","isMergeCommit":true,"messageTitle":"Merge pull request #66 from nihalzp/fix-user-guide","messageBody":"Fix User Guide for Diet and Reformat","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"skylee03":{"docs":6,"functional-code":655,"test-code":31,"other":4},"DaDevChia":{"docs":75,"functional-code":447,"test-code":372},"AlWo223":{"docs":95,"functional-code":887,"test-code":201},"yicheng-toh":{"docs":147,"functional-code":374,"test-code":426,"other":1},"nihalzp":{"docs":72,"functional-code":649,"test-code":441}},"authorContributionVariance":{"skylee03":9159.896,"DaDevChia":20538.902,"AlWo223":37932.176,"yicheng-toh":16873.639,"nihalzp":31304.242},"authorDisplayNameMap":{"skylee03":"CS2113-T17-1 YANG..TIAN","DaDevChia":"CS2113-T17-1 DYLA..TIAN","AlWo223":"CS2113-T17-1 WOLT..LIUS","yicheng-toh":"CS2113-T17-1 TOH ..HENG","nihalzp":"CS2113-T17-1 NIHA..IAJI"}} +{"authorDailyContributionsMap":{"skylee03":[{"date":"2023-10-05","commitResults":[{"hash":"0b24d95bb5dcdbe7f53c0dd57ecd3e991bca0fba","isMergeCommit":false,"messageTitle":"Update skylee03 in AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":13,"deletions":7}}},{"hash":"8ad36b4ca9d2ccd786c5e20b5c8240bc2ca15211","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into skylee03-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"23829d9a0b09e12b0f8f162d5d87add4f6ab4a63","isMergeCommit":true,"messageTitle":"Merge pull request #4 from skylee03/skylee03-AboutUs","messageBody":"Update skylee03 in AboutUs","fileTypesAndContributionMap":{}}]},{"date":"2023-10-08","commitResults":[{"hash":"c3134ce83d36393de4d6cb68d6340f07ebd6b9b0","isMergeCommit":false,"messageTitle":"Add CLI interaction","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":253,"deletions":21},"other":{"insertions":2,"deletions":2}}},{"hash":"135bb1b04338c2e0253592c8342d81b54c82595a","isMergeCommit":false,"messageTitle":"Update build.gradle","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":2}}},{"hash":"0481e59c5747ab3d43fa6b51a3e7c7d864054ca5","isMergeCommit":false,"messageTitle":"Create packages/classes for commands and data","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":164,"deletions":5}}},{"hash":"8cb6c0a847e3eb76064ffce3ace232ec69d49699","isMergeCommit":false,"messageTitle":"Add ParserTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":40,"deletions":12}}}]},{"date":"2023-10-16","commitResults":[{"hash":"710297a46c87d88cf6d8adfe83c5b78db64d15f9","isMergeCommit":false,"messageTitle":"Use `AthletiException` class to handle all exceptions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":17},"test-code":{"insertions":3,"deletions":3}}},{"hash":"8f252f892e5a11a13fc316eb9297662c969c5c31","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into refactor-exception","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"065480e820ccd9cb6be632e7b564ee36cc2f936c","isMergeCommit":true,"messageTitle":"Merge pull request #41 from skylee03/refactor-exception","messageBody":"Use `AthletiException` class to handle all exceptions","fileTypesAndContributionMap":{}},{"hash":"2eb3e967083322cc11ef6500506c6aa6744f9e08","isMergeCommit":false,"messageTitle":"Use `assert` in `ui` package","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}}]},{"date":"2023-10-17","commitResults":[{"hash":"20d90df4a8c446e303b0c3c75d8ee267031a8eb3","isMergeCommit":false,"messageTitle":"Use `logging` in `AthletiCLI` class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":0}}},{"hash":"4e7f3667fbbb2847269403d46dcd42225835f259","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":2}}},{"hash":"1c7afe5447f87cdcb2bfb039cc520c089348ef34","isMergeCommit":false,"messageTitle":"Remove debug output","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"2f854b5605a94a156c6aecaa1c9e777e449a15bc","isMergeCommit":true,"messageTitle":"Merge pull request #44 from skylee03/assert-ui","messageBody":"Use `assert` and `logging`","fileTypesAndContributionMap":{}}]},{"date":"2023-10-21","commitResults":[{"hash":"5214c3b07fb99d09964e9560f954508e5e6e8fc2","isMergeCommit":false,"messageTitle":"Add help command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":132,"deletions":0}}},{"hash":"b84b80eacd7e3743198ed32c6ac92ee230a922fa","isMergeCommit":false,"messageTitle":"Update runtest to ignore trailing spaces","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":2}}},{"hash":"49ba6f0df297e185c7469ac5526aa011133e31e8","isMergeCommit":false,"messageTitle":"Update runtest.sh to make it compatible with MacOS","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"c81d5fb5e06414f18e5e3b2926d8f43d99d823cd","isMergeCommit":false,"messageTitle":"Set locale of DateTimeFormatter to English","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"0114bd9c4a5f135b16959e5b457ed7f0c53ed7a1","isMergeCommit":true,"messageTitle":"Merge pull request #78 from skylee03/set-locale","messageBody":"Set locale of DateTimeFormatter to English","fileTypesAndContributionMap":{}},{"hash":"8d15b73af3f636f95ca95466a39e3b9f55b38583","isMergeCommit":true,"messageTitle":"Merge pull request #77 from skylee03/help-command","messageBody":"Add `help` command","fileTypesAndContributionMap":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"848aa98b502c41aafc8c28bbf396547a31200de6","isMergeCommit":false,"messageTitle":"Add storage features","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":139,"deletions":19}}},{"hash":"79dced6990c7cd3edb33d705becfaa7030943dfc","isMergeCommit":false,"messageTitle":"Add help messages for save command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"51b1217df5232a93d66b1d0711c81fb9f51503ea","isMergeCommit":false,"messageTitle":"Update src/main/java/athleticli/commands/ByeCommand.java","messageBody":"Co-authored-by: Yi Cheng \u003c75836313+yicheng-toh@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"11e07f26742dad96e7ab2d5401e90d6c36250ef5","isMergeCommit":false,"messageTitle":"Modify the extension of `PATH_SAVE`","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"1f1d356e443da63e06f4d38e5fab10696da75b49","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into storage","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"273f57174a24242f32de525503aedd6dc76aa477","isMergeCommit":false,"messageTitle":"Save data when the JVM begins its shutdown sequence","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":11}}},{"hash":"d4ff6c77512b078593d0721c1635c4704a35623d","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into storage","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7d8724f1da03d1767abcad57caf2757b1bc37fdc","isMergeCommit":true,"messageTitle":"Merge pull request #79 from skylee03/storage","messageBody":"Add storage features","fileTypesAndContributionMap":{}}]}],"DaDevChia":[{"date":"2023-10-05","commitResults":[{"hash":"0b6a61ab5f9e012eab2a34c0a65593eb3ee747db","isMergeCommit":false,"messageTitle":"Added profile information","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"0694bcffcee38aa324b0dedbaaf61fa8b89ad035","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into dylanChia-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9bed8b4b05c9f4ac170143e58c4c73d268e03d1b","isMergeCommit":true,"messageTitle":"Merge pull request #5 from DaDevChia/dylanChia-AboutUs","messageBody":"Added profile information","fileTypesAndContributionMap":{}}]},{"date":"2023-10-10","commitResults":[{"hash":"e31e4398411fe06ef751b8432a69c3d71b25c757","isMergeCommit":true,"messageTitle":"Merge pull request #8 from skylee03/cli-interaction","messageBody":"Add CLI interaction","fileTypesAndContributionMap":{}},{"hash":"914104a7efdfba71222a6f004d620cb49119934d","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AY2324S1-CS2113-T17-1:master","messageBody":"Master","fileTypesAndContributionMap":{}}]},{"date":"2023-10-12","commitResults":[{"hash":"bc77b66ec8241e85f841294349f30e9b9465178b","isMergeCommit":false,"messageTitle":"Implemented Sleep add, edit, delete, list","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":276,"deletions":8}}}]},{"date":"2023-10-14","commitResults":[{"hash":"46edcdbfd294c5013e0757a607889e71809482be","isMergeCommit":false,"messageTitle":"Added Junit test for sleep class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":20,"deletions":0}}},{"hash":"30613649314867940690602daa35f9c1e8035a45","isMergeCommit":false,"messageTitle":"Added junit test for AddSleepCommand class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":30,"deletions":0}}},{"hash":"f02ea1e04e1a11a4c440b6ebd92499d9f6aabafe","isMergeCommit":false,"messageTitle":"Added junit test for AddSleepCommand class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":41,"deletions":0}}},{"hash":"e335628314a2b34fdc8e888b4123aa841b7a165f","isMergeCommit":true,"messageTitle":"Merge remote master branch into branch-sleep","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"93d65605f87a62f40c372370935fb104f66a5771","isMergeCommit":false,"messageTitle":"Renamed all meal to diet class reference","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"119b279f86e540ae3cb4b7135023cd123a440bcc","isMergeCommit":false,"messageTitle":"Added junit tests for sleep commands in parser","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":29,"deletions":0}}},{"hash":"3daa08c864f2163c73bf65f2c77cee1c53bb0005","isMergeCommit":false,"messageTitle":"Added check for invalid index when deleting sleep","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"9f0b9866dbb061311413c28742ea40725839b51d","isMergeCommit":false,"messageTitle":"Added tests for delete add and list sleep commands","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":2},"test-code":{"insertions":79,"deletions":0}}},{"hash":"3cebb7864672cde7cb8da5f1ec04602c333ce7e9","isMergeCommit":false,"messageTitle":"Moved sleep test to correct directory","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"ca31bd932ae8ad595f649bc2c62ad5228c73a782","isMergeCommit":false,"messageTitle":"Removed unecessary imports from tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":11}}},{"hash":"3a803c14ec3b76f2662b2394eae5f4bacb3246c6","isMergeCommit":false,"messageTitle":"Added junit test for sleep edit command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":34,"deletions":0}}},{"hash":"51303b230c62fca9a6a626211baa7cb9017fac29","isMergeCommit":false,"messageTitle":"Fixed Checkstyle violations","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":30,"deletions":32},"test-code":{"insertions":3,"deletions":3}}}]},{"date":"2023-10-15","commitResults":[{"hash":"eb4541cc26c4cf8d17caaf64796abc08498cfce5","isMergeCommit":false,"messageTitle":"Fixed space formatting","messageBody":"Co-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"44ecbf846f21e675e5ec5eec5be301d5acc06aa1","isMergeCommit":false,"messageTitle":"Apply formatting suggestions from code review","messageBody":"Co-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":15},"test-code":{"insertions":0,"deletions":10}}},{"hash":"a9024e7352c2f21ceb932ed7f88be0cf295225eb","isMergeCommit":true,"messageTitle":"Merge pull request #21 from DaDevChia/branch-sleep","messageBody":"Added sleep tracking functionality, along with list, add, edit, delete methods ","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"500b2e0c0475943eef1256c34867d7d50def75fa","isMergeCommit":false,"messageTitle":"Added javadocs for all sleep features","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":84,"deletions":6}}}]},{"date":"2023-10-17","commitResults":[{"hash":"8f210386deab792857278cb869d6e7dbe81e501e","isMergeCommit":false,"messageTitle":"Implemented LocalDateTime for sleep, fixes #22","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":65,"deletions":27}}},{"hash":"0ee91741c46cd5d09fdf8882c0c6a594c57d7176","isMergeCommit":false,"messageTitle":"Implemented setter methods for data object","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":1}}},{"hash":"2e75378f6fa4f6234a6213b8b9e4e63112ab93a4","isMergeCommit":false,"messageTitle":"Reworked all Junit tests for sleep, fixes #23","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":246,"deletions":104}}},{"hash":"98439a6061cc53595d9b4bcf49dc20ece2e4fdd9","isMergeCommit":false,"messageTitle":"Added and updated Junit tests for sleep parser","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":20,"deletions":2}}},{"hash":"e8a479ebefd85df7f1e5fddd50d57329a538bf2c","isMergeCommit":false,"messageTitle":"Implement Message class for Sleep #24","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":54,"deletions":37},"test-code":{"insertions":3,"deletions":4}}},{"hash":"0966da05332d6d9884a12762f1acca3e8b1cc608","isMergeCommit":false,"messageTitle":"Updated userguide for sleep features #25","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":77,"deletions":0}}},{"hash":"e14aa195ac61c0d1a6904bbd5ce0e58e9eeea98d","isMergeCommit":false,"messageTitle":"Implemeted gradle checkstyle suggestions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":15},"test-code":{"insertions":8,"deletions":4}}},{"hash":"d5233b0465955498343b428ca27862b770758e3e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp into branch-sleep-improvements","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"887ad3d18dea4c1a1eb52f3d136e5c5b77410ff2","isMergeCommit":false,"messageTitle":"Applied spacing suggestions from code review","messageBody":"Added spacing to javadocs as per coding standard\n\nCo-authored-by: nihalzp \u003c81457724+nihalzp@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"0490d9a8a964b89afbc27ff19ccd712fdb8fdfd8","isMergeCommit":false,"messageTitle":"Added exceptions handling for edit / delete sleep","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":10},"test-code":{"insertions":14,"deletions":15}}},{"hash":"ff52e5bb4276c795953d232fda4948bb90a57b90","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-sleep-improvements\u0027 of https://github.com/DaDevChia/tp into branch-sleep-improvements","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"210ec4fe5da9d884e44c7ffebfb4ccfd30b037f2","isMergeCommit":true,"messageTitle":"Merge pull request #51 from DaDevChia/branch-sleep-improvements","messageBody":"Added improvements to sleep feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"1fda0f371511e7763971a8e38c52cc6ee6006686","isMergeCommit":false,"messageTitle":"Deleted redundant sleeplist method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":12}}},{"hash":"94ac2b8b4663af7522108a52ad90de9a1d94ec74","isMergeCommit":false,"messageTitle":"Changed list printing method for list sleep","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":6},"test-code":{"insertions":8,"deletions":7}}},{"hash":"332d5ab2105cabf9e0f9b082cc5839ee54bb3463","isMergeCommit":false,"messageTitle":"Closes #64; Updated junit tests for sleep class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":45,"deletions":18}}},{"hash":"2f8658f4e76f96fdabe3dbe922d12322f4d94096","isMergeCommit":false,"messageTitle":"Closes #75 Added Logging and Assertions for Sleep","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":45,"deletions":3}}},{"hash":"3d4b9ae69ff02a8322cf924b553b6c2f3f53137d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/DaDevChia/tp into branch-sleep-improvements","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d86e23fbe297e8710a3eae25ca3943b0a40ae544","isMergeCommit":false,"messageTitle":"Closes #50; Add parameter class for all separators","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":14}}},{"hash":"0ff05b3b4d4c4f18348dc0a776fc530d797a7249","isMergeCommit":false,"messageTitle":"Fixed Checkstyle violations","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}}]},{"date":"2023-10-23","commitResults":[{"hash":"e5c4832683aed3603cb80efe4aa56505f9503ab6","isMergeCommit":false,"messageTitle":"Added changes to style from code review","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":17}}},{"hash":"3e9374fca356e5feb28ec7cdd3b44aef0182d008","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-sleep-improvements","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b74f2d37cb61977204e9bbb83986d88f7551f428","isMergeCommit":false,"messageTitle":"Fixed Checkstyle error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"c2104bb0d9f49758b042d539db3778ce935cd787","isMergeCommit":true,"messageTitle":"Merge pull request #76 from DaDevChia/branch-sleep-improvements","messageBody":"Sleep code quality Improvements","fileTypesAndContributionMap":{}}]}],"AlWo223":[{"date":"2023-10-05","commitResults":[{"hash":"d1830be8fa3c9af05ee0c009b1e7e57fefed93d8","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"cae7a967c15901f3c6c233cc6d5d43d26b914577","isMergeCommit":false,"messageTitle":"test forking","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"446cc7162d1d868e5a3050a324ec45953fc26a3a","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AlWo223/devalex","messageBody":"test forking","fileTypesAndContributionMap":{}}]},{"date":"2023-10-10","commitResults":[{"hash":"024c68352be321cb9ceb2f7df72447ae27259dec","isMergeCommit":false,"messageTitle":"Add activity parent class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":62,"deletions":1}}}]},{"date":"2023-10-11","commitResults":[{"hash":"40bd286165eebade7f4426821383a27b08302d21","isMergeCommit":false,"messageTitle":"add run, swim and cycle as activity childs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":60,"deletions":24}}}]},{"date":"2023-10-12","commitResults":[{"hash":"9c6c3ed9e8a77f718996d99605e5ab8393d82f15","isMergeCommit":false,"messageTitle":"Enable user to add run","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":124,"deletions":2}}},{"hash":"06f3e25556e6eb2fbd58459542d9802421b01cdf","isMergeCommit":false,"messageTitle":"Simplify add run to add activity","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":16}}},{"hash":"d0949fc7e73bafcf00af8e84541620da5da2b53d","isMergeCommit":false,"messageTitle":"Provide JavaDoc comments","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":63,"deletions":1},"test-code":{"insertions":4,"deletions":0}}},{"hash":"b6b92040342ba95378e7a324ff3e28998dfb633f","isMergeCommit":false,"messageTitle":"Implement adding of specific activities swim, cycle and run","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":87,"deletions":19}}},{"hash":"af6cc67a94a9a5362066c4ea936bfd8d19d70ef8","isMergeCommit":false,"messageTitle":"Generate JUnit Tests for different types of activities","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":53,"deletions":24},"test-code":{"insertions":146,"deletions":1}}},{"hash":"22dddf5c7a3a6aab26c295f9c95e46fff7788447","isMergeCommit":false,"messageTitle":"Implement activity parsing","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":74,"deletions":0}}}]},{"date":"2023-10-13","commitResults":[{"hash":"f1a10d37df14ad9eb5360e13fa1d55bf70c3c9d9","isMergeCommit":false,"messageTitle":"Enable parsing of other sport activities","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":202,"deletions":191}}},{"hash":"41a2d7f82fe734fdcc553083763d2f915b68dc88","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":23},"test-code":{"insertions":25,"deletions":22}}},{"hash":"2498fd588fccd610a3ec3c4241f14d417611a689","isMergeCommit":false,"messageTitle":"Place overload methods next to each other","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":16}}},{"hash":"21dfeec67a371f0dccb96b43391c2081a08d9392","isMergeCommit":false,"messageTitle":"Add single line representation of activities","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":76,"deletions":10},"test-code":{"insertions":82,"deletions":30}}},{"hash":"a3e611afddcbc54beb94540e83bc196655f7fdbb","isMergeCommit":false,"messageTitle":"Describe how to add activities in UserGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":40,"deletions":5}}},{"hash":"d18183d67ecfdedc2b15a956a3717447418d735c","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":33},"test-code":{"insertions":10,"deletions":12}}},{"hash":"cb06421b762e002f0014f0a60ec324ebad344cf7","isMergeCommit":false,"messageTitle":"Resolve minor coding standard violations","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":2},"test-code":{"insertions":5,"deletions":4}}},{"hash":"5efb24cc5a01130909e02b92c26e8ae7311a0787","isMergeCommit":false,"messageTitle":"Update src/main/java/athleticli/data/activity/Cycle.java","messageBody":"Co-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"76d67353a828cda2fd27cb32d129ff98ede1c4e6","isMergeCommit":false,"messageTitle":"Update docs/README.md","messageBody":"Co-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"docs":{"insertions":9,"deletions":7}}},{"hash":"6ca1d562827ca47c660144ab641fce02869449e4","isMergeCommit":true,"messageTitle":"Merge pull request #19 from AlWo223/activity","messageBody":"Add Activity","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"212799a32b8e92686294704025df23ae828ddad1","isMergeCommit":false,"messageTitle":"Add delete-activity command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":67,"deletions":2}}},{"hash":"f9e927a4e48c4a06c49492e359ef10fc2c08ceda","isMergeCommit":false,"messageTitle":"Remove magic numbers in activity parsing","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":44,"deletions":23}}},{"hash":"fef8602baa76f930bc9a2d94a38a0a26274f3ccb","isMergeCommit":false,"messageTitle":"Add delete-activity instructions in UserGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":18,"deletions":0}}}]},{"date":"2023-10-17","commitResults":[{"hash":"9fef12d5fe197162e1054e2d0fa70c5d09ff0a61","isMergeCommit":false,"messageTitle":"Add list-activity command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":63,"deletions":7}}},{"hash":"bbafeb117839aa2c8046e0566ae84256fa1bb2dd","isMergeCommit":false,"messageTitle":"Enable detailed view of activities","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":142,"deletions":17}}},{"hash":"a95ebe424439167e121ce27bb69140bb45adf76e","isMergeCommit":false,"messageTitle":"change flag parameter of list-activity command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"640898ee0a68ee886104e51336451781857c2330","isMergeCommit":false,"messageTitle":"Describe list-activity command in UserGuide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":17,"deletions":0}}},{"hash":"ee39eaa464bbfd78829588b8903c4d78848eb924","isMergeCommit":false,"messageTitle":"Add edit command for activities","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":98,"deletions":1}}},{"hash":"d06fe24f8ecab07eb82e821f5261027535368134","isMergeCommit":false,"messageTitle":"Update UserGuide with instruction for editing activities","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":22,"deletions":2}}},{"hash":"3902b0fdc6bfba8d5410dd371a16e912bf2eba43","isMergeCommit":false,"messageTitle":"Enable logging of activity editing process","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"56c4878e53519e4d18bc2f8f8637c93c89fd8615","isMergeCommit":false,"messageTitle":"Add assertion check to edit command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}}]},{"date":"2023-10-18","commitResults":[{"hash":"a3424ee0a5873c1627dae1a67b53a80a80ef0cf0","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":30},"test-code":{"insertions":4,"deletions":6}}},{"hash":"17b7716904ee54cc8059ee038a591ef8ae2f8a10","isMergeCommit":true,"messageTitle":"Merge master branch","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9444463cdb497bb76c542a5873c8fef01c8c65dd","isMergeCommit":false,"messageTitle":"Add some JavaDoc comments to Parser code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":30,"deletions":0}}},{"hash":"199697e0c7d231bde90cda121530dfc22b080fca","isMergeCommit":true,"messageTitle":"Improve code quality and readability","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bdda8c8d199d157e898e00485c085534f45ace0b","isMergeCommit":true,"messageTitle":"Merge pull request #59 from AlWo223/list","messageBody":"Implement commands for editing, deleting, viewing activities","fileTypesAndContributionMap":{}}]}],"yicheng-toh":[{"date":"2023-10-05","commitResults":[{"hash":"6ef5fd0adac3dbc719b13dbf2b2ab713ac1be1ba","isMergeCommit":false,"messageTitle":"Add profile for yi cheng","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":11,"deletions":5}}},{"hash":"9bd5f18d45380e4064736e7e2d522e4bb53d9eb2","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"# Conflicts:\n#\tdocs/AboutUs.md\n","fileTypesAndContributionMap":{}},{"hash":"57a806539f9f12400c7873eb0848e0a808657e68","isMergeCommit":true,"messageTitle":"Merge pull request #2 from yicheng-toh/master","messageBody":"Add profile for yi cheng","fileTypesAndContributionMap":{}}]},{"date":"2023-10-09","commitResults":[{"hash":"00aa40a7cd4f49250b89e8da6e405912972f4f99","isMergeCommit":false,"messageTitle":"Adjust the format of the table to resolve warning from intellij","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"9db4478dbe4192b8579a7f29fb22b9c8e3ee12af","isMergeCommit":true,"messageTitle":"Merge pull request #13 from yicheng-toh/documents","messageBody":"Edit table format for AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-10","commitResults":[{"hash":"834e1ea90ff1c97a9b1cbaa7e4e8fb4d7abcc14b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a4d91b2113c0354343357ff8e7e7726363da2a1d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5b01105df5ebb31111aad46bddda02776f17e218","isMergeCommit":false,"messageTitle":"Add Diet Goal Class and Diet Goal List Class","messageBody":"Fixes #10\n","fileTypesAndContributionMap":{"functional-code":{"insertions":82,"deletions":0},"test-code":{"insertions":102,"deletions":0}}},{"hash":"a6dc7e822f05482d9be899688800bc6c86e65a25","isMergeCommit":false,"messageTitle":"Add delete functionality to DietGoalList","messageBody":"Fixes #11\n","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0},"test-code":{"insertions":17,"deletions":2}}},{"hash":"75db1b825ac2cf0540f12079d025060c6bbfe19b","isMergeCommit":false,"messageTitle":"Revert \"Add delete functionality to DietGoalList\"","messageBody":"This reverts commit a6dc7e822f05482d9be899688800bc6c86e65a25.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4},"test-code":{"insertions":2,"deletions":17}}},{"hash":"833207c30435d8f92a6ee8b459efc0337403084e","isMergeCommit":false,"messageTitle":"Improve code quality to pass build test","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":16,"deletions":14}}}]},{"date":"2023-10-11","commitResults":[{"hash":"e485d117db0d7ff75bd58853df24311d78160ddc","isMergeCommit":false,"messageTitle":"Remove redundant newlines","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":7},"test-code":{"insertions":0,"deletions":5}}},{"hash":"cf8a65f00e5865381818da68829aee12cb12788f","isMergeCommit":false,"messageTitle":"Revert \"Remove redundant newlines\"","messageBody":"This reverts commit e485d117db0d7ff75bd58853df24311d78160ddc.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":0},"test-code":{"insertions":5,"deletions":0}}},{"hash":"5fe5f02580038a546be18b69df69a042fd547467","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"Remove redundant newlines as suggested by skylee03\n\nCo-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4},"test-code":{"insertions":0,"deletions":4}}},{"hash":"35b51d3c961f239a69d6a7e2622813eb9fd764b1","isMergeCommit":true,"messageTitle":"Merge pull request #17 from yicheng-toh/goals","messageBody":"Add DietGoal Class and DietGoalList Class","fileTypesAndContributionMap":{}},{"hash":"f5ad0687c40da73186ba4e69b5915d22f4442099","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"3bf1545451d3c35c883dee34f81203d2838e8d71","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d397c52103037b3417e7cfa08b4d3b3897030d55","isMergeCommit":false,"messageTitle":"Add delete function to DietGoalList Fixes #11","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0},"test-code":{"insertions":17,"deletions":0}}},{"hash":"4a11acbfc52340fe1ab7fbf087a0ff27c5c0bb74","isMergeCommit":false,"messageTitle":"Add edit feature for DietGoal","messageBody":"Fixes #12\n","fileTypesAndContributionMap":{"functional-code":{"insertions":17,"deletions":0},"test-code":{"insertions":23,"deletions":0}}},{"hash":"a0f11a58c10e27d786fd91577fceb7fbd7c5692f","isMergeCommit":false,"messageTitle":"Add printing to DietGoalList","messageBody":"Fixes #9\n","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0},"test-code":{"insertions":8,"deletions":0}}}]},{"date":"2023-10-12","commitResults":[{"hash":"a39f610494cda3ed34f6101ab724f15467b13ac9","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"Convert words to American spelling in accordance to code quality standard suggested by skylee03\n\nCo-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":4}}},{"hash":"7b4b871b1b5cd422c23aa3141172e92cc332358e","isMergeCommit":false,"messageTitle":"Edit variable name in accordance to code quality standards","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":6,"deletions":6}}},{"hash":"40a393f46f1e028e0b0011bc7766631b2f53f5c3","isMergeCommit":false,"messageTitle":"Revert \"Edit variable name in accordance to code quality standards\"","messageBody":"This reverts commit 7b4b871b1b5cd422c23aa3141172e92cc332358e.\n","fileTypesAndContributionMap":{"test-code":{"insertions":6,"deletions":6}}},{"hash":"be38b2183bee45d85cc5db3ac78e038bb68c4bb5","isMergeCommit":false,"messageTitle":"Edit variable name in accordance to code quality standard","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":6,"deletions":6}}},{"hash":"fbac222d5e7db32a386c4188c149b87070405c32","isMergeCommit":true,"messageTitle":"Merge branch \u0027goals\u0027 of https://github.com/yicheng-toh/tp into v1.0","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"464bd877f0fa5f195cd1c55468681926140a936e","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"Co-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":5}}},{"hash":"7bb7071d03d906fb653225ec11f8fdc5d2c015b7","isMergeCommit":true,"messageTitle":"Merge pull request #18 from yicheng-toh/goals","messageBody":"Edit, List and Delete feature added to DietGoalList","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"210ec3b65836832798397065349dd6b6125b04a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7fc15d856584c273d1ddd02ef20e6fc945c0b877","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6e6acaa0b85747d95506e6f167879f07be6c3463","isMergeCommit":false,"messageTitle":"Add set diet goal command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":147,"deletions":16}}},{"hash":"1819c00c7b91e021c5a2f6835fa77ef2171e9391","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f260c0f6c97f51cd7d8f08a8088c112738d98b35","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into goals","messageBody":"# Conflicts:\n#\tsrc/main/java/athleticli/ui/CommandName.java\n#\tsrc/main/java/athleticli/ui/Message.java\n#\tsrc/main/java/athleticli/ui/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"265a4ceda6601735b2a77ef0267b41f97882f52c","isMergeCommit":false,"messageTitle":"Add javadoc comment for set new diet goal command and related functions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":3}}},{"hash":"b92037b2a0b42ad19711a90845b07cdd3362e004","isMergeCommit":false,"messageTitle":"Add tests for set diet goals","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":8},"test-code":{"insertions":41,"deletions":0}}},{"hash":"9084bae7158b73dfbb3f0a619f6aebe369b56538","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}}]},{"date":"2023-10-16","commitResults":[{"hash":"07f523f4003ceae8db86a2d1b17802b2e8ac81c1","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"Co-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":7},"test-code":{"insertions":1,"deletions":1}}},{"hash":"8de8cc401abb5d08d84b2bb26252515296bf1f76","isMergeCommit":false,"messageTitle":"Improve code quality as suggested by skylee","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":9},"test-code":{"insertions":7,"deletions":10}}},{"hash":"53dbb39f2e5973f2db0ba853bd36857f40950cf4","isMergeCommit":true,"messageTitle":"Merge branch \u0027goals\u0027 of https://github.com/yicheng-toh/tp into goals","messageBody":"# Conflicts:\n#\tsrc/test/java/athleticli/ui/ParserTest.java\n","fileTypesAndContributionMap":{}},{"hash":"5497a736bb9ba3e81465ba6cd402dd6e440488a3","isMergeCommit":false,"messageTitle":"Remove bugs","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"6c48bb7583eb068f7da773feb5f87971a8a7246e","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"from dylan and skylee\n\nCo-authored-by: DaDevChia \u003c88506363+DaDevChia@users.noreply.github.com\u003e\nCo-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":26}}},{"hash":"f9402e37c285cc3353c372f24a72a921c52e9dff","isMergeCommit":true,"messageTitle":"Merge branch \u0027goals\u0027 of https://github.com/yicheng-toh/tp into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"860d0f714dc99262be545f5fcdca7b8b5a7257d5","isMergeCommit":false,"messageTitle":"Remove bugs generated from review","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":22}}},{"hash":"92a226e49532f19b23d888ac1819aaae9db6e453","isMergeCommit":true,"messageTitle":"Merge pull request #35 from yicheng-toh/goals","messageBody":"Add logic for setting diet goals","fileTypesAndContributionMap":{}},{"hash":"aad918a5a820574a24ac760f5e96adc0bd96eaef","isMergeCommit":false,"messageTitle":"Add set diet goal tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":78,"deletions":0}}},{"hash":"8ca8855c2425074d46c5d30c3f295e2eb2b11755","isMergeCommit":false,"messageTitle":"Add edit feature for diet goals","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":59,"deletions":5},"test-code":{"insertions":87,"deletions":1}}},{"hash":"14fa302c8df0c16f18f22083f998f63e76d21804","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fd2680282a51c3b9c969b2701d259479d0fdd064","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"42ef388db1c0eb831020d8ecf8f7bb7cea34004d","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":2}}},{"hash":"9e01b4dd470e2d983b1dcc1c19c6fcbf6977720b","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"test-code":{"insertions":4,"deletions":2}}},{"hash":"d6275c5592af89a77ab748f575a41fafe9df4d81","isMergeCommit":false,"messageTitle":"Update EditDietGoalCommandTest.java","messageBody":"Change assert (false) to fail (e)","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":3}}},{"hash":"74de6f6f59717b4cbff9c03279c74562f4550fb9","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"Co-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"e79340716e4d73ac351d269ef36416455620b8a4","isMergeCommit":false,"messageTitle":"Update SetDietGoalCommandTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":3}}},{"hash":"5120ea5fc744ce8ccd56029ae6b4e62d2fa39720","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":3}}},{"hash":"325a3842beb9c49bbd1abcd5e58f0db615f1d475","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":3}}},{"hash":"4b8e30379d7bfac5327aa2e8a689f81e3586dd4a","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/goals\u0027 into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"38165ec30b062bbee2c2182885be2fc9670b6404","isMergeCommit":false,"messageTitle":"Add list functionality for goals","messageBody":"Fixes #36\n","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":12},"test-code":{"insertions":6,"deletions":4}}},{"hash":"560c41fa157e1c13d3422ba8d005839182f3a529","isMergeCommit":false,"messageTitle":"Revert \"Add list functionality for goals\"","messageBody":"This reverts commit 38165ec30b062bbee2c2182885be2fc9670b6404.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":21},"test-code":{"insertions":4,"deletions":6}}},{"hash":"007f353277c407c23e42689c66846d94f357d711","isMergeCommit":false,"messageTitle":"Revert \"Revert \"Add list functionality for goals\"\"","messageBody":"This reverts commit 560c41fa157e1c13d3422ba8d005839182f3a529.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":12},"test-code":{"insertions":6,"deletions":4}}},{"hash":"bdb4c7ef4c849129a02e24708f4ea7010d658184","isMergeCommit":false,"messageTitle":"Improve code quality as recommended by gradle check","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"3df9060f6f3b4bede451bf9673c60126c2c0d42f","isMergeCommit":false,"messageTitle":"Add list feature and test for diet goals","messageBody":"Fixes #36\n","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":0},"test-code":{"insertions":49,"deletions":0}}},{"hash":"f0c393023640b78601c91c27f90e64fb1be69534","isMergeCommit":true,"messageTitle":"Merge pull request #39 from yicheng-toh/goals","messageBody":"Add logic for edit and list feature for diet goals","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"55bfdce7ca33e0c2d0d7150be776808b39d2ca69","isMergeCommit":false,"messageTitle":"Add delete feature to diet goals","messageBody":"Fixes #47\n","fileTypesAndContributionMap":{"functional-code":{"insertions":56,"deletions":8},"test-code":{"insertions":50,"deletions":0}}},{"hash":"475f260240108ff3e67de71e89b62a50d3e6fc25","isMergeCommit":false,"messageTitle":"Add javaDoc for delete diet goal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":4}}},{"hash":"21c9700f10693d22dee1ca6b3327feaaa48847cd","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"86894b29e040a086c478b5ba17922387c6c27336","isMergeCommit":false,"messageTitle":"Remove bugs pointed out by gradle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":2}}},{"hash":"b97bfd626d44cdc53e734cff74a58ff6650bf2fa","isMergeCommit":false,"messageTitle":"Address bugs pointed by gradle check","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":2}}},{"hash":"d73c39a8cc37866eb2e25f3b63db45c692284ee5","isMergeCommit":false,"messageTitle":"Address bugs pointed out by gradle","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":2}}},{"hash":"c4990ef5c5edfe5288cdbf7bf2d0f286aa0dd961","isMergeCommit":false,"messageTitle":"Add assertion and logging for delete diet goal command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":0}}},{"hash":"8e8d5eb84a2dbbcfa3d1cd2f66d052ddf5fdcd7c","isMergeCommit":false,"messageTitle":"Correct the logic for the use of assert for delete diet goal command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"0626b32e5e8a590d0263836b1fed44e4c0eb0292","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"as suggested by skylee\n\nCo-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"135345773cb5f1df502c0d56bce68f51586e92fc","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"As suggested by skylee\n\nCo-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"de1897900d894a13f7db59b6daf6ea3081ef3dda","isMergeCommit":false,"messageTitle":"Add logger manager as suggested from review","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":1}}},{"hash":"e8ac4eeafc3f90b4831c5e8d6619408afc83318a","isMergeCommit":true,"messageTitle":"Merge branch \u0027goals\u0027 of https://github.com/yicheng-toh/tp into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fe7ba04b1ef4956261e8846d72ad6b3311ed6ea1","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"89accd50f5d41aec4b2b736ba4a307a6c9cdbccc","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into goals","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"c80e15d1671c5a2df29bcce43f8f50b71959368d","isMergeCommit":true,"messageTitle":"Merge pull request #48 from yicheng-toh/goals","messageBody":"Add logic to delete feature for diet goals","fileTypesAndContributionMap":{}},{"hash":"5b8de0f5491f57d04390013b749cfd7de581539e","isMergeCommit":false,"messageTitle":"Remove small bugs for diet goals parser and UI","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"b7517f37d328db94e3fea66f6a79b1f89e6306f1","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"04fa3b597b79559670080a0adacabf5e70830e9d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"097eb979c0f4b6e8a516a3305d12ff79ada4cdbc","isMergeCommit":false,"messageTitle":"Edit tests to suit change in diet goal UI","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":4}}},{"hash":"a1d40b4527fa202c0f0c512e745f00688c4c2156","isMergeCommit":true,"messageTitle":"Merge pull request #60 from yicheng-toh/goals","messageBody":"Resolve UI bugs for diet goals","fileTypesAndContributionMap":{}},{"hash":"6b6615695e8efb333c505354cb0afd26b8a15c58","isMergeCommit":false,"messageTitle":"Add user guide for diet goals","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":133,"deletions":0}}},{"hash":"0d40e04e993615928bad76e6d9cb141a4950c1d1","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"15c1ef7c78934369dff8add9d6d205a5bca275cc","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cfcf09fcc76cd212521658db26e837efbae18b99","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"Standardisation of nutrients name.\n\nCo-authored-by: nihalzp \u003c81457724+nihalzp@users.noreply.github.com\u003e","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}}]},{"date":"2023-10-22","commitResults":[{"hash":"f3952eacf1f02bde21661454462f27977da36a0e","isMergeCommit":true,"messageTitle":"Merge pull request #67 from yicheng-toh/goals","messageBody":"Add user guide for diet goals","fileTypesAndContributionMap":{}},{"hash":"c3cf1d210ffb57e8afd4f4410734128dcfa1eaad","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2cedf33acacb6375a8eb96318a82e9858c0e4d14","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into goals","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"148527f78ce0d1854d51ceafb69c1cca1c544f08","isMergeCommit":false,"messageTitle":"Enable assertions when running AthletiCLI","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":0}}},{"hash":"4317cc604503258b97ab92e712a4a93a693295a1","isMergeCommit":false,"messageTitle":"Resolve bugs arising from set and edit diet goal command","messageBody":"Fixes #52, #53\n","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":1}}},{"hash":"3ff13bdb978ea8eb77d520c26c3b8ffdae2379d0","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"as suggested by skylee\n\nCo-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"94d3e74d658af2c79e0f1efafac1e2767585bbcc","isMergeCommit":true,"messageTitle":"Merge pull request #81 from yicheng-toh/v2.0","messageBody":"Bug fixes for diet goals","fileTypesAndContributionMap":{}},{"hash":"91b84f18b59ea71ce90fca62ecce202043fe1827","isMergeCommit":false,"messageTitle":"Add nutrient verifier class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":30,"deletions":12},"test-code":{"insertions":18,"deletions":13}}},{"hash":"bde1fc1aa20fe496200a5b981f495294496cf17b","isMergeCommit":true,"messageTitle":"Merge branch \u0027v2.0\u0027 of https://github.com/yicheng-toh/tp into v2.0","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e8b121a47571b5876785a3e5ec61e78e2de1d3c6","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"564734d174060980d564fa1db7170d0b1a607503","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into v2.0","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e93bd0a55ed69f0a04ac1fdca0f2598197053543","isMergeCommit":false,"messageTitle":"Apply suggestions from code review","messageBody":"as suggested by skylee\n\nCo-authored-by: Yang Ming-Tian \u003c1178715749@qq.com\u003e","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":6}}},{"hash":"4390ac41677bf685e92ec91c085328f1e56b4f90","isMergeCommit":true,"messageTitle":"Merge branch \u0027v2.0\u0027 of https://github.com/yicheng-toh/tp into v2.0","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8da238ac5424b33ab2fed7e24815e260a3b62f79","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"a1261976be0afd2475931767edf5977cfc9ef876","isMergeCommit":true,"messageTitle":"Merge pull request #83 from yicheng-toh/v2.0","messageBody":"Add nutrient verifier class ","fileTypesAndContributionMap":{}}]}],"nihalzp":[{"date":"2023-10-05","commitResults":[{"hash":"5333d4cf1c8a9b0ea1a9ec084892c14dea7d53b2","isMergeCommit":false,"messageTitle":"Add individual info","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"a705a999b30431c68e39f5b0167f9b66b89debaf","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into nihalzp-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ca99d34683f1a8b4ffdca5fa6dbfdf33eb4e6afb","isMergeCommit":true,"messageTitle":"Merge pull request #3 from nihalzp/nihalzp-AboutUs","messageBody":"Add Individual Info - nihalzp","fileTypesAndContributionMap":{}}]},{"date":"2023-10-13","commitResults":[{"hash":"88c9014401be33db3f1415d271d1e6abc593324c","isMergeCommit":false,"messageTitle":"Relocate diet goals files","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":95,"deletions":108}}}]},{"date":"2023-10-14","commitResults":[{"hash":"c977c9aed16f59a17ccb9512d30c061de27a153a","isMergeCommit":false,"messageTitle":"Use ArrayList inheritance for DietGoalList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":23}}},{"hash":"020e4dbefe29062a29b5f8e2eb7e86e20daa3f11","isMergeCommit":false,"messageTitle":"Add JavaDoc comments for diet goal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":63,"deletions":5}}},{"hash":"d8ff94defc829ff2c17be79015165643874ae29d","isMergeCommit":false,"messageTitle":"Use diet instead of meal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3},"other":{"insertions":2,"deletions":2}}},{"hash":"73b7b8ab849eafc755f1903712899e7559f9a8db","isMergeCommit":false,"messageTitle":"Update diet goals test paths","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":22,"deletions":23}}},{"hash":"403cd565a953c696900f240c4c3d250dc81b0aff","isMergeCommit":false,"messageTitle":"Rename meals to diets in Data class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"ead04ae4847fba3c551ac2545117e7225fc7a7a0","isMergeCommit":false,"messageTitle":"Implement Diet class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":104,"deletions":0}}},{"hash":"750a58d6d163985c90f67dae37df9bf6ebcb3e60","isMergeCommit":false,"messageTitle":"Update doc string in diet goal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":1}}},{"hash":"f48538ce055185165435ec50881e37e26220e28b","isMergeCommit":false,"messageTitle":"Implement DietList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":0}}},{"hash":"f9175487993b5ec115a2afa01d38d319e9a86cee","isMergeCommit":false,"messageTitle":"Add DietTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":69,"deletions":0}}},{"hash":"bd3307495eb8061d5b98192d99304d969ad94548","isMergeCommit":false,"messageTitle":"Add DietListTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":97,"deletions":0}}},{"hash":"41f96d52d3dd4b7f0319f83559ca6b09a27929e5","isMergeCommit":false,"messageTitle":"Refactor DietGoalListTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":13,"deletions":14}}},{"hash":"da06f350e71926f9a0ce37d2a7f6701e5ae45f18","isMergeCommit":false,"messageTitle":"End file with new line","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"942346561f3ee347e60d3d95ed802307cdc462f2","isMergeCommit":false,"messageTitle":"Simplify logic in DietGoal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":5}}},{"hash":"24faa7a7468bfc3c3cc48ecfec34c6716c9da92f","isMergeCommit":false,"messageTitle":"Remove redundant blank lines","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":3}}},{"hash":"308d4471b8aaf54fdf59de6692b67e8a2a9e2c17","isMergeCommit":true,"messageTitle":"Merge pull request #20 from nihalzp/diet","messageBody":"Add and Refactor Diet","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"f019f39e5bfa0166876bc7e860a08c729d4911be","isMergeCommit":false,"messageTitle":"Rename meal to diet","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":12}}},{"hash":"6024bdace6ecb11f50c0871bd9a4b3682a83057a","isMergeCommit":false,"messageTitle":"Add AddDietCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":44,"deletions":0}}},{"hash":"a5b6a6729ae36ee4aca74da6255acd9e24a33126","isMergeCommit":false,"messageTitle":"Add DeleteDietCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":44,"deletions":0}}},{"hash":"53b2e8767c47560746212606d5eedc92453abe44","isMergeCommit":false,"messageTitle":"Add ListDietCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":0}}},{"hash":"52fcad706d32a863171d058b0cb5231045833d4b","isMergeCommit":false,"messageTitle":"Add new line in diet and diet goal list toString","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"f0e98e4485fa746bc0a6fd97de9a427f5e962f80","isMergeCommit":false,"messageTitle":"Add diet command names","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":1}}},{"hash":"ec94df1485d57806adf02878b43a045c73efd94c","isMergeCommit":false,"messageTitle":"Add diet specific message strings","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":53,"deletions":15}}},{"hash":"c5b661267550c84a842d366f967a635e8942f7ea","isMergeCommit":false,"messageTitle":"Implement parsers for diet","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":217,"deletions":27}}},{"hash":"1b744ec76329f10942f730964626ba261a75a73c","isMergeCommit":false,"messageTitle":"Add tests for AddDietCommand","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":39,"deletions":0}}},{"hash":"8741c43909a7d7bb3fe8996cdcf9aa800369abf3","isMergeCommit":false,"messageTitle":"Add tests for DeleteDietCommand","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":53,"deletions":0}}},{"hash":"3807da90bac12694e9cd92296769b232f3add879","isMergeCommit":false,"messageTitle":"Add tests for ListDietCommand","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":39,"deletions":0}}},{"hash":"ed9e42c52a404ed0352e1c628b7f67a2f30e5005","isMergeCommit":false,"messageTitle":"Update tests for DietList","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":2}}},{"hash":"bd0136d0adfd32f2a41c64317c3bc71838387800","isMergeCommit":false,"messageTitle":"Add parser tests for diet","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":113,"deletions":10}}},{"hash":"59c9075387f54f1f3f4f6c63f7642bc5e5a162c3","isMergeCommit":false,"messageTitle":"Add diet guide in docs/readme","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":42,"deletions":1}}},{"hash":"14e3ee42cc76c89d4bc0798b127a4014cb78553a","isMergeCommit":false,"messageTitle":"Delete trailing space","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"3c39bbc0af962d145c718b68c3fcbcfabbb88688","isMergeCommit":false,"messageTitle":"Fix JavaDoc comments indentation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":16}}},{"hash":"fd90dd4a778d3fb1d85d7b10df36a48cd23a2fa6","isMergeCommit":false,"messageTitle":"Rename unit test func names","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":17,"deletions":17}}},{"hash":"c4d473794e6bdd31901379ef755f369fbb5e4c66","isMergeCommit":false,"messageTitle":"Fix array initialization indentation","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":3}}},{"hash":"8221d356f374da5947b48eb9f554b0792dbd8c02","isMergeCommit":false,"messageTitle":"Fix formatting issue in readme","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":26,"deletions":9}}},{"hash":"4d38e16e4263892d35bfc181789cb6d6c1155054","isMergeCommit":false,"messageTitle":"Refactor delete diet command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"5e73492dc594864ff26e59d2383f52f5ee46ab4d","isMergeCommit":true,"messageTitle":"Merge pull request #31 from nihalzp/diet-parser","messageBody":"Diet parser","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"8c8189cec6c3badcb1166699f4393be4585477cd","isMergeCommit":false,"messageTitle":"Fix diet commands and formatting","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":36,"deletions":26}}},{"hash":"582f99799f073c326bef887656e215eb02fb78d9","isMergeCommit":false,"messageTitle":"Fix message for carb missing","messageBody":"","tags":["v1.0-Release"],"fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"3132eb598029e7f51223d00284e77d6ad8feef03","isMergeCommit":true,"messageTitle":"Merge pull request #66 from nihalzp/fix-user-guide","messageBody":"Fix User Guide for Diet and Reformat","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"skylee03":{"docs":6,"functional-code":654,"test-code":31,"other":4},"DaDevChia":{"docs":75,"functional-code":483,"test-code":400},"AlWo223":{"docs":95,"functional-code":887,"test-code":201},"yicheng-toh":{"docs":147,"functional-code":374,"test-code":426,"other":1},"nihalzp":{"docs":72,"functional-code":647,"test-code":441}},"authorContributionVariance":{"skylee03":8899.682,"DaDevChia":20428.938,"AlWo223":36912.86,"yicheng-toh":16447.043,"nihalzp":30412.375},"authorDisplayNameMap":{"skylee03":"CS2113-T17-1 YANG..TIAN","DaDevChia":"CS2113-T17-1 DYLA..TIAN","AlWo223":"CS2113-T17-1 WOLT..LIUS","yicheng-toh":"CS2113-T17-1 TOH ..HENG","nihalzp":"CS2113-T17-1 NIHA..IAJI"}} diff --git a/AY2324S1-CS2113-T17-2_tp_master/authorship.json b/AY2324S1-CS2113-T17-2_tp_master/authorship.json index c77d7ce..d5df9fd 100644 --- a/AY2324S1-CS2113-T17-2_tp_master/authorship.json +++ b/AY2324S1-CS2113-T17-2_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"DextheChik3n"},"content":" mainClass.set(\"seedu.cafectrl.CafeCtrl\")","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"DextheChik3n"},"content":" archiveBaseName.set(\"cafectrl\")","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"DextheChik3n":2,"-":44}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Portfolio ","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"ShaniceTang"},"content":"--------|:--------:|:----------------------------------------:|:---------:","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"ShaniceTang"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Shanice | [Github](https://github.com/ShaniceTang) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"NaychiMin"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Naychi | [Github](https://github.com/NaychiMin/tp) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":"![](https://www.google.com/url?sa\u003di\u0026url\u003dhttps%3A%2F%2Fwww.scmp.com%2Fweek-asia%2Fpolitics%2Farticle%2F3095228%2Fmalaysia-najibs-cheesy-super-ring-jibe-comes-back-bite-him-after\u0026psig\u003dAOvVaw2ohFjBBhoZxtARfOKEnTXE\u0026ust\u003d1696586245977000\u0026source\u003dimages\u0026cd\u003dvfe\u0026opi\u003d89978449\u0026ved\u003d0CBEQjRxqFwoTCJiboLbS3oEDFQAAAAAdAAAAABAE) | Zi Yi | [Github](https://github.com/ziyi105) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":8,"author":{"gitId":"DextheChik3n"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Dexter Hoon | [Github](https://github.com/DextheChik3n) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":9,"author":{"gitId":"Cazh1"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Chua Zhong Heng | [Github](https://github.com/Cazh1/tp) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"NaychiMin":1,"DextheChik3n":1,"Cazh1":1,"ziyi105":1,"ShaniceTang":2,"-":3}},{"path":"src/main/java/seedu/cafectrl/CafeCtrl.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.command.Command;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.parser.Parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"DextheChik3n"},"content":"/**","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"DextheChik3n"},"content":" * CafeCtrl application\u0027s entry point.","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"DextheChik3n"},"content":" * Initializes the application and starts the interaction with the user.","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"DextheChik3n"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DextheChik3n"},"content":"public class CafeCtrl {","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DextheChik3n"},"content":" private final Ui ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DextheChik3n"},"content":" private final Menu menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"DextheChik3n"},"content":" private Command command;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"DextheChik3n"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DextheChik3n"},"content":" * Private constructor for the CafeCtrl class, used for initializing the user interface and menu list.","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DextheChik3n"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DextheChik3n"},"content":" private CafeCtrl() {","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DextheChik3n"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DextheChik3n"},"content":" menu \u003d new Menu();","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DextheChik3n"},"content":" private void setup() {","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"DextheChik3n"},"content":" ui.showWelcome();","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"DextheChik3n"},"content":" ","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"DextheChik3n"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"DextheChik3n"},"content":" * The main loop of the CafeCtrl application.","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"DextheChik3n"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"DextheChik3n"},"content":" * \u003cp\u003e This method consistently receives user input, parses commands, and executes the respective command","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"DextheChik3n"},"content":" * until the user enters a \"bye\" command, terminating the application.\u003c/p\u003e","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"DextheChik3n"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"DextheChik3n"},"content":" private void run() {","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"DextheChik3n"},"content":" ui.printLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"DextheChik3n"},"content":" do {","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"DextheChik3n"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"DextheChik3n"},"content":" String fullUserInput \u003d ui.receiveUserInput();","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"DextheChik3n"},"content":" command \u003d Parser.parseCommand(menu, fullUserInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"DextheChik3n"},"content":" command.execute(menu, ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"DextheChik3n"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"DextheChik3n"},"content":" ui.showToUser(e.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"DextheChik3n"},"content":" } finally {","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"DextheChik3n"},"content":" ui.printLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"DextheChik3n"},"content":" } while (!command.isExit());","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"DextheChik3n"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"DextheChik3n"},"content":" CafeCtrl cafeCtrl \u003d new CafeCtrl();","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"DextheChik3n"},"content":" cafeCtrl.setup();","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"DextheChik3n"},"content":" cafeCtrl.run();","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"DextheChik3n"},"content":"}","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"DextheChik3n":56}},{"path":"src/main/java/seedu/cafectrl/command/AddDishCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"Cazh1"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"Cazh1"},"content":" * Adds a menu item to the user","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"Cazh1"},"content":"public class AddDishCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"Cazh1"},"content":" public static final String COMMAND_WORD \u003d \"add\";","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DextheChik3n"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"DextheChik3n"},"content":" + \": Add dish to menu\\n\"","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"DextheChik3n"},"content":" + \"Parameters: DISH_NAME, PRICE, INGREDIENT1_NAME, INGREDIENT1_QTY \"","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"DextheChik3n"},"content":" + \"[,INGREDIENT1_NAME, INGREDIENT1_QTY...] \\n\"","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"DextheChik3n"},"content":" + \"Example: \" + COMMAND_WORD","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"DextheChik3n"},"content":" + \" name/chicken rice price/3.00 ingredient/rice qty/1 cup, ingredient/chicken qty/100g\";","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"Cazh1"},"content":" Dish dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DextheChik3n"},"content":" public AddDishCommand(Dish dish) {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DextheChik3n"},"content":" this.dish \u003d dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"Cazh1"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"Cazh1"},"content":" public void execute(Menu menu, Ui ui) {","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"DextheChik3n"},"content":" menu.addDish(dish);","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DextheChik3n"},"content":" ui.printAddDishMessage(dish);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"Cazh1"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"DextheChik3n":16,"Cazh1":11}},{"path":"src/main/java/seedu/cafectrl/command/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"Cazh1"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"Cazh1"},"content":" * Represents an executable command.","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"Cazh1"},"content":"public class Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"NaychiMin"},"content":" public int index;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"Cazh1"},"content":" public void setIndex(int index) {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"Cazh1"},"content":" this.index \u003d index;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"DextheChik3n"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DextheChik3n"},"content":" * check whether this command is an exit command (user input \"bye\")","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DextheChik3n"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DextheChik3n"},"content":" * default returns false, this method will be overridden in ExitCommand","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DextheChik3n"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DextheChik3n"},"content":" public boolean isExit() {","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DextheChik3n"},"content":" return false;","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"Cazh1"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"Cazh1"},"content":" * Executes the command and returns the result.","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"Cazh1"},"content":" public void execute(Menu menu, Ui ui) {","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"Cazh1"},"content":" throw new UnsupportedOperationException(\"This method is to be implemented by child classes\");","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"Cazh1"},"content":" };","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"Cazh1"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NaychiMin":1,"DextheChik3n":12,"Cazh1":19}},{"path":"src/main/java/seedu/cafectrl/command/DeleteDishCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"ShaniceTang"},"content":"import seedu.cafectrl.ui.Messages;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"Cazh1"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"Cazh1"},"content":" * Deletes a menu item identified using it\u0027s last displayed index from the menu.","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"Cazh1"},"content":"public class DeleteDishCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ziyi105"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"Cazh1"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"Cazh1"},"content":" + \": Deletes the menu item identified by the index number used in the last menu listing.\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"Cazh1"},"content":" + \"Parameters: INDEX\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"Cazh1"},"content":" + \"Example: \" + COMMAND_WORD + \" 1\";","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"ShaniceTang"},"content":" public DeleteDishCommand(int listIndex) {","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ShaniceTang"},"content":" this.index \u003d listIndex;","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"Cazh1"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"Cazh1"},"content":" public void execute(Menu menu, Ui ui) {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"ShaniceTang"},"content":" try {","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"ShaniceTang"},"content":" int dishIndexToBeDeleted \u003d index - Ui.OFFSET_LIST_INDEX;","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"ShaniceTang"},"content":" Dish selectedDish \u003d menu.getMenuItemsList().get(dishIndexToBeDeleted);","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"ShaniceTang"},"content":" ui.showDeleteMessage(selectedDish);","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"ShaniceTang"},"content":" menu.removeDish(dishIndexToBeDeleted);","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"ShaniceTang"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"ShaniceTang"},"content":" ui.showToUser(Messages.INVALID_DISH_INDEX);","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"ShaniceTang"},"content":" throw new IndexOutOfBoundsException();","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"ShaniceTang"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"DextheChik3n":4,"Cazh1":14,"ziyi105":2,"ShaniceTang":16}},{"path":"src/main/java/seedu/cafectrl/command/EditPriceCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ziyi105"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":"/**","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"ziyi105"},"content":" * Edit the price of a dish of a certain index","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"ziyi105"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ziyi105"},"content":"public class EditPriceCommand extends Command {","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"ziyi105"},"content":" public static final String COMMAND_WORD \u003d \"edit_price\";","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"ziyi105"},"content":" private final int menuID;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"ziyi105"},"content":" private final float newPrice;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"ziyi105"},"content":" public EditPriceCommand(int menuID, float newPrice) {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"ziyi105"},"content":" this.menuID \u003d menuID;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"ziyi105"},"content":" this.newPrice \u003d newPrice;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"ziyi105"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ziyi105"},"content":" * Set new price of the dish and show edit price message","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ziyi105"},"content":" * @param menu menu of the current session","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"ziyi105"},"content":" * @param ui ui of the current session","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"ziyi105"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"ziyi105"},"content":" public void execute(Menu menu, Ui ui) {","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"ziyi105"},"content":" Dish dish \u003d menu.getDish(this.menuID - Ui.OFFSET_LIST_INDEX);","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"ziyi105"},"content":" dish.setPrice(this.newPrice);","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"ziyi105"},"content":" ui.showEditPriceMessage(dish.toString());","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"ziyi105":31}},{"path":"src/main/java/seedu/cafectrl/command/ExitCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"Cazh1"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"Cazh1"},"content":" public static final String COMMAND_WORD \u003d \"bye\";","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"DextheChik3n"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"DextheChik3n"},"content":" * Overrides the isExit() method which returns false","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DextheChik3n"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DextheChik3n"},"content":" * @return true","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DextheChik3n"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"DextheChik3n"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"DextheChik3n"},"content":" public boolean isExit() {","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"DextheChik3n"},"content":" return true;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"Cazh1"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"Cazh1"},"content":" public void execute(Menu menu, Ui ui) {","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DextheChik3n"},"content":" ui.printLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DextheChik3n"},"content":" ui.showGoodbye();","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"Cazh1"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"DextheChik3n":17,"Cazh1":8}},{"path":"src/main/java/seedu/cafectrl/command/IncorrectCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"Cazh1"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"Cazh1"},"content":" * Represents an incorrect command. Upon execution, produces some feedback to the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"Cazh1"},"content":"public class IncorrectCommand extends Command{","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"Cazh1"},"content":" public final String feedbackToUser;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"Cazh1"},"content":" public IncorrectCommand(String feedbackToUser) {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"Cazh1"},"content":" this.feedbackToUser \u003d feedbackToUser;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"Cazh1"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"Cazh1"},"content":" public void execute(Menu menu, Ui ui) {","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"DextheChik3n"},"content":" ui.showToUser(feedbackToUser);","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"Cazh1"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"DextheChik3n":4,"Cazh1":16}},{"path":"src/main/java/seedu/cafectrl/command/ListIngredientCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"NaychiMin"},"content":"import seedu.cafectrl.ui.Messages;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"Cazh1"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"Cazh1"},"content":" * Lists all ingredients used in the selected dish to the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"Cazh1"},"content":"public class ListIngredientCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"Cazh1"},"content":" public static final String COMMAND_WORD \u003d \"list_ingredients\";","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"Cazh1"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"Cazh1"},"content":" + \": Lists out the ingredients needed along with the quantity for a specific dish.\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"Cazh1"},"content":" + \"Parameters: INDEX\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"Cazh1"},"content":" + \"Example: \" + COMMAND_WORD + \" 1\";","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"NaychiMin"},"content":" public ListIngredientCommand(int listIndex) {","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"NaychiMin"},"content":" this.index \u003d listIndex;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"Cazh1"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"Cazh1"},"content":" public void execute(Menu menu, Ui ui) {","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"NaychiMin"},"content":" try {","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"NaychiMin"},"content":" Dish selectedDish \u003d menu.getMenuItemsList().get(index - Ui.OFFSET_LIST_INDEX);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"NaychiMin"},"content":" ui.printIngredients(selectedDish);","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"NaychiMin"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"NaychiMin"},"content":" throw new IllegalArgumentException(Messages.INVALID_DISH_INDEX);","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"Cazh1"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NaychiMin":13,"DextheChik3n":4,"Cazh1":14}},{"path":"src/main/java/seedu/cafectrl/command/ListMenuCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"ShaniceTang"},"content":"import seedu.cafectrl.ui.Messages;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"Cazh1"},"content":"import java.text.DecimalFormat;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"Cazh1"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"Cazh1"},"content":" * Lists all dishes in the menu to the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"Cazh1"},"content":"public class ListMenuCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"Cazh1"},"content":" public static final String COMMAND_WORD \u003d \"list_menu\";","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"Cazh1"},"content":" private static final DecimalFormat dollarValue \u003d new DecimalFormat(\"0.00\");","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"Cazh1"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"Cazh1"},"content":" * Iterates through the menu arraylist, outputting the dish name and dish price.","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"Cazh1"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"Cazh1"},"content":" * @param menu ArrayList of Dishes","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"Cazh1"},"content":" * @param ui Handles the interactions with user","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"Cazh1"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"Cazh1"},"content":" public void execute(Menu menu, Ui ui) {","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"Cazh1"},"content":" if (menu.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"Cazh1"},"content":" printEmptyMenu(ui);","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"Cazh1"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"Cazh1"},"content":" printFullMenu(menu, ui);","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"Cazh1"},"content":" };","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"Cazh1"},"content":" public void printEmptyMenu(Ui ui) {","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"Cazh1"},"content":" ui.showToUser(Messages.MENU_EMPTY_MESSAGE);","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"Cazh1"},"content":" public void printFullMenu(Menu menu, Ui ui) {","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"Cazh1"},"content":" ui.showToUser(Messages.MENU_TOP, Messages.LIST_MENU_MESSAGE,","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"Cazh1"},"content":" Messages.MENU_CORNER, Messages.MENU_TITLE, Messages.MENU_CORNER);","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"Cazh1"},"content":" for(int i \u003d0; i \u003c menu.getSize(); i++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"Cazh1"},"content":" String indexNum \u003d String.valueOf(i+1);","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"Cazh1"},"content":" String dishName \u003d menu.getDish(i).getName();","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"Cazh1"},"content":" String dishPrice \u003d dollarValue.format(menu.getDish(i).getPrice());","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"Cazh1"},"content":" ui.showToUserFormat(indexNum + \". \" + dishName,\" $\" + dishPrice);","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"Cazh1"},"content":" ui.showToUser(Messages.MENU_TOP);","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"Cazh1"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"DextheChik3n":3,"Cazh1":43,"ShaniceTang":1}},{"path":"src/main/java/seedu/cafectrl/data/Menu.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.data;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"ziyi105"},"content":"public class Menu {","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"ziyi105"},"content":" private ArrayList\u003cDish\u003e menuItems;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"DextheChik3n"},"content":" public Menu() {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DextheChik3n"},"content":" this.menuItems \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"ziyi105"},"content":" public Menu(ArrayList\u003cDish\u003e menuItems) {","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"ziyi105"},"content":" this.menuItems \u003d menuItems;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"NaychiMin"},"content":" public ArrayList\u003cDish\u003e getMenuItemsList() {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"NaychiMin"},"content":" return menuItems;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DextheChik3n"},"content":" public int getSize() {","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"DextheChik3n"},"content":" return menuItems.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"DextheChik3n"},"content":" public Dish getDish(int menuID) {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"DextheChik3n"},"content":" return menuItems.get(menuID);","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"DextheChik3n"},"content":" public void removeDish(int menuID) {","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"DextheChik3n"},"content":" menuItems.remove(menuID);","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"DextheChik3n"},"content":" public void addDish(Dish dish) {","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"DextheChik3n"},"content":" menuItems.add(dish);","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"ziyi105"},"content":" public boolean isValidDishIndex(int dishIndex) {","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"ziyi105"},"content":" int offSetDishIndex \u003d dishIndex - Ui.OFFSET_LIST_INDEX;","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"ziyi105"},"content":" return offSetDishIndex \u003e\u003d 0 \u0026\u0026 offSetDishIndex \u003c this.getSize();","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"NaychiMin":4,"DextheChik3n":18,"ziyi105":17}},{"path":"src/main/java/seedu/cafectrl/data/dish/Dish.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.data.dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ziyi105"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"ziyi105"},"content":"public class Dish {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":" private String name;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":" private ArrayList\u003cIngredient\u003e ingredients;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"ziyi105"},"content":" private float price;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"ziyi105"},"content":" public Dish(String name, ArrayList\u003cIngredient\u003e ingredients, float price) {","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"ziyi105"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"ziyi105"},"content":" this.ingredients \u003d ingredients;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"ziyi105"},"content":" this.price \u003d price;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Cazh1"},"content":" public Dish(String name, float price) {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"Cazh1"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"Cazh1"},"content":" this.ingredients \u003d null;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"Cazh1"},"content":" this.price \u003d price;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"DextheChik3n"},"content":" public String getName() {","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"DextheChik3n"},"content":" return name;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"DextheChik3n"},"content":" public ArrayList\u003cIngredient\u003e getIngredients() {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"DextheChik3n"},"content":" return ingredients;","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"DextheChik3n"},"content":" public float getPrice() {","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"DextheChik3n"},"content":" return price;","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"ziyi105"},"content":" public void setPrice(float newPrice) {","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"ziyi105"},"content":" this.price \u003d newPrice;","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"ziyi105"},"content":" public String toString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"ziyi105"},"content":" return this.name + \" $\" + this.price;","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"DextheChik3n":13,"Cazh1":5,"ziyi105":22}},{"path":"src/main/java/seedu/cafectrl/data/dish/Ingredient.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.data.dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ziyi105"},"content":"public class Ingredient {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":" private final String name;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"DextheChik3n"},"content":" private final String quantity;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":" public Ingredient(String name) {","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"ziyi105"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"DextheChik3n"},"content":" quantity \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"DextheChik3n"},"content":" public Ingredient(String name, String quantity) {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"DextheChik3n"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"DextheChik3n"},"content":" this.quantity \u003d quantity;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"DextheChik3n"},"content":" public String getName() {","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"DextheChik3n"},"content":" return name;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"DextheChik3n"},"content":" public String getQuantity() {","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"DextheChik3n"},"content":" return quantity;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"DextheChik3n"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"DextheChik3n"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"DextheChik3n"},"content":" return name + \" - \" + quantity;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"NaychiMin":1,"DextheChik3n":21,"ziyi105":8}},{"path":"src/main/java/seedu/cafectrl/parser/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.command.AddDishCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.command.Command;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.command.IncorrectCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.command.DeleteDishCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.command.EditPriceCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.command.ExitCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.command.ListIngredientCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.command.ListMenuCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.ui.Messages;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Ingredient;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"ziyi105"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"ziyi105"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"ziyi105"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"Cazh1"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ziyi105"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"ziyi105"},"content":" * Parse everything received from the users on terminal","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"ziyi105"},"content":" * into a format that can be interpreted by other core classes","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"ziyi105"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"ziyi105"},"content":"public class Parser {","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"DextheChik3n"},"content":" public static final Pattern COMMAND_ARGUMENT_FORMAT \u003d Pattern.compile(\"(?\u003ccommandWord\u003e\\\\S+)\\\\s?(?\u003carguments\u003e.*)\");","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"ziyi105"},"content":" // Command Argument Patterns","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"DextheChik3n"},"content":" public static final String INGREDIENT_ARGUMENT_STRING \u003d \"ingredient/(?\u003cname\u003e[A-Za-z0-9\\\\s]+) \"","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"DextheChik3n"},"content":" + \"qty/(?\u003cqty\u003e[A-Za-z0-9\\\\s]+)\";","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"DextheChik3n"},"content":" public static final String INGREDIENT_DIVIDER_REGEX \u003d \", \";","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"DextheChik3n"},"content":" public static final String INGREDIENT_DIVIDER_STRING \u003d \",\";","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"DextheChik3n"},"content":" public static final String INGREDIENT_NAME_REGEX_GROUP_LABEL \u003d \"name\";","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"DextheChik3n"},"content":" public static final String INGREDIENT_QTY_REGEX_GROUP_LABEL \u003d \"qty\";","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"DextheChik3n"},"content":" public static final int DISH_NAME_MATCHER_GROUP_NUM \u003d 1;","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"DextheChik3n"},"content":" public static final int PRICE_MATCHER_GROUP_NUM \u003d 2;","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"DextheChik3n"},"content":" public static final int INGREDIENT_LIST_MATCHER_GROUP_NUM \u003d 4;","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"DextheChik3n"},"content":" private static final String ADD_ARGUMENT_STRING \u003d \"name/([A-Za-z0-9\\\\s]+) \"","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"DextheChik3n"},"content":" + \"price/([+-]?(?\u003d\\\\.\\\\d|\\\\d)(?:\\\\d+)?(?:\\\\.?\\\\d*))(?:[Ee]([+-]?\\\\d+))? \"","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"DextheChik3n"},"content":" + \"(ingredient/[A-Za-z0-9\\\\s]+ qty/[A-Za-z0-9\\\\s]+\"","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"DextheChik3n"},"content":" + \"(?:, ingredient/[A-Za-z0-9\\\\s]+ qty/[A-Za-z0-9\\\\s]+)*)\";","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"ziyi105"},"content":" private static final String LIST_INGREDIENTS_ARGUMENT_STRING \u003d \"(\\\\d+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"ziyi105"},"content":" private static final String DELETE_ARGUMENT_STRING \u003d \"(\\\\d+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"ziyi105"},"content":" private static final String EDIT_PRICE_ARGUMENT_STRING \u003d \"index/(\\\\d+) price/(\\\\d+(\\\\.\\\\d+)?)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"ziyi105"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"ziyi105"},"content":" * Parse userInput and group it under commandWord and arguments","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"ziyi105"},"content":" * use commandWord to find the matching command and prepare the command","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"Cazh1"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"ziyi105"},"content":" * @param userInput full user input","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"Cazh1"},"content":" * @param menu The arraylist object created that stores current tasks","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"ziyi105"},"content":" * @return command requested by the user","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"ziyi105"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"Cazh1"},"content":" public static Command parseCommand(Menu menu, String userInput) {","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"ziyi105"},"content":" final Matcher matcher \u003d COMMAND_ARGUMENT_FORMAT.matcher(userInput.trim());","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"ziyi105"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"ziyi105"},"content":" return new IncorrectCommand(\"Incorrect command format!\");","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"ziyi105"},"content":" final String commandWord \u003d matcher.group(\"commandWord\");","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"ziyi105"},"content":" final String arguments \u003d matcher.group(\"arguments\");","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"ziyi105"},"content":" switch (commandWord) {","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"ziyi105"},"content":" case AddDishCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"ziyi105"},"content":" return prepareAdd(arguments);","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":70,"author":{"gitId":"ziyi105"},"content":" case DeleteDishCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"ShaniceTang"},"content":" return prepareDelete(menu, arguments);","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"ziyi105"},"content":" case ListIngredientCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"NaychiMin"},"content":" return prepareListIngredient(menu, arguments);","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"ziyi105"},"content":" case ListMenuCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"ziyi105"},"content":" return prepareListMenu();","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"ziyi105"},"content":" case EditPriceCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"ziyi105"},"content":" return prepareEditPriceCommand(menu, arguments);","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"Cazh1"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"Cazh1"},"content":" return new ExitCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"ziyi105"},"content":" default:","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"ShaniceTang"},"content":" return new IncorrectCommand(Messages.UNKNOWN_COMMAND_MESSAGE);","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"ziyi105"},"content":" // All prepareCommand Classes","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"DextheChik3n"},"content":" private static Command prepareListMenu() {","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"Cazh1"},"content":" return new ListMenuCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"ziyi105"},"content":" private static Command prepareEditListCommand(String arguments) {","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"ziyi105"},"content":" return null;","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"ziyi105"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"ziyi105"},"content":" * Parse argument in the context of edit price command","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"ziyi105"},"content":" * @param menu menu of the current session","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"ziyi105"},"content":" * @param arguments string that matches group arguments","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"ziyi105"},"content":" * @return new EditDishCommand","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"ziyi105"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"ziyi105"},"content":" private static Command prepareEditPriceCommand(Menu menu, String arguments) {","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"ziyi105"},"content":" Pattern editDishArgumentsPattern \u003d Pattern.compile(EDIT_PRICE_ARGUMENT_STRING);","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"ziyi105"},"content":" Matcher matcher \u003d editDishArgumentsPattern.matcher(arguments);","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"ziyi105"},"content":" // Checks whether the overall pattern of edit price arguments is correct","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"ziyi105"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":111,"author":{"gitId":"ziyi105"},"content":" return new IncorrectCommand(Messages.MISSING_ARGUMENT_FOR_EDIT_PRICE);","lastModifiedDate":"2023-10-18"},{"lineNumber":112,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"ziyi105"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"ziyi105"},"content":" int dishIndexGroup \u003d 1;","lastModifiedDate":"2023-10-18"},{"lineNumber":116,"author":{"gitId":"ziyi105"},"content":" int newPriceGroup \u003d 2;","lastModifiedDate":"2023-10-18"},{"lineNumber":117,"author":{"gitId":"ziyi105"},"content":" int dishIndex \u003d Integer.parseInt(matcher.group(dishIndexGroup));","lastModifiedDate":"2023-10-18"},{"lineNumber":118,"author":{"gitId":"ziyi105"},"content":" float newPrice \u003d Float.parseFloat(matcher.group(newPriceGroup));","lastModifiedDate":"2023-10-18"},{"lineNumber":119,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"ziyi105"},"content":" // Check whether the dish index is valid","lastModifiedDate":"2023-10-18"},{"lineNumber":121,"author":{"gitId":"ziyi105"},"content":" if (!menu.isValidDishIndex(dishIndex)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"ziyi105"},"content":" return new IncorrectCommand(Messages.INVALID_DISH_INDEX);","lastModifiedDate":"2023-10-18"},{"lineNumber":123,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":124,"author":{"gitId":"ziyi105"},"content":" return new EditPriceCommand(dishIndex, newPrice);","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"ziyi105"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":126,"author":{"gitId":"ziyi105"},"content":" return new IncorrectCommand(Messages.WRONG_ARGUMENT_TYPE_FOR_EDIT_PRICE);","lastModifiedDate":"2023-10-18"},{"lineNumber":127,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":129,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"DextheChik3n"},"content":" private static Command prepareAdd(String arguments) {","lastModifiedDate":"2023-10-17"},{"lineNumber":131,"author":{"gitId":"ziyi105"},"content":" final Pattern addArgumentPatter \u003d Pattern.compile(ADD_ARGUMENT_STRING);","lastModifiedDate":"2023-10-17"},{"lineNumber":132,"author":{"gitId":"ziyi105"},"content":" Matcher matcher \u003d addArgumentPatter.matcher(arguments);","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"ziyi105"},"content":" // Checks whether the overall pattern of add arguments is correct","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"DextheChik3n"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":136,"author":{"gitId":"DextheChik3n"},"content":" return new IncorrectCommand(\"Error: Incorrect format for the add command.\\n\"","lastModifiedDate":"2023-10-18"},{"lineNumber":137,"author":{"gitId":"DextheChik3n"},"content":" + AddDishCommand.MESSAGE_USAGE);","lastModifiedDate":"2023-10-18"},{"lineNumber":138,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":139,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":140,"author":{"gitId":"ziyi105"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":141,"author":{"gitId":"ziyi105"},"content":" // To retrieve specific arguments from arguments","lastModifiedDate":"2023-10-17"},{"lineNumber":142,"author":{"gitId":"DextheChik3n"},"content":" String dishName \u003d matcher.group(DISH_NAME_MATCHER_GROUP_NUM);","lastModifiedDate":"2023-10-18"},{"lineNumber":143,"author":{"gitId":"DextheChik3n"},"content":" float price \u003d Float.parseFloat(matcher.group(PRICE_MATCHER_GROUP_NUM));","lastModifiedDate":"2023-10-18"},{"lineNumber":144,"author":{"gitId":"DextheChik3n"},"content":" String ingredientsListString \u003d matcher.group(INGREDIENT_LIST_MATCHER_GROUP_NUM);","lastModifiedDate":"2023-10-18"},{"lineNumber":145,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":146,"author":{"gitId":"DextheChik3n"},"content":" IncorrectCommand incorrectCommand1 \u003d checkNegativePrice(price);","lastModifiedDate":"2023-10-18"},{"lineNumber":147,"author":{"gitId":"DextheChik3n"},"content":" if (incorrectCommand1 !\u003d null) {","lastModifiedDate":"2023-10-18"},{"lineNumber":148,"author":{"gitId":"DextheChik3n"},"content":" return incorrectCommand1;","lastModifiedDate":"2023-10-18"},{"lineNumber":149,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":150,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":151,"author":{"gitId":"DextheChik3n"},"content":" // Capture the list of ingredients","lastModifiedDate":"2023-10-18"},{"lineNumber":152,"author":{"gitId":"DextheChik3n"},"content":" ArrayList\u003cIngredient\u003e ingredients \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":153,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":154,"author":{"gitId":"DextheChik3n"},"content":" IncorrectCommand incorrectCommand2 \u003d ingredientParsing(ingredientsListString, ingredients);","lastModifiedDate":"2023-10-18"},{"lineNumber":155,"author":{"gitId":"DextheChik3n"},"content":" if (incorrectCommand2 !\u003d null) {","lastModifiedDate":"2023-10-18"},{"lineNumber":156,"author":{"gitId":"DextheChik3n"},"content":" return incorrectCommand2;","lastModifiedDate":"2023-10-18"},{"lineNumber":157,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":158,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":159,"author":{"gitId":"DextheChik3n"},"content":" Dish dish \u003d new Dish(dishName, ingredients, price);","lastModifiedDate":"2023-10-18"},{"lineNumber":160,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":161,"author":{"gitId":"DextheChik3n"},"content":" return new AddDishCommand(dish);","lastModifiedDate":"2023-10-18"},{"lineNumber":162,"author":{"gitId":"ziyi105"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":163,"author":{"gitId":"DextheChik3n"},"content":" return new IncorrectCommand(\"MESSAGE_INVALID_ADD_COMMAND_FORMAT\"","lastModifiedDate":"2023-10-18"},{"lineNumber":164,"author":{"gitId":"DextheChik3n"},"content":" + AddDishCommand.MESSAGE_USAGE);","lastModifiedDate":"2023-10-18"},{"lineNumber":165,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":166,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":167,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":168,"author":{"gitId":"DextheChik3n"},"content":" private static IncorrectCommand checkNegativePrice(float price) {","lastModifiedDate":"2023-10-18"},{"lineNumber":169,"author":{"gitId":"DextheChik3n"},"content":" if (price \u003c 0) {","lastModifiedDate":"2023-10-18"},{"lineNumber":170,"author":{"gitId":"DextheChik3n"},"content":" return new IncorrectCommand(\"MESSAGE_INVALID_ADD_COMMAND_FORMAT\"","lastModifiedDate":"2023-10-18"},{"lineNumber":171,"author":{"gitId":"DextheChik3n"},"content":" + AddDishCommand.MESSAGE_USAGE);","lastModifiedDate":"2023-10-18"},{"lineNumber":172,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":173,"author":{"gitId":"DextheChik3n"},"content":" return null;","lastModifiedDate":"2023-10-18"},{"lineNumber":174,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":175,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":176,"author":{"gitId":"DextheChik3n"},"content":" private static IncorrectCommand ingredientParsing(String ingredientsListString, ArrayList\u003cIngredient\u003e ingredients) {","lastModifiedDate":"2023-10-18"},{"lineNumber":177,"author":{"gitId":"DextheChik3n"},"content":" String[] ingredientListInputText \u003d {ingredientsListString};","lastModifiedDate":"2023-10-18"},{"lineNumber":178,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":179,"author":{"gitId":"DextheChik3n"},"content":" //check if there is more than 1 ingredient","lastModifiedDate":"2023-10-18"},{"lineNumber":180,"author":{"gitId":"DextheChik3n"},"content":" if (ingredientsListString.contains(INGREDIENT_DIVIDER_STRING)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":181,"author":{"gitId":"DextheChik3n"},"content":" //split the ingredients into separate individual ingredients","lastModifiedDate":"2023-10-18"},{"lineNumber":182,"author":{"gitId":"DextheChik3n"},"content":" ingredientListInputText \u003d ingredientsListString.split(INGREDIENT_DIVIDER_REGEX);","lastModifiedDate":"2023-10-18"},{"lineNumber":183,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":184,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":185,"author":{"gitId":"DextheChik3n"},"content":" for (String inputIngredientText: ingredientListInputText) {","lastModifiedDate":"2023-10-18"},{"lineNumber":186,"author":{"gitId":"DextheChik3n"},"content":" final Pattern ingredientPattern \u003d Pattern.compile(INGREDIENT_ARGUMENT_STRING);","lastModifiedDate":"2023-10-18"},{"lineNumber":187,"author":{"gitId":"DextheChik3n"},"content":" Matcher ingredientMatcher \u003d ingredientPattern.matcher(inputIngredientText);","lastModifiedDate":"2023-10-18"},{"lineNumber":188,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":189,"author":{"gitId":"DextheChik3n"},"content":" if (!ingredientMatcher.matches()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":190,"author":{"gitId":"DextheChik3n"},"content":" return new IncorrectCommand(\"Error: Incorrect format for the ingredients\\n\"","lastModifiedDate":"2023-10-18"},{"lineNumber":191,"author":{"gitId":"DextheChik3n"},"content":" + AddDishCommand.MESSAGE_USAGE);","lastModifiedDate":"2023-10-18"},{"lineNumber":192,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":193,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":194,"author":{"gitId":"DextheChik3n"},"content":" String ingredientName \u003d ingredientMatcher.group(INGREDIENT_NAME_REGEX_GROUP_LABEL);","lastModifiedDate":"2023-10-18"},{"lineNumber":195,"author":{"gitId":"DextheChik3n"},"content":" String ingredientQty \u003d ingredientMatcher.group(INGREDIENT_QTY_REGEX_GROUP_LABEL);","lastModifiedDate":"2023-10-18"},{"lineNumber":196,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":197,"author":{"gitId":"DextheChik3n"},"content":" Ingredient ingredient \u003d new Ingredient(ingredientName, ingredientQty);","lastModifiedDate":"2023-10-18"},{"lineNumber":198,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":199,"author":{"gitId":"DextheChik3n"},"content":" ingredients.add(ingredient);","lastModifiedDate":"2023-10-18"},{"lineNumber":200,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":201,"author":{"gitId":"DextheChik3n"},"content":" return null;","lastModifiedDate":"2023-10-18"},{"lineNumber":202,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":203,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":204,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":205,"author":{"gitId":"Cazh1"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":206,"author":{"gitId":"Cazh1"},"content":" * Parses arguments in the context of the ListIngredient command.","lastModifiedDate":"2023-10-17"},{"lineNumber":207,"author":{"gitId":"NaychiMin"},"content":" * @param menu menu of the current session","lastModifiedDate":"2023-10-18"},{"lineNumber":208,"author":{"gitId":"NaychiMin"},"content":" * @param arguments string that matches group arguments","lastModifiedDate":"2023-10-18"},{"lineNumber":209,"author":{"gitId":"Cazh1"},"content":" * @return the prepared command","lastModifiedDate":"2023-10-17"},{"lineNumber":210,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":211,"author":{"gitId":"NaychiMin"},"content":" private static Command prepareListIngredient(Menu menu, String arguments) {","lastModifiedDate":"2023-10-18"},{"lineNumber":212,"author":{"gitId":"NaychiMin"},"content":" final Pattern prepareListPattern \u003d Pattern.compile(LIST_INGREDIENTS_ARGUMENT_STRING);","lastModifiedDate":"2023-10-18"},{"lineNumber":213,"author":{"gitId":"NaychiMin"},"content":" Matcher matcher \u003d prepareListPattern.matcher(arguments.trim());","lastModifiedDate":"2023-10-18"},{"lineNumber":214,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":215,"author":{"gitId":"NaychiMin"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":216,"author":{"gitId":"NaychiMin"},"content":" return new IncorrectCommand(Messages.MISSING_ARGUMENT_FOR_LIST_INGREDIENTS);","lastModifiedDate":"2023-10-18"},{"lineNumber":217,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":218,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":219,"author":{"gitId":"NaychiMin"},"content":" int dishIndex \u003d Integer.parseInt(matcher.group(1));","lastModifiedDate":"2023-10-18"},{"lineNumber":220,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":221,"author":{"gitId":"NaychiMin"},"content":" if (!menu.isValidDishIndex(dishIndex)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":222,"author":{"gitId":"NaychiMin"},"content":" return new IncorrectCommand(Messages.INVALID_DISH_INDEX);","lastModifiedDate":"2023-10-18"},{"lineNumber":223,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":224,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":225,"author":{"gitId":"NaychiMin"},"content":" return new ListIngredientCommand(dishIndex);","lastModifiedDate":"2023-10-18"},{"lineNumber":226,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":227,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":228,"author":{"gitId":"ShaniceTang"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":229,"author":{"gitId":"ShaniceTang"},"content":" * Parses arguments in the context of the Delete command.","lastModifiedDate":"2023-10-17"},{"lineNumber":230,"author":{"gitId":"ShaniceTang"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":231,"author":{"gitId":"ShaniceTang"},"content":" * @param menu menu of the current session","lastModifiedDate":"2023-10-18"},{"lineNumber":232,"author":{"gitId":"ShaniceTang"},"content":" * @param arguments string that matches group arguments","lastModifiedDate":"2023-10-18"},{"lineNumber":233,"author":{"gitId":"ShaniceTang"},"content":" * @return DeleteDishCommand if command is valid, IncorrectCommand otherwise","lastModifiedDate":"2023-10-18"},{"lineNumber":234,"author":{"gitId":"ShaniceTang"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":235,"author":{"gitId":"ShaniceTang"},"content":" private static Command prepareDelete(Menu menu, String arguments) {","lastModifiedDate":"2023-10-18"},{"lineNumber":236,"author":{"gitId":"ShaniceTang"},"content":" Pattern deleteDishArgumentsPattern \u003d Pattern.compile(DELETE_ARGUMENT_STRING);","lastModifiedDate":"2023-10-18"},{"lineNumber":237,"author":{"gitId":"ShaniceTang"},"content":" Matcher matcher \u003d deleteDishArgumentsPattern.matcher(arguments.trim());","lastModifiedDate":"2023-10-18"},{"lineNumber":238,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":239,"author":{"gitId":"ShaniceTang"},"content":" // Checks whether the overall pattern of delete price arguments is correct","lastModifiedDate":"2023-10-18"},{"lineNumber":240,"author":{"gitId":"ShaniceTang"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":241,"author":{"gitId":"ShaniceTang"},"content":" return new IncorrectCommand(Messages.MISSING_ARGUMENT_FOR_DELETE);","lastModifiedDate":"2023-10-18"},{"lineNumber":242,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":243,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":244,"author":{"gitId":"ShaniceTang"},"content":" int listIndexArgGroup \u003d 1;","lastModifiedDate":"2023-10-18"},{"lineNumber":245,"author":{"gitId":"ShaniceTang"},"content":" int dishIndex \u003d Integer.parseInt(matcher.group(listIndexArgGroup));","lastModifiedDate":"2023-10-18"},{"lineNumber":246,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":247,"author":{"gitId":"ShaniceTang"},"content":" if (!menu.isValidDishIndex(dishIndex)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":248,"author":{"gitId":"ShaniceTang"},"content":" return new IncorrectCommand(Messages.INVALID_DISH_INDEX);","lastModifiedDate":"2023-10-18"},{"lineNumber":249,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":250,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":251,"author":{"gitId":"ShaniceTang"},"content":" return new DeleteDishCommand(dishIndex);","lastModifiedDate":"2023-10-18"},{"lineNumber":252,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":253,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":254,"author":{"gitId":"Cazh1"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":255,"author":{"gitId":"Cazh1"},"content":" * Parses the given arguments string to identify task index number.","lastModifiedDate":"2023-10-17"},{"lineNumber":256,"author":{"gitId":"Cazh1"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":257,"author":{"gitId":"Cazh1"},"content":" * @param userInput arguments string to parse as index number","lastModifiedDate":"2023-10-17"},{"lineNumber":258,"author":{"gitId":"Cazh1"},"content":" * @param command expected String name of the command called","lastModifiedDate":"2023-10-17"},{"lineNumber":259,"author":{"gitId":"Cazh1"},"content":" * @return the parsed index number","lastModifiedDate":"2023-10-17"},{"lineNumber":260,"author":{"gitId":"Cazh1"},"content":" * @throws ParseException if no region of the args string could be found for the index","lastModifiedDate":"2023-10-17"},{"lineNumber":261,"author":{"gitId":"Cazh1"},"content":" * @throws NumberFormatException the args string region is not a valid number","lastModifiedDate":"2023-10-17"},{"lineNumber":262,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":263,"author":{"gitId":"NaychiMin"},"content":" private static int parseArgsAsDisplayedIndex(String userInput, String command)","lastModifiedDate":"2023-10-17"},{"lineNumber":264,"author":{"gitId":"Cazh1"},"content":" throws ParseException, NumberFormatException {","lastModifiedDate":"2023-10-17"},{"lineNumber":265,"author":{"gitId":"Cazh1"},"content":" String formattedString \u003d userInput.replace(command, \"\").trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":266,"author":{"gitId":"NaychiMin"},"content":" return Integer.parseInt(formattedString);","lastModifiedDate":"2023-10-17"},{"lineNumber":267,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":268,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"NaychiMin":19,"DextheChik3n":72,"Cazh1":29,"ziyi105":123,"ShaniceTang":25}},{"path":"src/main/java/seedu/cafectrl/ui/Messages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ziyi105"},"content":"package seedu.cafectrl.ui;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"ziyi105"},"content":"public class Messages {","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"ziyi105"},"content":" // Error messages","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":" public static final String MISSING_ARGUMENT_FOR_EDIT_PRICE \u003d \"Error: Missing arguments \"","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":" + \"for edit price command.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"ShaniceTang"},"content":" public static final String MISSING_ARGUMENT_FOR_LIST_INGREDIENTS \u003d \"Error: Missing arguments \"","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"ShaniceTang"},"content":" + \"for list ingredients command.\";","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"ShaniceTang"},"content":" public static final String MISSING_ARGUMENT_FOR_DELETE \u003d \"Error: Missing arguments \"","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"ShaniceTang"},"content":" + \"for delete command.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"NaychiMin"},"content":" public static final String INVALID_DISH_INDEX \u003d \"Error: Invalid dish index.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"NaychiMin"},"content":" public static final String WRONG_ARGUMENT_TYPE_FOR_EDIT_PRICE \u003d \"Error: Invalid dish index. \\n \"","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"NaychiMin"},"content":" + \"Make sure dish index is \"","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"ziyi105"},"content":" + \"of type int and price is of type float!\";","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"ShaniceTang"},"content":" public static final String UNKNOWN_COMMAND_MESSAGE \u003d \"Error: Unknown command. \"","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"ShaniceTang"},"content":" + \"Type \u0027help\u0027 to view the accepted list of commands\";","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"ziyi105"},"content":" // Ui messages","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"ziyi105"},"content":" public static final String PRICE_MODIFIED_MESSAGE \u003d \"Price modified for the following dish: \";","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"ShaniceTang"},"content":" public static final String WELCOME_MESSAGE \u003d \"Hello! Welcome to CafeCTRL!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"ShaniceTang"},"content":" public static final String GOODBYE_MESSAGE \u003d \"Goodbye \u003c3 Have a great day ahead!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"Cazh1"},"content":" public static final String LIST_MENU_MESSAGE \u003d \"| Ah, behold, the grand menu of delights! |\";","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"Cazh1"},"content":" public static final String MENU_EMPTY_MESSAGE \u003d \"It seems our menu is currently taking a break. \"","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"Cazh1"},"content":" + \"Let\u0027s give it a wake-up call and fill \u0027er up with delectable delights, shall we?\";","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"Cazh1"},"content":" public static final String MENU_TOP \u003d \"+-----------------------------------------+\";","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"Cazh1"},"content":" public static final String MENU_CORNER \u003d \"+--------------------------+--------------+\";","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"Cazh1"},"content":" public static final String MENU_TITLE \u003d \"| Dish Name | Price |\";","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"ShaniceTang"},"content":" public static final String ADD_DISH_MESSAGE \u003d \"You have added the following dish...\";","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"NaychiMin":4,"Cazh1":6,"ziyi105":12,"ShaniceTang":19}},{"path":"src/main/java/seedu/cafectrl/ui/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Ingredient;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DextheChik3n"},"content":"import java.text.DecimalFormat;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"NaychiMin"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"NaychiMin"},"content":"public class Ui {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"DextheChik3n"},"content":" public static final int OFFSET_LIST_INDEX \u003d 1;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"DextheChik3n"},"content":" public static final String LINE_STRING \u003d \"-----------------------------------------------------\";","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"NaychiMin"},"content":" private final Scanner scanner;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"NaychiMin"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"NaychiMin"},"content":" * Constructs a UI instance with a Scanner for user input.","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"NaychiMin"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"NaychiMin"},"content":" public Ui() {","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"NaychiMin"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"DextheChik3n"},"content":" public void printLine() {","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DextheChik3n"},"content":" showToUser(LINE_STRING);","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"NaychiMin"},"content":" public String receiveUserInput() {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"DextheChik3n"},"content":" System.out.print(\"\u003e \");","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"NaychiMin"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"NaychiMin"},"content":" public void showWelcome() {","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"ShaniceTang"},"content":" showToUser(Messages.WELCOME_MESSAGE);","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"NaychiMin"},"content":" public void showGoodbye() {","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"ShaniceTang"},"content":" showToUser(Messages.GOODBYE_MESSAGE);","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"NaychiMin"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"NaychiMin"},"content":" * Prints out the quantity of each ingredient needed for the","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"NaychiMin"},"content":" * dish that the user selects.","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"NaychiMin"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"NaychiMin"},"content":" * @param selectedDish Dish for ingredients to be listed out.","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"NaychiMin"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"NaychiMin"},"content":" public void printIngredients(Dish selectedDish) {","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"NaychiMin"},"content":" String ingredientsString \u003d selectedDish.getName() + \" Ingredients: \\n\";","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"NaychiMin"},"content":" for (Ingredient ingredient : selectedDish.getIngredients()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"NaychiMin"},"content":" ingredientsString +\u003d ingredient.toString() + \"\\n\";","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"NaychiMin"},"content":" showToUser(ingredientsString.trim());","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"DextheChik3n"},"content":" public void printAddDishMessage(Dish dish) {","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"DextheChik3n"},"content":" String dishNameString \u003d \"Dish Name: \" + dish.getName();","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"DextheChik3n"},"content":" DecimalFormat dollarValue \u003d new DecimalFormat(\"0.00\");","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"DextheChik3n"},"content":" float dishPrice \u003d dish.getPrice();","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"DextheChik3n"},"content":" String dishPriceString \u003d \"Dish Price: $\" + dollarValue.format(dishPrice);","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"DextheChik3n"},"content":" StringBuilder dishIngredientsString \u003d new StringBuilder(\"Ingredients:\\n\");","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"DextheChik3n"},"content":" for (int i \u003d 0; i \u003c dish.getIngredients().size(); i++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"DextheChik3n"},"content":" Ingredient ingredient \u003d dish.getIngredients().get(i);","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"DextheChik3n"},"content":" dishIngredientsString.append(\"\\t\")","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"DextheChik3n"},"content":" .append(i + OFFSET_LIST_INDEX)","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"DextheChik3n"},"content":" .append(\". \")","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"DextheChik3n"},"content":" .append(ingredient.toString())","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"DextheChik3n"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"ShaniceTang"},"content":" showToUser(Messages.ADD_DISH_MESSAGE,","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"DextheChik3n"},"content":" dishNameString,","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"DextheChik3n"},"content":" dishPriceString,","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"DextheChik3n"},"content":" dishIngredientsString.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"ShaniceTang"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"ShaniceTang"},"content":" * Shows delete message to user","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"ShaniceTang"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"ShaniceTang"},"content":" * @param selectedDish Dish to be deleted","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"ShaniceTang"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"ShaniceTang"},"content":" public void showDeleteMessage(Dish selectedDish) {","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"ShaniceTang"},"content":" showToUser(\"Okay! \" + selectedDish.getName() + \" is deleted! :)\");","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"DextheChik3n"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"DextheChik3n"},"content":" * Shows messages(s) to the user","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"DextheChik3n"},"content":" * @param message string(s) of messages to print","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"DextheChik3n"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"DextheChik3n"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"DextheChik3n"},"content":" for (String m: message) {","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"DextheChik3n"},"content":" System.out.println(m);","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"Cazh1"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"Cazh1"},"content":" * Shows menu to user is table format","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"Cazh1"},"content":" * @param dishName","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"Cazh1"},"content":" * @param dishPrice","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"Cazh1"},"content":" public void showToUserFormat(String dishName, String dishPrice) {","lastModifiedDate":"2023-10-18"},{"lineNumber":103,"author":{"gitId":"Cazh1"},"content":" String leftAlignFormat \u003d \"| %-24s | %-12s |%n\";","lastModifiedDate":"2023-10-18"},{"lineNumber":104,"author":{"gitId":"Cazh1"},"content":" System.out.format(leftAlignFormat, dishName, dishPrice);","lastModifiedDate":"2023-10-18"},{"lineNumber":105,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"Cazh1"},"content":" //+-----------------+------+","lastModifiedDate":"2023-10-18"},{"lineNumber":107,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":108,"author":{"gitId":"ziyi105"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"ziyi105"},"content":" * show edit price message to user","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"ziyi105"},"content":" * @param menuItem menuItem that has been modified","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"ziyi105"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"ziyi105"},"content":" public void showEditPriceMessage(String menuItem) {","lastModifiedDate":"2023-10-18"},{"lineNumber":113,"author":{"gitId":"ziyi105"},"content":" this.showToUser(Messages.PRICE_MODIFIED_MESSAGE, menuItem);","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"NaychiMin"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"NaychiMin":40,"DextheChik3n":42,"Cazh1":13,"ziyi105":8,"ShaniceTang":12}},{"path":"src/test/java/seedu/cafectrl/DukeTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"class DukeTest {","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":" public void sampleTest() {","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":" assertTrue(true);","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"DextheChik3n":1,"-":11}},{"path":"src/test/java/seedu/cafectrl/UiTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ShaniceTang"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"ShaniceTang"},"content":" * Junit test for Ui.java","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"ShaniceTang"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"ShaniceTang"},"content":"public class UiTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"ShaniceTang"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"DextheChik3n":1,"ShaniceTang":7}},{"path":"src/test/java/seedu/cafectrl/command/AddDishCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Ingredient;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"DextheChik3n"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"DextheChik3n"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"DextheChik3n"},"content":"class AddDishCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DextheChik3n"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"DextheChik3n"},"content":" void execute_oneDishAdded_expectDishInMenu() {","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"DextheChik3n"},"content":" ArrayList\u003cIngredient\u003e ingredients \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"DextheChik3n"},"content":" ArrayList\u003cDish\u003e menuItems \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"DextheChik3n"},"content":" Menu menu \u003d new Menu(menuItems);","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"DextheChik3n"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"DextheChik3n"},"content":" //creating a dish","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"DextheChik3n"},"content":" ingredients.add(new Ingredient(\"chicken\", \"100g\"));","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"DextheChik3n"},"content":" Dish dish \u003d new Dish(\"Chicken Rice\", ingredients, (float) 1.00);","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DextheChik3n"},"content":" AddDishCommand addDishCommand \u003d new AddDishCommand(dish);","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"DextheChik3n"},"content":" addDishCommand.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"DextheChik3n"},"content":" assertEquals(1, menu.getMenuItemsList().size());","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"DextheChik3n"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"DextheChik3n":30}},{"path":"src/test/java/seedu/cafectrl/command/CommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"class CommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DextheChik3n"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"DextheChik3n":5}},{"path":"src/test/java/seedu/cafectrl/command/DeleteDishCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"ShaniceTang"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"ShaniceTang"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"ShaniceTang"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"ShaniceTang"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"ShaniceTang"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ShaniceTang"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"ShaniceTang"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"ShaniceTang"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"Cazh1"},"content":"class DeleteDishCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ShaniceTang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"ShaniceTang"},"content":" void execute_validInput() {","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"ShaniceTang"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"ShaniceTang"},"content":" menu.addDish(new Dish(\"Chicken Rice\", 2.50F));","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ShaniceTang"},"content":" menu.addDish(new Dish(\"Chicken Curry\", 4.30F));","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ShaniceTang"},"content":" menu.addDish(new Dish(\"Nasi Lemak\", 5.60F));","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"ShaniceTang"},"content":" ArrayList\u003cString\u003e actualOutput \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"ShaniceTang"},"content":" Ui ui \u003d new Ui() {","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"ShaniceTang"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"ShaniceTang"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"ShaniceTang"},"content":" actualOutput.addAll(Arrays.asList(message));","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"ShaniceTang"},"content":" };","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"ShaniceTang"},"content":" int testIndex \u003d 2;","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"ShaniceTang"},"content":" DeleteDishCommand deleteDishCommand \u003d new DeleteDishCommand(testIndex);","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"ShaniceTang"},"content":" deleteDishCommand.execute(menu, ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ShaniceTang"},"content":" int actualOutputIndex \u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"ShaniceTang"},"content":" String expectedOutput \u003d \"Okay! Chicken Curry is deleted! :)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"ShaniceTang"},"content":" assertEquals(expectedOutput, actualOutput.get(actualOutputIndex));","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"ShaniceTang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"ShaniceTang"},"content":" void execute_invalidInput_throwIndexOutOfBoundsException() {","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"ShaniceTang"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"ShaniceTang"},"content":" menu.addDish(new Dish(\"Chicken Rice\", 2.50F));","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"ShaniceTang"},"content":" menu.addDish(new Dish(\"Chicken Curry\", 4.30F));","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"ShaniceTang"},"content":" menu.addDish(new Dish(\"Nasi Lemak\", 5.60F));","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"ShaniceTang"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"ShaniceTang"},"content":" int testIndex \u003d 5;","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"ShaniceTang"},"content":" DeleteDishCommand deleteDishCommand \u003d new DeleteDishCommand(testIndex);","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"ShaniceTang"},"content":" assertThrows(IndexOutOfBoundsException.class, () -\u003e deleteDishCommand.execute(menu, ui));","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"Cazh1"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"DextheChik3n":1,"Cazh1":4,"ShaniceTang":49}},{"path":"src/test/java/seedu/cafectrl/command/EditPriceCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ziyi105"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"ziyi105"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.ui.Messages;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"ziyi105"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"ziyi105"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"ziyi105"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"ziyi105"},"content":"class EditPriceCommandTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"ziyi105"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"ziyi105"},"content":" void execute_validInput_editPrice() {","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"ziyi105"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"ziyi105"},"content":" Dish testDish \u003d new Dish(\"Chicken Rice\", 2.50F);","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"ziyi105"},"content":" menu.addDish(testDish);","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"ziyi105"},"content":" ArrayList\u003cString\u003e actualOutput \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"ziyi105"},"content":" Ui ui \u003d new Ui() {","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"ziyi105"},"content":" @Override","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"ziyi105"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"ziyi105"},"content":" actualOutput.addAll(Arrays.asList(message));","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"ziyi105"},"content":" };","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"ziyi105"},"content":" int testDishIndex \u003d 1;","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"ziyi105"},"content":" float testNewPrice \u003d 3;","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"ziyi105"},"content":" Command editPriceCommand \u003d new EditPriceCommand(testDishIndex, testNewPrice);","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"ziyi105"},"content":" editPriceCommand.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"ziyi105"},"content":" int firstLine \u003d 0;","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"ziyi105"},"content":" int secondLine \u003d 1;","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"ziyi105"},"content":" String expectedOutputFirstLine \u003d Messages.PRICE_MODIFIED_MESSAGE;","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"ziyi105"},"content":" String expectedOutputSecondLine \u003d testDish.toString();","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"ziyi105"},"content":" assertEquals(expectedOutputFirstLine, actualOutput.get(firstLine));","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"ziyi105"},"content":" assertEquals(expectedOutputSecondLine, actualOutput.get(secondLine));","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"ziyi105":42}},{"path":"src/test/java/seedu/cafectrl/command/ListIngredientCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"NaychiMin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"NaychiMin"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"NaychiMin"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"NaychiMin"},"content":"import seedu.cafectrl.data.dish.Ingredient;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"NaychiMin"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"NaychiMin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"NaychiMin"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"NaychiMin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"NaychiMin"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"Cazh1"},"content":"class ListIngredientCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"NaychiMin"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"NaychiMin"},"content":" public void execute_validIndex_printsIngredients() {","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"NaychiMin"},"content":" ArrayList\u003cDish\u003e menuItems \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"NaychiMin"},"content":" menuItems.add(new Dish(\"Chicken Rice\",","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"NaychiMin"},"content":" new ArrayList\u003c\u003e(Arrays.asList(new Ingredient(\"Rice\", \"1 cup\"),","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"NaychiMin"},"content":" new Ingredient(\"Chicken\", \"100g\"))), 8.0F));","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"NaychiMin"},"content":" menuItems.add(new Dish(\"Chicken Sandwich\",","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"NaychiMin"},"content":" new ArrayList\u003c\u003e(Arrays.asList(new Ingredient(\"Lettuce\", \"100g\"),","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"NaychiMin"},"content":" new Ingredient(\"Chicken\", \"50g\"))), 5.0F));","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"NaychiMin"},"content":" Menu menu \u003d new Menu(menuItems);","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"NaychiMin"},"content":" ArrayList\u003cString\u003e actualOutput \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"NaychiMin"},"content":" Ui ui \u003d new Ui() {","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"NaychiMin"},"content":" @Override","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"NaychiMin"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"NaychiMin"},"content":" actualOutput.addAll(Arrays.asList(message));","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"NaychiMin"},"content":" };","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"NaychiMin"},"content":" int indexToSelect \u003d 1;","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"NaychiMin"},"content":" ListIngredientCommand listIngredientCommand \u003d new ListIngredientCommand(indexToSelect);","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"NaychiMin"},"content":" listIngredientCommand.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"NaychiMin"},"content":" String expectedOutput \u003d \"Chicken Rice Ingredients: \\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"NaychiMin"},"content":" \"Rice - 1 cup\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"NaychiMin"},"content":" \"Chicken - 100g\\n\";","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"NaychiMin"},"content":" assertEquals(expectedOutput.trim().replaceAll(\"\\\\s+\", \" \"),","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"NaychiMin"},"content":" actualOutput.get(0).trim().replaceAll(\"\\\\s+\", \" \"));","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"NaychiMin"},"content":" public void execute_invalidIndex_returnsErrorMessage() {","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"NaychiMin"},"content":" ArrayList\u003cDish\u003e menuItems \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"NaychiMin"},"content":" menuItems.add(new Dish(\"Chicken Rice\",","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"NaychiMin"},"content":" new ArrayList\u003c\u003e(Arrays.asList(new Ingredient(\"Rice\", \"1 cup\"),","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"NaychiMin"},"content":" new Ingredient(\"Chicken\", \"100g\"))), 8.0F));","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"NaychiMin"},"content":" menuItems.add(new Dish(\"Chicken Sandwich\",","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"NaychiMin"},"content":" new ArrayList\u003c\u003e(Arrays.asList(new Ingredient(\"Lettuce\", \"100g\"),","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"NaychiMin"},"content":" new Ingredient(\"Chicken\", \"50g\"))), 5.0F));","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"NaychiMin"},"content":" Menu menu \u003d new Menu(menuItems);","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"NaychiMin"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"NaychiMin"},"content":" int invalidIndex \u003d 3;","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"NaychiMin"},"content":" assertThrows(IllegalArgumentException.class, () -\u003e {","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"NaychiMin"},"content":" ListIngredientCommand listIngredientCommand \u003d new ListIngredientCommand(invalidIndex);","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"NaychiMin"},"content":" listIngredientCommand.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"NaychiMin"},"content":" });","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"Cazh1"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NaychiMin":59,"DextheChik3n":1,"Cazh1":4}},{"path":"src/test/java/seedu/cafectrl/command/ListMenuCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"Cazh1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"Cazh1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"Cazh1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"Cazh1"},"content":"class ListMenuCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"Cazh1"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"Cazh1"},"content":" public void execute_addTwoDishes_expectTwoDishes() {","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"Cazh1"},"content":" ArrayList\u003cDish\u003e menuItems \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"Cazh1"},"content":" menuItems.add(new Dish(\"Chicken Rice\", 2.50F));","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"Cazh1"},"content":" menuItems.add(new Dish(\"Chicken Curry\", 4.30F));","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"Cazh1"},"content":" Menu menu \u003d new Menu(menuItems);","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"Cazh1"},"content":" assertEquals(2, menu.getSize());","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"Cazh1"},"content":" ArrayList\u003cString\u003e commandOutput \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"Cazh1"},"content":" Ui ui \u003d new Ui() {","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"Cazh1"},"content":" @Override","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"Cazh1"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"Cazh1"},"content":" String parseString \u003d convertArrayToString(message, \",\");","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"Cazh1"},"content":" commandOutput.add(parseString);","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"Cazh1"},"content":" @Override","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"Cazh1"},"content":" public void showToUserFormat(String dishName, String dishPrice) {","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"Cazh1"},"content":" String leftAlignFormat \u003d \"| %-24s | %-12s |\";","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"Cazh1"},"content":" String parseString \u003d String.format(leftAlignFormat, dishName, dishPrice);","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"Cazh1"},"content":" commandOutput.add(parseString);","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"Cazh1"},"content":" };","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"Cazh1"},"content":" Command listMenuCommand \u003d new ListMenuCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"Cazh1"},"content":" listMenuCommand.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"Cazh1"},"content":" String actualOutput \u003d String.join(\",\", commandOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"Cazh1"},"content":" String expectedOutput \u003d \"+-----------------------------------------+\"","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"Cazh1"},"content":" + \"| Ah, behold, the grand menu of delights! |\"","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"Cazh1"},"content":" + \"+--------------------------+--------------+\"","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"Cazh1"},"content":" + \"| Dish Name | Price |\"","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"Cazh1"},"content":" + \"+--------------------------+--------------+\"","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"Cazh1"},"content":" + \"| 1. Chicken Rice | $2.50 |\"","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"Cazh1"},"content":" + \"| 2. Chicken Curry | $4.30 |\"","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"Cazh1"},"content":" + \"+-----------------------------------------+\";","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"Cazh1"},"content":" ","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"Cazh1"},"content":" assert (expectedOutput.trim().replaceAll(\",\", \"\").equals(actualOutput.trim().replaceAll(\",\", \"\")));","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"Cazh1"},"content":" private static String convertArrayToString(String[] message, String delimiter) {","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"Cazh1"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"Cazh1"},"content":" for (String str : message) {","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"Cazh1"},"content":" sb.append(str.toString()).append(delimiter);","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"Cazh1"},"content":" return sb.substring(0, sb.length() - 1);","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"Cazh1"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"DextheChik3n":4,"Cazh1":56}},{"path":"src/test/java/seedu/cafectrl/data/MenuTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.data;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ziyi105"},"content":"//import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"ziyi105"},"content":"class MenuTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"DextheChik3n":1,"ziyi105":6}},{"path":"src/test/java/seedu/cafectrl/data/dish/DishTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.data.dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ziyi105"},"content":"//import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"ziyi105"},"content":"class DishTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"DextheChik3n":1,"ziyi105":6}},{"path":"src/test/java/seedu/cafectrl/data/dish/IngredientTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.data.dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ziyi105"},"content":"//import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"ziyi105"},"content":"class IngredientTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"DextheChik3n":1,"ziyi105":6}},{"path":"src/test/java/seedu/cafectrl/parser/ParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"ShaniceTang"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.command.AddDishCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"ShaniceTang"},"content":"import seedu.cafectrl.command.Command;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"ShaniceTang"},"content":"import seedu.cafectrl.command.DeleteDishCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"NaychiMin"},"content":"import seedu.cafectrl.command.IncorrectCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"NaychiMin"},"content":"import seedu.cafectrl.command.ListIngredientCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"ShaniceTang"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"NaychiMin"},"content":"import seedu.cafectrl.data.dish.Ingredient;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.ui.Messages;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"ziyi105"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"ziyi105"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"ShaniceTang"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"DextheChik3n"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"NaychiMin"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"ziyi105"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"ziyi105"},"content":" * Junit test for Parser.java","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"ziyi105"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"ziyi105"},"content":"class ParserTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"NaychiMin"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"NaychiMin"},"content":" public void parseCommand_validCommand_successfulCommandParse() {","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"NaychiMin"},"content":" ArrayList\u003cDish\u003e menuItems \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"NaychiMin"},"content":" menuItems.add(new Dish(\"Chicken Rice\",","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"NaychiMin"},"content":" new ArrayList\u003c\u003e(Arrays.asList(new Ingredient(\"Rice\", \"1 cup\"),","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"NaychiMin"},"content":" new Ingredient(\"Chicken\", \"100g\"))), 8.0F));","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"NaychiMin"},"content":" menuItems.add(new Dish(\"Chicken Sandwich\",","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"NaychiMin"},"content":" new ArrayList\u003c\u003e(Arrays.asList(new Ingredient(\"Lettuce\", \"100g\"),","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"NaychiMin"},"content":" new Ingredient(\"Chicken\", \"50g\"))), 5.0F));","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"NaychiMin"},"content":" Menu menu \u003d new Menu(menuItems);","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"NaychiMin"},"content":" String userInput \u003d \"list_ingredients 1\";","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"NaychiMin"},"content":" Command result \u003d Parser.parseCommand(menu, userInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"NaychiMin"},"content":" assertTrue(result instanceof ListIngredientCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"NaychiMin"},"content":" ListIngredientCommand listIngredientCommand \u003d (ListIngredientCommand) result;","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"NaychiMin"},"content":" int index \u003d listIngredientCommand.index;","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"NaychiMin"},"content":" assertEquals(1, index);","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"NaychiMin"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"NaychiMin"},"content":" public void parseCommand_missingIndex_returnsErrorMessage() {","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"NaychiMin"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"NaychiMin"},"content":" String userInput \u003d \"list_ingredients\";","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"NaychiMin"},"content":" Command result \u003d Parser.parseCommand(menu, userInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"NaychiMin"},"content":" assertTrue(result instanceof IncorrectCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"NaychiMin"},"content":" IncorrectCommand incorrectCommand \u003d (IncorrectCommand) result;","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"NaychiMin"},"content":" String feedbackToUser \u003d incorrectCommand.feedbackToUser;","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"NaychiMin"},"content":" assertEquals(Messages.MISSING_ARGUMENT_FOR_LIST_INGREDIENTS, feedbackToUser);","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"NaychiMin"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"NaychiMin"},"content":" public void parseCommand_invalidIndex_returnsErrorMessage() {","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"NaychiMin"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"NaychiMin"},"content":" String userInput \u003d \"list_ingredients a\";","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"NaychiMin"},"content":" Command result \u003d Parser.parseCommand(menu, userInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"NaychiMin"},"content":" assertTrue(result instanceof IncorrectCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"NaychiMin"},"content":" IncorrectCommand incorrectCommand \u003d (IncorrectCommand) result;","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"NaychiMin"},"content":" String feedbackToUser \u003d incorrectCommand.feedbackToUser;","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"NaychiMin"},"content":" assertEquals(Messages.MISSING_ARGUMENT_FOR_LIST_INGREDIENTS, feedbackToUser);","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"NaychiMin"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"NaychiMin"},"content":" public void parseCommand_indexOutOfBounds_returnsErrorMessage() {","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"NaychiMin"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"NaychiMin"},"content":" String userInput \u003d \"list_ingredients 1\";","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"NaychiMin"},"content":" Command result \u003d Parser.parseCommand(menu, userInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"NaychiMin"},"content":" assertTrue(result instanceof IncorrectCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"NaychiMin"},"content":" IncorrectCommand incorrectCommand \u003d (IncorrectCommand) result;","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"NaychiMin"},"content":" String feedbackToUser \u003d incorrectCommand.feedbackToUser;","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"NaychiMin"},"content":" assertEquals(Messages.INVALID_DISH_INDEX, feedbackToUser);","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":86,"author":{"gitId":"ShaniceTang"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"ShaniceTang"},"content":" public void parseCommand_validDeleteCommand_successfulCommandParse() {","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"ShaniceTang"},"content":" ArrayList\u003cDish\u003e menuItems \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"ShaniceTang"},"content":" menuItems.add(new Dish(\"Chicken Rice\",","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"ShaniceTang"},"content":" new ArrayList\u003c\u003e(Arrays.asList(new Ingredient(\"Rice\", \"1 cup\"),","lastModifiedDate":"2023-10-18"},{"lineNumber":91,"author":{"gitId":"ShaniceTang"},"content":" new Ingredient(\"Chicken\", \"100g\"))), 8.0F));","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"ShaniceTang"},"content":" menuItems.add(new Dish(\"Chicken Sandwich\",","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"ShaniceTang"},"content":" new ArrayList\u003c\u003e(Arrays.asList(new Ingredient(\"Lettuce\", \"100g\"),","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"ShaniceTang"},"content":" new Ingredient(\"Chicken\", \"50g\"))), 5.0F));","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"ShaniceTang"},"content":" Menu menu \u003d new Menu(menuItems);","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"ShaniceTang"},"content":" String userInput \u003d \"delete 1\";","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"ShaniceTang"},"content":" Command result \u003d Parser.parseCommand(menu, userInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"ShaniceTang"},"content":" assertTrue(result instanceof DeleteDishCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"ShaniceTang"},"content":" DeleteDishCommand deleteDishCommand \u003d (DeleteDishCommand) result;","lastModifiedDate":"2023-10-18"},{"lineNumber":103,"author":{"gitId":"ShaniceTang"},"content":" int index \u003d deleteDishCommand.index;","lastModifiedDate":"2023-10-18"},{"lineNumber":104,"author":{"gitId":"ShaniceTang"},"content":" assertEquals(1, index);","lastModifiedDate":"2023-10-18"},{"lineNumber":105,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":107,"author":{"gitId":"ShaniceTang"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":108,"author":{"gitId":"ShaniceTang"},"content":" public void parseCommand_missingDeleteIndex_returnsErrorMessage() {","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"ShaniceTang"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":110,"author":{"gitId":"ShaniceTang"},"content":" String userInput \u003d \"delete\";","lastModifiedDate":"2023-10-18"},{"lineNumber":111,"author":{"gitId":"ShaniceTang"},"content":" Command result \u003d Parser.parseCommand(menu, userInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":112,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":113,"author":{"gitId":"ShaniceTang"},"content":" assertTrue(result instanceof IncorrectCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":115,"author":{"gitId":"ShaniceTang"},"content":" IncorrectCommand incorrectCommand \u003d (IncorrectCommand) result;","lastModifiedDate":"2023-10-18"},{"lineNumber":116,"author":{"gitId":"ShaniceTang"},"content":" String feedbackToUser \u003d incorrectCommand.feedbackToUser;","lastModifiedDate":"2023-10-18"},{"lineNumber":117,"author":{"gitId":"ShaniceTang"},"content":" assertEquals(Messages.MISSING_ARGUMENT_FOR_DELETE, feedbackToUser);","lastModifiedDate":"2023-10-18"},{"lineNumber":118,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":119,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":120,"author":{"gitId":"ShaniceTang"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":121,"author":{"gitId":"ShaniceTang"},"content":" public void parseCommand_invalidDeleteIndex_returnsErrorMessage() {","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"ShaniceTang"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":123,"author":{"gitId":"ShaniceTang"},"content":" String userInput \u003d \"delete a\";","lastModifiedDate":"2023-10-18"},{"lineNumber":124,"author":{"gitId":"ShaniceTang"},"content":" Command result \u003d Parser.parseCommand(menu, userInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":125,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":126,"author":{"gitId":"ShaniceTang"},"content":" assertTrue(result instanceof IncorrectCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":127,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":128,"author":{"gitId":"ShaniceTang"},"content":" IncorrectCommand incorrectCommand \u003d (IncorrectCommand) result;","lastModifiedDate":"2023-10-18"},{"lineNumber":129,"author":{"gitId":"ShaniceTang"},"content":" String feedbackToUser \u003d incorrectCommand.feedbackToUser;","lastModifiedDate":"2023-10-18"},{"lineNumber":130,"author":{"gitId":"ShaniceTang"},"content":" assertEquals(Messages.MISSING_ARGUMENT_FOR_DELETE, feedbackToUser);","lastModifiedDate":"2023-10-18"},{"lineNumber":131,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":132,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":133,"author":{"gitId":"ShaniceTang"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":134,"author":{"gitId":"ShaniceTang"},"content":" public void parseCommand_deleteIndexOutOfBounds_returnsErrorMessage() {","lastModifiedDate":"2023-10-18"},{"lineNumber":135,"author":{"gitId":"ShaniceTang"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":136,"author":{"gitId":"ShaniceTang"},"content":" String userInput \u003d \"delete 1\";","lastModifiedDate":"2023-10-18"},{"lineNumber":137,"author":{"gitId":"ShaniceTang"},"content":" Command result \u003d Parser.parseCommand(menu, userInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":138,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":139,"author":{"gitId":"ShaniceTang"},"content":" assertTrue(result instanceof IncorrectCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":140,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":141,"author":{"gitId":"ShaniceTang"},"content":" IncorrectCommand incorrectCommand \u003d (IncorrectCommand) result;","lastModifiedDate":"2023-10-18"},{"lineNumber":142,"author":{"gitId":"ShaniceTang"},"content":" String feedbackToUser \u003d incorrectCommand.feedbackToUser;","lastModifiedDate":"2023-10-18"},{"lineNumber":143,"author":{"gitId":"ShaniceTang"},"content":" assertEquals(Messages.INVALID_DISH_INDEX, feedbackToUser);","lastModifiedDate":"2023-10-18"},{"lineNumber":144,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":145,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":146,"author":{"gitId":"ziyi105"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":147,"author":{"gitId":"ziyi105"},"content":" void parseCommand_unrecognisedInput_unknownCommand() {","lastModifiedDate":"2023-10-18"},{"lineNumber":148,"author":{"gitId":"ziyi105"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":149,"author":{"gitId":"ziyi105"},"content":" Dish testDish \u003d new Dish(\"Chicken Rice\", 2.50F);","lastModifiedDate":"2023-10-18"},{"lineNumber":150,"author":{"gitId":"ziyi105"},"content":" menu.addDish(testDish);","lastModifiedDate":"2023-10-18"},{"lineNumber":151,"author":{"gitId":"ziyi105"},"content":" String testUserInput \u003d \"random input\";","lastModifiedDate":"2023-10-18"},{"lineNumber":152,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":153,"author":{"gitId":"ziyi105"},"content":" ArrayList\u003cString\u003e actualOutput \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":154,"author":{"gitId":"ziyi105"},"content":" Ui ui \u003d new Ui() {","lastModifiedDate":"2023-10-18"},{"lineNumber":155,"author":{"gitId":"ziyi105"},"content":" @Override","lastModifiedDate":"2023-10-18"},{"lineNumber":156,"author":{"gitId":"ziyi105"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-18"},{"lineNumber":157,"author":{"gitId":"ziyi105"},"content":" actualOutput.addAll(Arrays.asList(message));","lastModifiedDate":"2023-10-18"},{"lineNumber":158,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":159,"author":{"gitId":"ziyi105"},"content":" };","lastModifiedDate":"2023-10-18"},{"lineNumber":160,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":161,"author":{"gitId":"ziyi105"},"content":" Command commandReturned \u003d Parser.parseCommand(menu, testUserInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":162,"author":{"gitId":"ziyi105"},"content":" commandReturned.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":163,"author":{"gitId":"ShaniceTang"},"content":" assertEquals(Messages.UNKNOWN_COMMAND_MESSAGE, actualOutput.get(0));","lastModifiedDate":"2023-10-22"},{"lineNumber":164,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":165,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":166,"author":{"gitId":"ziyi105"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":167,"author":{"gitId":"ziyi105"},"content":" void parseCommand_missingArgumentsForEditPrice_missingArgMsg() {","lastModifiedDate":"2023-10-18"},{"lineNumber":168,"author":{"gitId":"ziyi105"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":169,"author":{"gitId":"ziyi105"},"content":" Dish testDish \u003d new Dish(\"Chicken Rice\", 2.50F);","lastModifiedDate":"2023-10-18"},{"lineNumber":170,"author":{"gitId":"ziyi105"},"content":" menu.addDish(testDish);","lastModifiedDate":"2023-10-18"},{"lineNumber":171,"author":{"gitId":"ziyi105"},"content":" String testUserInput \u003d \"edit_price index/1\";","lastModifiedDate":"2023-10-18"},{"lineNumber":172,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":173,"author":{"gitId":"ziyi105"},"content":" ArrayList\u003cString\u003e actualOutput \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":174,"author":{"gitId":"ziyi105"},"content":" Ui ui \u003d new Ui() {","lastModifiedDate":"2023-10-18"},{"lineNumber":175,"author":{"gitId":"ziyi105"},"content":" @Override","lastModifiedDate":"2023-10-18"},{"lineNumber":176,"author":{"gitId":"ziyi105"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-18"},{"lineNumber":177,"author":{"gitId":"ziyi105"},"content":" actualOutput.addAll(Arrays.asList(message));","lastModifiedDate":"2023-10-18"},{"lineNumber":178,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":179,"author":{"gitId":"ziyi105"},"content":" };","lastModifiedDate":"2023-10-18"},{"lineNumber":180,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":181,"author":{"gitId":"ziyi105"},"content":" Command commandReturned \u003d Parser.parseCommand(menu, testUserInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":182,"author":{"gitId":"ziyi105"},"content":" commandReturned.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":183,"author":{"gitId":"ziyi105"},"content":" assertEquals(Messages.MISSING_ARGUMENT_FOR_EDIT_PRICE, actualOutput.get(0));","lastModifiedDate":"2023-10-18"},{"lineNumber":184,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":185,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":186,"author":{"gitId":"ziyi105"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":187,"author":{"gitId":"ziyi105"},"content":" void parseCommand_invalidDishIndexForEditPrice_invalidIndexForEditPrice() {","lastModifiedDate":"2023-10-18"},{"lineNumber":188,"author":{"gitId":"ziyi105"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":189,"author":{"gitId":"ziyi105"},"content":" Dish testDish \u003d new Dish(\"Chicken Rice\", 2.50F);","lastModifiedDate":"2023-10-18"},{"lineNumber":190,"author":{"gitId":"ziyi105"},"content":" menu.addDish(testDish);","lastModifiedDate":"2023-10-18"},{"lineNumber":191,"author":{"gitId":"ziyi105"},"content":" String testUserInput \u003d \"edit_price index/2 price/3\";","lastModifiedDate":"2023-10-18"},{"lineNumber":192,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":193,"author":{"gitId":"ziyi105"},"content":" ArrayList\u003cString\u003e actualOutput \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":194,"author":{"gitId":"ziyi105"},"content":" Ui ui \u003d new Ui() {","lastModifiedDate":"2023-10-18"},{"lineNumber":195,"author":{"gitId":"ziyi105"},"content":" @Override","lastModifiedDate":"2023-10-18"},{"lineNumber":196,"author":{"gitId":"ziyi105"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-18"},{"lineNumber":197,"author":{"gitId":"ziyi105"},"content":" actualOutput.addAll(Arrays.asList(message));","lastModifiedDate":"2023-10-18"},{"lineNumber":198,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":199,"author":{"gitId":"ziyi105"},"content":" };","lastModifiedDate":"2023-10-18"},{"lineNumber":200,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":201,"author":{"gitId":"ziyi105"},"content":" Command commandReturned \u003d Parser.parseCommand(menu, testUserInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":202,"author":{"gitId":"ziyi105"},"content":" commandReturned.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":203,"author":{"gitId":"ziyi105"},"content":" assertEquals(Messages.INVALID_DISH_INDEX, actualOutput.get(0));","lastModifiedDate":"2023-10-18"},{"lineNumber":204,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":205,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":206,"author":{"gitId":"DextheChik3n"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":207,"author":{"gitId":"DextheChik3n"},"content":" void parseCommand_validDishInputForAddDish_dishAddedToMenu() {","lastModifiedDate":"2023-10-18"},{"lineNumber":208,"author":{"gitId":"DextheChik3n"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":209,"author":{"gitId":"DextheChik3n"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-10-18"},{"lineNumber":210,"author":{"gitId":"DextheChik3n"},"content":" String testDishInputWithOneIngredient \u003d \"add name/Christmas Ham price/50.00 ingredient/Ham qty/1kg\";","lastModifiedDate":"2023-10-18"},{"lineNumber":211,"author":{"gitId":"DextheChik3n"},"content":" Command outputCommand \u003d Parser.parseCommand(menu, testDishInputWithOneIngredient);","lastModifiedDate":"2023-10-18"},{"lineNumber":212,"author":{"gitId":"DextheChik3n"},"content":" //Test for correct Command type returned","lastModifiedDate":"2023-10-18"},{"lineNumber":213,"author":{"gitId":"DextheChik3n"},"content":" assertTrue(outputCommand instanceof AddDishCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":214,"author":{"gitId":"DextheChik3n"},"content":" //Test for 1 Dish added to Menu","lastModifiedDate":"2023-10-18"},{"lineNumber":215,"author":{"gitId":"DextheChik3n"},"content":" outputCommand.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":216,"author":{"gitId":"DextheChik3n"},"content":" assertEquals(1, menu.getSize());","lastModifiedDate":"2023-10-18"},{"lineNumber":217,"author":{"gitId":"DextheChik3n"},"content":" //Test for correct parsing of dish arguments","lastModifiedDate":"2023-10-18"},{"lineNumber":218,"author":{"gitId":"DextheChik3n"},"content":" Dish getOutputDish \u003d menu.getDish(0);","lastModifiedDate":"2023-10-18"},{"lineNumber":219,"author":{"gitId":"DextheChik3n"},"content":" assertEquals(\"Christmas Ham\", getOutputDish.getName()); // Dish name test","lastModifiedDate":"2023-10-18"},{"lineNumber":220,"author":{"gitId":"DextheChik3n"},"content":" assertEquals((float) 50.0, getOutputDish.getPrice()); //Dish price test","lastModifiedDate":"2023-10-18"},{"lineNumber":221,"author":{"gitId":"DextheChik3n"},"content":" assertEquals(\"[Ham - 1kg]\", getOutputDish.getIngredients().toString()); //Dish ingredients test","lastModifiedDate":"2023-10-18"},{"lineNumber":222,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":223,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":224,"author":{"gitId":"DextheChik3n"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":225,"author":{"gitId":"DextheChik3n"},"content":" void parseCommand_invalidDishInputForAddDish_noDishAddedToMenu() {","lastModifiedDate":"2023-10-18"},{"lineNumber":226,"author":{"gitId":"DextheChik3n"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":227,"author":{"gitId":"DextheChik3n"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-10-18"},{"lineNumber":228,"author":{"gitId":"DextheChik3n"},"content":" //input name/ argument wrongly","lastModifiedDate":"2023-10-18"},{"lineNumber":229,"author":{"gitId":"DextheChik3n"},"content":" String testDishInputWithOneIngredient \u003d \"add named/Christmas Ham price/50.00 ingredient/Ham qty/1kg\";","lastModifiedDate":"2023-10-18"},{"lineNumber":230,"author":{"gitId":"DextheChik3n"},"content":" Command outputCommand \u003d Parser.parseCommand(menu, testDishInputWithOneIngredient);","lastModifiedDate":"2023-10-18"},{"lineNumber":231,"author":{"gitId":"DextheChik3n"},"content":" //Test for incorrect Command type returned","lastModifiedDate":"2023-10-18"},{"lineNumber":232,"author":{"gitId":"DextheChik3n"},"content":" assertFalse(outputCommand instanceof AddDishCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":233,"author":{"gitId":"DextheChik3n"},"content":" //Test for no dish added in menu","lastModifiedDate":"2023-10-18"},{"lineNumber":234,"author":{"gitId":"DextheChik3n"},"content":" outputCommand.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":235,"author":{"gitId":"DextheChik3n"},"content":" assertEquals(0, menu.getSize());","lastModifiedDate":"2023-10-18"},{"lineNumber":236,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":237,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"NaychiMin":63,"DextheChik3n":35,"ziyi105":73,"ShaniceTang":66}}] +[{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"DextheChik3n"},"content":" mainClass.set(\"seedu.cafectrl.CafeCtrl\")","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"DextheChik3n"},"content":" archiveBaseName.set(\"cafectrl\")","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"DextheChik3n"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"DextheChik3n":3,"-":44}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Portfolio ","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"ShaniceTang"},"content":"--------|:--------:|:----------------------------------------:|:---------:","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"ShaniceTang"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Shanice | [Github](https://github.com/ShaniceTang) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"NaychiMin"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Naychi | [Github](https://github.com/NaychiMin/tp) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":"![](https://www.google.com/url?sa\u003di\u0026url\u003dhttps%3A%2F%2Fwww.scmp.com%2Fweek-asia%2Fpolitics%2Farticle%2F3095228%2Fmalaysia-najibs-cheesy-super-ring-jibe-comes-back-bite-him-after\u0026psig\u003dAOvVaw2ohFjBBhoZxtARfOKEnTXE\u0026ust\u003d1696586245977000\u0026source\u003dimages\u0026cd\u003dvfe\u0026opi\u003d89978449\u0026ved\u003d0CBEQjRxqFwoTCJiboLbS3oEDFQAAAAAdAAAAABAE) | Zi Yi | [Github](https://github.com/ziyi105) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":8,"author":{"gitId":"DextheChik3n"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Dexter Hoon | [Github](https://github.com/DextheChik3n) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":9,"author":{"gitId":"Cazh1"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Chua Zhong Heng | [Github](https://github.com/Cazh1/tp) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"NaychiMin":1,"DextheChik3n":1,"Cazh1":1,"ziyi105":1,"ShaniceTang":2,"-":3}},{"path":"src/main/java/seedu/cafectrl/CafeCtrl.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.command.Command;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.parser.Parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"DextheChik3n"},"content":"/**","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"DextheChik3n"},"content":" * CafeCtrl application\u0027s entry point.","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"DextheChik3n"},"content":" * Initializes the application and starts the interaction with the user.","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"DextheChik3n"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DextheChik3n"},"content":"public class CafeCtrl {","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DextheChik3n"},"content":" private final Ui ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DextheChik3n"},"content":" private final Menu menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"DextheChik3n"},"content":" private Command command;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"DextheChik3n"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DextheChik3n"},"content":" * Private constructor for the CafeCtrl class, used for initializing the user interface and menu list.","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DextheChik3n"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DextheChik3n"},"content":" private CafeCtrl() {","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DextheChik3n"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DextheChik3n"},"content":" menu \u003d new Menu();","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DextheChik3n"},"content":" private void setup() {","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"DextheChik3n"},"content":" ui.showWelcome();","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"DextheChik3n"},"content":" ","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"DextheChik3n"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"DextheChik3n"},"content":" * The main loop of the CafeCtrl application.","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"DextheChik3n"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"DextheChik3n"},"content":" * \u003cp\u003e This method consistently receives user input, parses commands, and executes the respective command","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"DextheChik3n"},"content":" * until the user enters a \"bye\" command, terminating the application.\u003c/p\u003e","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"DextheChik3n"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"DextheChik3n"},"content":" private void run() {","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"DextheChik3n"},"content":" ui.printLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"DextheChik3n"},"content":" do {","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"DextheChik3n"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"DextheChik3n"},"content":" String fullUserInput \u003d ui.receiveUserInput();","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"DextheChik3n"},"content":" command \u003d Parser.parseCommand(menu, fullUserInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"DextheChik3n"},"content":" command.execute(menu, ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"DextheChik3n"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"DextheChik3n"},"content":" ui.showToUser(e.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"DextheChik3n"},"content":" } finally {","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"DextheChik3n"},"content":" ui.printLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"DextheChik3n"},"content":" } while (!command.isExit());","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"DextheChik3n"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"DextheChik3n"},"content":" CafeCtrl cafeCtrl \u003d new CafeCtrl();","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"DextheChik3n"},"content":" cafeCtrl.setup();","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"DextheChik3n"},"content":" cafeCtrl.run();","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"DextheChik3n"},"content":"}","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"DextheChik3n":56}},{"path":"src/main/java/seedu/cafectrl/command/AddDishCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"Cazh1"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"Cazh1"},"content":" * Adds a menu item to the user","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"Cazh1"},"content":"public class AddDishCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"Cazh1"},"content":" public static final String COMMAND_WORD \u003d \"add\";","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DextheChik3n"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"DextheChik3n"},"content":" + \": Add dish to menu\\n\"","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"DextheChik3n"},"content":" + \"Parameters: DISH_NAME, PRICE, INGREDIENT1_NAME, INGREDIENT1_QTY \"","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"DextheChik3n"},"content":" + \"[,INGREDIENT1_NAME, INGREDIENT1_QTY...] \\n\"","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"DextheChik3n"},"content":" + \"Example: \" + COMMAND_WORD","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"DextheChik3n"},"content":" + \" name/chicken rice price/3.00 ingredient/rice qty/1 cup, ingredient/chicken qty/100g\";","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"Cazh1"},"content":" Dish dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DextheChik3n"},"content":" public AddDishCommand(Dish dish) {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DextheChik3n"},"content":" this.dish \u003d dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"Cazh1"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"Cazh1"},"content":" public void execute(Menu menu, Ui ui) {","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"DextheChik3n"},"content":" menu.addDish(dish);","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DextheChik3n"},"content":" ui.printAddDishMessage(dish);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"Cazh1"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"DextheChik3n":16,"Cazh1":11}},{"path":"src/main/java/seedu/cafectrl/command/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"Cazh1"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"Cazh1"},"content":" * Represents an executable command.","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"Cazh1"},"content":"public class Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"NaychiMin"},"content":" public int index;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"Cazh1"},"content":" public void setIndex(int index) {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"Cazh1"},"content":" this.index \u003d index;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"DextheChik3n"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DextheChik3n"},"content":" * check whether this command is an exit command (user input \"bye\")","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DextheChik3n"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DextheChik3n"},"content":" * default returns false, this method will be overridden in ExitCommand","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"DextheChik3n"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DextheChik3n"},"content":" public boolean isExit() {","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DextheChik3n"},"content":" return false;","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"Cazh1"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"Cazh1"},"content":" * Executes the command and returns the result.","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"Cazh1"},"content":" public void execute(Menu menu, Ui ui) {","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"Cazh1"},"content":" throw new UnsupportedOperationException(\"This method is to be implemented by child classes\");","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"Cazh1"},"content":" };","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"Cazh1"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NaychiMin":1,"DextheChik3n":12,"Cazh1":19}},{"path":"src/main/java/seedu/cafectrl/command/DeleteDishCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"ShaniceTang"},"content":"import seedu.cafectrl.ui.Messages;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"Cazh1"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"Cazh1"},"content":" * Deletes a menu item identified using it\u0027s last displayed index from the menu.","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"Cazh1"},"content":"public class DeleteDishCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ziyi105"},"content":" public static final String COMMAND_WORD \u003d \"delete\";","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"Cazh1"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"Cazh1"},"content":" + \": Deletes the menu item identified by the index number used in the last menu listing.\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"Cazh1"},"content":" + \"Parameters: INDEX\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"Cazh1"},"content":" + \"Example: \" + COMMAND_WORD + \" 1\";","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"ShaniceTang"},"content":" public DeleteDishCommand(int listIndex) {","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ShaniceTang"},"content":" this.index \u003d listIndex;","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"Cazh1"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"Cazh1"},"content":" public void execute(Menu menu, Ui ui) {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"ShaniceTang"},"content":" try {","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"ShaniceTang"},"content":" int dishIndexToBeDeleted \u003d index - Ui.OFFSET_LIST_INDEX;","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"ShaniceTang"},"content":" Dish selectedDish \u003d menu.getMenuItemsList().get(dishIndexToBeDeleted);","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"ShaniceTang"},"content":" ui.showDeleteMessage(selectedDish);","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"ShaniceTang"},"content":" menu.removeDish(dishIndexToBeDeleted);","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"ShaniceTang"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"ShaniceTang"},"content":" ui.showToUser(Messages.INVALID_DISH_INDEX);","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"ShaniceTang"},"content":" throw new IndexOutOfBoundsException();","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"ShaniceTang"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"DextheChik3n":4,"Cazh1":14,"ziyi105":2,"ShaniceTang":16}},{"path":"src/main/java/seedu/cafectrl/command/EditPriceCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ziyi105"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":"/**","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"ziyi105"},"content":" * Edit the price of a dish of a certain index","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"ziyi105"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ziyi105"},"content":"public class EditPriceCommand extends Command {","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"ziyi105"},"content":" public static final String COMMAND_WORD \u003d \"edit_price\";","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"ziyi105"},"content":" private final int menuID;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"ziyi105"},"content":" private final float newPrice;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"ziyi105"},"content":" public EditPriceCommand(int menuID, float newPrice) {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"ziyi105"},"content":" this.menuID \u003d menuID;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"ziyi105"},"content":" this.newPrice \u003d newPrice;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"ziyi105"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ziyi105"},"content":" * Set new price of the dish and show edit price message","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ziyi105"},"content":" * @param menu menu of the current session","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"ziyi105"},"content":" * @param ui ui of the current session","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"ziyi105"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"ziyi105"},"content":" public void execute(Menu menu, Ui ui) {","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"ziyi105"},"content":" Dish dish \u003d menu.getDish(this.menuID - Ui.OFFSET_LIST_INDEX);","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"ziyi105"},"content":" dish.setPrice(this.newPrice);","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"ziyi105"},"content":" ui.showEditPriceMessage(dish.toString());","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"ziyi105":31}},{"path":"src/main/java/seedu/cafectrl/command/ExitCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"Cazh1"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"Cazh1"},"content":" public static final String COMMAND_WORD \u003d \"bye\";","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"DextheChik3n"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"DextheChik3n"},"content":" * Overrides the isExit() method which returns false","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DextheChik3n"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DextheChik3n"},"content":" * @return true","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DextheChik3n"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"DextheChik3n"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"DextheChik3n"},"content":" public boolean isExit() {","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"DextheChik3n"},"content":" return true;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"Cazh1"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"Cazh1"},"content":" public void execute(Menu menu, Ui ui) {","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DextheChik3n"},"content":" ui.printLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DextheChik3n"},"content":" ui.showGoodbye();","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"Cazh1"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"DextheChik3n":17,"Cazh1":8}},{"path":"src/main/java/seedu/cafectrl/command/IncorrectCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"Cazh1"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"Cazh1"},"content":" * Represents an incorrect command. Upon execution, produces some feedback to the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"Cazh1"},"content":"public class IncorrectCommand extends Command{","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"Cazh1"},"content":" public final String feedbackToUser;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"Cazh1"},"content":" public IncorrectCommand(String feedbackToUser) {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"Cazh1"},"content":" this.feedbackToUser \u003d feedbackToUser;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"Cazh1"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"Cazh1"},"content":" public void execute(Menu menu, Ui ui) {","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"DextheChik3n"},"content":" ui.showToUser(feedbackToUser);","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"Cazh1"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"DextheChik3n":4,"Cazh1":16}},{"path":"src/main/java/seedu/cafectrl/command/ListIngredientCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"NaychiMin"},"content":"import seedu.cafectrl.ui.Messages;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"Cazh1"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"Cazh1"},"content":" * Lists all ingredients used in the selected dish to the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"Cazh1"},"content":"public class ListIngredientCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"Cazh1"},"content":" public static final String COMMAND_WORD \u003d \"list_ingredients\";","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"Cazh1"},"content":" public static final String MESSAGE_USAGE \u003d COMMAND_WORD","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"Cazh1"},"content":" + \": Lists out the ingredients needed along with the quantity for a specific dish.\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"Cazh1"},"content":" + \"Parameters: INDEX\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"Cazh1"},"content":" + \"Example: \" + COMMAND_WORD + \" 1\";","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"NaychiMin"},"content":" public ListIngredientCommand(int listIndex) {","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"NaychiMin"},"content":" this.index \u003d listIndex;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"Cazh1"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"Cazh1"},"content":" public void execute(Menu menu, Ui ui) {","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"NaychiMin"},"content":" try {","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"NaychiMin"},"content":" Dish selectedDish \u003d menu.getMenuItemsList().get(index - Ui.OFFSET_LIST_INDEX);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"NaychiMin"},"content":" ui.printIngredients(selectedDish);","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"NaychiMin"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"NaychiMin"},"content":" throw new IllegalArgumentException(Messages.INVALID_DISH_INDEX);","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"Cazh1"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NaychiMin":13,"DextheChik3n":4,"Cazh1":14}},{"path":"src/main/java/seedu/cafectrl/command/ListMenuCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"ShaniceTang"},"content":"import seedu.cafectrl.ui.Messages;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"Cazh1"},"content":"import java.text.DecimalFormat;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"Cazh1"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"Cazh1"},"content":" * Lists all dishes in the menu to the user.","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"Cazh1"},"content":"public class ListMenuCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"Cazh1"},"content":" public static final String COMMAND_WORD \u003d \"list_menu\";","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"Cazh1"},"content":" private static final DecimalFormat dollarValue \u003d new DecimalFormat(\"0.00\");","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"Cazh1"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"Cazh1"},"content":" * Iterates through the menu arraylist, outputting the dish name and dish price.","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"Cazh1"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"Cazh1"},"content":" * @param menu ArrayList of Dishes","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"Cazh1"},"content":" * @param ui Handles the interactions with user","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"Cazh1"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"Cazh1"},"content":" public void execute(Menu menu, Ui ui) {","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"Cazh1"},"content":" if (menu.getSize() \u003d\u003d 0) {","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"Cazh1"},"content":" printEmptyMenu(ui);","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"Cazh1"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"Cazh1"},"content":" printFullMenu(menu, ui);","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"Cazh1"},"content":" };","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"Cazh1"},"content":" public void printEmptyMenu(Ui ui) {","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"Cazh1"},"content":" ui.showToUser(Messages.MENU_EMPTY_MESSAGE);","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"Cazh1"},"content":" public void printFullMenu(Menu menu, Ui ui) {","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"Cazh1"},"content":" ui.showToUser(Messages.MENU_TOP, Messages.LIST_MENU_MESSAGE,","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"Cazh1"},"content":" Messages.MENU_CORNER, Messages.MENU_TITLE, Messages.MENU_CORNER);","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"Cazh1"},"content":" for(int i \u003d0; i \u003c menu.getSize(); i++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"Cazh1"},"content":" String indexNum \u003d String.valueOf(i+1);","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"Cazh1"},"content":" String dishName \u003d menu.getDish(i).getName();","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"Cazh1"},"content":" String dishPrice \u003d dollarValue.format(menu.getDish(i).getPrice());","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"Cazh1"},"content":" ui.showToUserFormat(indexNum + \". \" + dishName,\" $\" + dishPrice);","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"Cazh1"},"content":" ui.showToUser(Messages.MENU_TOP);","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"Cazh1"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"DextheChik3n":3,"Cazh1":43,"ShaniceTang":1}},{"path":"src/main/java/seedu/cafectrl/data/Menu.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.data;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"ziyi105"},"content":"public class Menu {","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"ziyi105"},"content":" private ArrayList\u003cDish\u003e menuItems;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"DextheChik3n"},"content":" public Menu() {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"DextheChik3n"},"content":" this.menuItems \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"ziyi105"},"content":" public Menu(ArrayList\u003cDish\u003e menuItems) {","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"ziyi105"},"content":" this.menuItems \u003d menuItems;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"NaychiMin"},"content":" public ArrayList\u003cDish\u003e getMenuItemsList() {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"NaychiMin"},"content":" return menuItems;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DextheChik3n"},"content":" public int getSize() {","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"DextheChik3n"},"content":" return menuItems.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"DextheChik3n"},"content":" public Dish getDish(int menuID) {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"DextheChik3n"},"content":" return menuItems.get(menuID);","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"DextheChik3n"},"content":" public void removeDish(int menuID) {","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"DextheChik3n"},"content":" menuItems.remove(menuID);","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"DextheChik3n"},"content":" public void addDish(Dish dish) {","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"DextheChik3n"},"content":" menuItems.add(dish);","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"ziyi105"},"content":" public boolean isValidDishIndex(int dishIndex) {","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"ziyi105"},"content":" int offSetDishIndex \u003d dishIndex - Ui.OFFSET_LIST_INDEX;","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"ziyi105"},"content":" return offSetDishIndex \u003e\u003d 0 \u0026\u0026 offSetDishIndex \u003c this.getSize();","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"NaychiMin":4,"DextheChik3n":18,"ziyi105":17}},{"path":"src/main/java/seedu/cafectrl/data/dish/Dish.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.data.dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ziyi105"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"ziyi105"},"content":"public class Dish {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":" private String name;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":" private ArrayList\u003cIngredient\u003e ingredients;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"ziyi105"},"content":" private float price;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"ziyi105"},"content":" public Dish(String name, ArrayList\u003cIngredient\u003e ingredients, float price) {","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"ziyi105"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"ziyi105"},"content":" this.ingredients \u003d ingredients;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"ziyi105"},"content":" this.price \u003d price;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Cazh1"},"content":" public Dish(String name, float price) {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"Cazh1"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"Cazh1"},"content":" this.ingredients \u003d null;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"Cazh1"},"content":" this.price \u003d price;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"DextheChik3n"},"content":" public String getName() {","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"DextheChik3n"},"content":" return name;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"DextheChik3n"},"content":" public ArrayList\u003cIngredient\u003e getIngredients() {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"DextheChik3n"},"content":" return ingredients;","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"DextheChik3n"},"content":" public float getPrice() {","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"DextheChik3n"},"content":" return price;","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"ziyi105"},"content":" public void setPrice(float newPrice) {","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"ziyi105"},"content":" this.price \u003d newPrice;","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"ziyi105"},"content":" public String toString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"ziyi105"},"content":" return this.name + \" $\" + this.price;","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"DextheChik3n":13,"Cazh1":5,"ziyi105":22}},{"path":"src/main/java/seedu/cafectrl/data/dish/Ingredient.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.data.dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ziyi105"},"content":"public class Ingredient {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":" private final String name;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"DextheChik3n"},"content":" private final String quantity;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":" public Ingredient(String name) {","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"ziyi105"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"DextheChik3n"},"content":" quantity \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"DextheChik3n"},"content":" public Ingredient(String name, String quantity) {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"DextheChik3n"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"DextheChik3n"},"content":" this.quantity \u003d quantity;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"DextheChik3n"},"content":" public String getName() {","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"DextheChik3n"},"content":" return name;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"DextheChik3n"},"content":" public String getQuantity() {","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"DextheChik3n"},"content":" return quantity;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"DextheChik3n"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"DextheChik3n"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"DextheChik3n"},"content":" return name + \" - \" + quantity;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"NaychiMin":1,"DextheChik3n":21,"ziyi105":8}},{"path":"src/main/java/seedu/cafectrl/parser/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.command.AddDishCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.command.Command;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.command.IncorrectCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.command.DeleteDishCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.command.EditPriceCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.command.ExitCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.command.ListIngredientCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.command.ListMenuCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.ui.Messages;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Ingredient;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"ziyi105"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"ziyi105"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"ziyi105"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"Cazh1"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ziyi105"},"content":"/**","lastModifiedDate":"2023-10-14"},{"lineNumber":23,"author":{"gitId":"ziyi105"},"content":" * Parse everything received from the users on terminal","lastModifiedDate":"2023-10-14"},{"lineNumber":24,"author":{"gitId":"ziyi105"},"content":" * into a format that can be interpreted by other core classes","lastModifiedDate":"2023-10-14"},{"lineNumber":25,"author":{"gitId":"ziyi105"},"content":" */","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"ziyi105"},"content":"public class Parser {","lastModifiedDate":"2023-10-14"},{"lineNumber":27,"author":{"gitId":"DextheChik3n"},"content":" public static final Pattern COMMAND_ARGUMENT_FORMAT \u003d Pattern.compile(\"(?\u003ccommandWord\u003e\\\\S+)\\\\s?(?\u003carguments\u003e.*)\");","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"ziyi105"},"content":" // Command Argument Patterns","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"DextheChik3n"},"content":" public static final String INGREDIENT_ARGUMENT_STRING \u003d \"ingredient/(?\u003cname\u003e[A-Za-z0-9\\\\s]+) \"","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"DextheChik3n"},"content":" + \"qty/(?\u003cqty\u003e[A-Za-z0-9\\\\s]+)\";","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"DextheChik3n"},"content":" public static final String INGREDIENT_DIVIDER_REGEX \u003d \", \";","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"DextheChik3n"},"content":" public static final String INGREDIENT_DIVIDER_STRING \u003d \",\";","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"DextheChik3n"},"content":" public static final String INGREDIENT_NAME_REGEX_GROUP_LABEL \u003d \"name\";","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"DextheChik3n"},"content":" public static final String INGREDIENT_QTY_REGEX_GROUP_LABEL \u003d \"qty\";","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"DextheChik3n"},"content":" public static final int DISH_NAME_MATCHER_GROUP_NUM \u003d 1;","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"DextheChik3n"},"content":" public static final int PRICE_MATCHER_GROUP_NUM \u003d 2;","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"DextheChik3n"},"content":" public static final int INGREDIENT_LIST_MATCHER_GROUP_NUM \u003d 4;","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"DextheChik3n"},"content":" private static final String ADD_ARGUMENT_STRING \u003d \"name/([A-Za-z0-9\\\\s]+) \"","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"DextheChik3n"},"content":" + \"price/([+-]?(?\u003d\\\\.\\\\d|\\\\d)(?:\\\\d+)?(?:\\\\.?\\\\d*))(?:[Ee]([+-]?\\\\d+))? \"","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"DextheChik3n"},"content":" + \"(ingredient/[A-Za-z0-9\\\\s]+ qty/[A-Za-z0-9\\\\s]+\"","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"DextheChik3n"},"content":" + \"(?:, ingredient/[A-Za-z0-9\\\\s]+ qty/[A-Za-z0-9\\\\s]+)*)\";","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"ziyi105"},"content":" private static final String LIST_INGREDIENTS_ARGUMENT_STRING \u003d \"(\\\\d+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"ziyi105"},"content":" private static final String DELETE_ARGUMENT_STRING \u003d \"(\\\\d+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"ziyi105"},"content":" private static final String EDIT_PRICE_ARGUMENT_STRING \u003d \"index/(\\\\d+) price/(\\\\d+(\\\\.\\\\d+)?)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"ziyi105"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"ziyi105"},"content":" * Parse userInput and group it under commandWord and arguments","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"ziyi105"},"content":" * use commandWord to find the matching command and prepare the command","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"Cazh1"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"ziyi105"},"content":" * @param userInput full user input","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"Cazh1"},"content":" * @param menu The arraylist object created that stores current tasks","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"ziyi105"},"content":" * @return command requested by the user","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"ziyi105"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"Cazh1"},"content":" public static Command parseCommand(Menu menu, String userInput) {","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"ziyi105"},"content":" final Matcher matcher \u003d COMMAND_ARGUMENT_FORMAT.matcher(userInput.trim());","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"ziyi105"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"ziyi105"},"content":" return new IncorrectCommand(\"Incorrect command format!\");","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"ziyi105"},"content":" final String commandWord \u003d matcher.group(\"commandWord\");","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"ziyi105"},"content":" final String arguments \u003d matcher.group(\"arguments\");","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"ziyi105"},"content":" switch (commandWord) {","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"ziyi105"},"content":" case AddDishCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"ziyi105"},"content":" return prepareAdd(arguments);","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":70,"author":{"gitId":"ziyi105"},"content":" case DeleteDishCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"ShaniceTang"},"content":" return prepareDelete(menu, arguments);","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"ziyi105"},"content":" case ListIngredientCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"NaychiMin"},"content":" return prepareListIngredient(menu, arguments);","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"ziyi105"},"content":" case ListMenuCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"ziyi105"},"content":" return prepareListMenu();","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"ziyi105"},"content":" case EditPriceCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"ziyi105"},"content":" return prepareEditPriceCommand(menu, arguments);","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"Cazh1"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"Cazh1"},"content":" return new ExitCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"ziyi105"},"content":" default:","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"ShaniceTang"},"content":" return new IncorrectCommand(Messages.UNKNOWN_COMMAND_MESSAGE);","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"ziyi105"},"content":" // All prepareCommand Classes","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"DextheChik3n"},"content":" private static Command prepareListMenu() {","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"Cazh1"},"content":" return new ListMenuCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"ziyi105"},"content":" private static Command prepareEditListCommand(String arguments) {","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"ziyi105"},"content":" return null;","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"ziyi105"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"ziyi105"},"content":" * Parse argument in the context of edit price command","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"ziyi105"},"content":" * @param menu menu of the current session","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"ziyi105"},"content":" * @param arguments string that matches group arguments","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"ziyi105"},"content":" * @return new EditDishCommand","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"ziyi105"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"ziyi105"},"content":" private static Command prepareEditPriceCommand(Menu menu, String arguments) {","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"ziyi105"},"content":" Pattern editDishArgumentsPattern \u003d Pattern.compile(EDIT_PRICE_ARGUMENT_STRING);","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"ziyi105"},"content":" Matcher matcher \u003d editDishArgumentsPattern.matcher(arguments);","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"ziyi105"},"content":" // Checks whether the overall pattern of edit price arguments is correct","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"ziyi105"},"content":" if (!matcher.find()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":111,"author":{"gitId":"ziyi105"},"content":" return new IncorrectCommand(Messages.MISSING_ARGUMENT_FOR_EDIT_PRICE);","lastModifiedDate":"2023-10-18"},{"lineNumber":112,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"ziyi105"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"ziyi105"},"content":" int dishIndexGroup \u003d 1;","lastModifiedDate":"2023-10-18"},{"lineNumber":116,"author":{"gitId":"ziyi105"},"content":" int newPriceGroup \u003d 2;","lastModifiedDate":"2023-10-18"},{"lineNumber":117,"author":{"gitId":"ziyi105"},"content":" int dishIndex \u003d Integer.parseInt(matcher.group(dishIndexGroup));","lastModifiedDate":"2023-10-18"},{"lineNumber":118,"author":{"gitId":"ziyi105"},"content":" float newPrice \u003d Float.parseFloat(matcher.group(newPriceGroup));","lastModifiedDate":"2023-10-18"},{"lineNumber":119,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"ziyi105"},"content":" // Check whether the dish index is valid","lastModifiedDate":"2023-10-18"},{"lineNumber":121,"author":{"gitId":"ziyi105"},"content":" if (!menu.isValidDishIndex(dishIndex)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"ziyi105"},"content":" return new IncorrectCommand(Messages.INVALID_DISH_INDEX);","lastModifiedDate":"2023-10-18"},{"lineNumber":123,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":124,"author":{"gitId":"ziyi105"},"content":" return new EditPriceCommand(dishIndex, newPrice);","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"ziyi105"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":126,"author":{"gitId":"ziyi105"},"content":" return new IncorrectCommand(Messages.WRONG_ARGUMENT_TYPE_FOR_EDIT_PRICE);","lastModifiedDate":"2023-10-18"},{"lineNumber":127,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":129,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"DextheChik3n"},"content":" private static Command prepareAdd(String arguments) {","lastModifiedDate":"2023-10-17"},{"lineNumber":131,"author":{"gitId":"ziyi105"},"content":" final Pattern addArgumentPatter \u003d Pattern.compile(ADD_ARGUMENT_STRING);","lastModifiedDate":"2023-10-17"},{"lineNumber":132,"author":{"gitId":"ziyi105"},"content":" Matcher matcher \u003d addArgumentPatter.matcher(arguments);","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"ziyi105"},"content":" // Checks whether the overall pattern of add arguments is correct","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"DextheChik3n"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":136,"author":{"gitId":"DextheChik3n"},"content":" return new IncorrectCommand(\"Error: Incorrect format for the add command.\\n\"","lastModifiedDate":"2023-10-18"},{"lineNumber":137,"author":{"gitId":"DextheChik3n"},"content":" + AddDishCommand.MESSAGE_USAGE);","lastModifiedDate":"2023-10-18"},{"lineNumber":138,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":139,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":140,"author":{"gitId":"ziyi105"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":141,"author":{"gitId":"ziyi105"},"content":" // To retrieve specific arguments from arguments","lastModifiedDate":"2023-10-17"},{"lineNumber":142,"author":{"gitId":"DextheChik3n"},"content":" String dishName \u003d matcher.group(DISH_NAME_MATCHER_GROUP_NUM);","lastModifiedDate":"2023-10-18"},{"lineNumber":143,"author":{"gitId":"DextheChik3n"},"content":" float price \u003d Float.parseFloat(matcher.group(PRICE_MATCHER_GROUP_NUM));","lastModifiedDate":"2023-10-18"},{"lineNumber":144,"author":{"gitId":"DextheChik3n"},"content":" String ingredientsListString \u003d matcher.group(INGREDIENT_LIST_MATCHER_GROUP_NUM);","lastModifiedDate":"2023-10-18"},{"lineNumber":145,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":146,"author":{"gitId":"DextheChik3n"},"content":" IncorrectCommand incorrectCommand1 \u003d checkNegativePrice(price);","lastModifiedDate":"2023-10-18"},{"lineNumber":147,"author":{"gitId":"DextheChik3n"},"content":" if (incorrectCommand1 !\u003d null) {","lastModifiedDate":"2023-10-18"},{"lineNumber":148,"author":{"gitId":"DextheChik3n"},"content":" return incorrectCommand1;","lastModifiedDate":"2023-10-18"},{"lineNumber":149,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":150,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":151,"author":{"gitId":"DextheChik3n"},"content":" // Capture the list of ingredients","lastModifiedDate":"2023-10-18"},{"lineNumber":152,"author":{"gitId":"DextheChik3n"},"content":" ArrayList\u003cIngredient\u003e ingredients \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":153,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":154,"author":{"gitId":"DextheChik3n"},"content":" IncorrectCommand incorrectCommand2 \u003d ingredientParsing(ingredientsListString, ingredients);","lastModifiedDate":"2023-10-18"},{"lineNumber":155,"author":{"gitId":"DextheChik3n"},"content":" if (incorrectCommand2 !\u003d null) {","lastModifiedDate":"2023-10-18"},{"lineNumber":156,"author":{"gitId":"DextheChik3n"},"content":" return incorrectCommand2;","lastModifiedDate":"2023-10-18"},{"lineNumber":157,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":158,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":159,"author":{"gitId":"DextheChik3n"},"content":" Dish dish \u003d new Dish(dishName, ingredients, price);","lastModifiedDate":"2023-10-18"},{"lineNumber":160,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":161,"author":{"gitId":"DextheChik3n"},"content":" return new AddDishCommand(dish);","lastModifiedDate":"2023-10-18"},{"lineNumber":162,"author":{"gitId":"ziyi105"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":163,"author":{"gitId":"DextheChik3n"},"content":" return new IncorrectCommand(\"MESSAGE_INVALID_ADD_COMMAND_FORMAT\"","lastModifiedDate":"2023-10-18"},{"lineNumber":164,"author":{"gitId":"DextheChik3n"},"content":" + AddDishCommand.MESSAGE_USAGE);","lastModifiedDate":"2023-10-18"},{"lineNumber":165,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":166,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":167,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":168,"author":{"gitId":"DextheChik3n"},"content":" private static IncorrectCommand checkNegativePrice(float price) {","lastModifiedDate":"2023-10-18"},{"lineNumber":169,"author":{"gitId":"DextheChik3n"},"content":" if (price \u003c 0) {","lastModifiedDate":"2023-10-18"},{"lineNumber":170,"author":{"gitId":"DextheChik3n"},"content":" return new IncorrectCommand(\"MESSAGE_INVALID_ADD_COMMAND_FORMAT\"","lastModifiedDate":"2023-10-18"},{"lineNumber":171,"author":{"gitId":"DextheChik3n"},"content":" + AddDishCommand.MESSAGE_USAGE);","lastModifiedDate":"2023-10-18"},{"lineNumber":172,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":173,"author":{"gitId":"DextheChik3n"},"content":" return null;","lastModifiedDate":"2023-10-18"},{"lineNumber":174,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":175,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":176,"author":{"gitId":"DextheChik3n"},"content":" private static IncorrectCommand ingredientParsing(String ingredientsListString, ArrayList\u003cIngredient\u003e ingredients) {","lastModifiedDate":"2023-10-18"},{"lineNumber":177,"author":{"gitId":"DextheChik3n"},"content":" String[] ingredientListInputText \u003d {ingredientsListString};","lastModifiedDate":"2023-10-18"},{"lineNumber":178,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":179,"author":{"gitId":"DextheChik3n"},"content":" //check if there is more than 1 ingredient","lastModifiedDate":"2023-10-18"},{"lineNumber":180,"author":{"gitId":"DextheChik3n"},"content":" if (ingredientsListString.contains(INGREDIENT_DIVIDER_STRING)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":181,"author":{"gitId":"DextheChik3n"},"content":" //split the ingredients into separate individual ingredients","lastModifiedDate":"2023-10-18"},{"lineNumber":182,"author":{"gitId":"DextheChik3n"},"content":" ingredientListInputText \u003d ingredientsListString.split(INGREDIENT_DIVIDER_REGEX);","lastModifiedDate":"2023-10-18"},{"lineNumber":183,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":184,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":185,"author":{"gitId":"DextheChik3n"},"content":" for (String inputIngredientText: ingredientListInputText) {","lastModifiedDate":"2023-10-18"},{"lineNumber":186,"author":{"gitId":"DextheChik3n"},"content":" final Pattern ingredientPattern \u003d Pattern.compile(INGREDIENT_ARGUMENT_STRING);","lastModifiedDate":"2023-10-18"},{"lineNumber":187,"author":{"gitId":"DextheChik3n"},"content":" Matcher ingredientMatcher \u003d ingredientPattern.matcher(inputIngredientText);","lastModifiedDate":"2023-10-18"},{"lineNumber":188,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":189,"author":{"gitId":"DextheChik3n"},"content":" if (!ingredientMatcher.matches()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":190,"author":{"gitId":"DextheChik3n"},"content":" return new IncorrectCommand(\"Error: Incorrect format for the ingredients\\n\"","lastModifiedDate":"2023-10-18"},{"lineNumber":191,"author":{"gitId":"DextheChik3n"},"content":" + AddDishCommand.MESSAGE_USAGE);","lastModifiedDate":"2023-10-18"},{"lineNumber":192,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":193,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":194,"author":{"gitId":"DextheChik3n"},"content":" String ingredientName \u003d ingredientMatcher.group(INGREDIENT_NAME_REGEX_GROUP_LABEL);","lastModifiedDate":"2023-10-18"},{"lineNumber":195,"author":{"gitId":"DextheChik3n"},"content":" String ingredientQty \u003d ingredientMatcher.group(INGREDIENT_QTY_REGEX_GROUP_LABEL);","lastModifiedDate":"2023-10-18"},{"lineNumber":196,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":197,"author":{"gitId":"DextheChik3n"},"content":" Ingredient ingredient \u003d new Ingredient(ingredientName, ingredientQty);","lastModifiedDate":"2023-10-18"},{"lineNumber":198,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":199,"author":{"gitId":"DextheChik3n"},"content":" ingredients.add(ingredient);","lastModifiedDate":"2023-10-18"},{"lineNumber":200,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":201,"author":{"gitId":"DextheChik3n"},"content":" return null;","lastModifiedDate":"2023-10-18"},{"lineNumber":202,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":203,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":204,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":205,"author":{"gitId":"Cazh1"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":206,"author":{"gitId":"Cazh1"},"content":" * Parses arguments in the context of the ListIngredient command.","lastModifiedDate":"2023-10-17"},{"lineNumber":207,"author":{"gitId":"NaychiMin"},"content":" * @param menu menu of the current session","lastModifiedDate":"2023-10-18"},{"lineNumber":208,"author":{"gitId":"NaychiMin"},"content":" * @param arguments string that matches group arguments","lastModifiedDate":"2023-10-18"},{"lineNumber":209,"author":{"gitId":"Cazh1"},"content":" * @return the prepared command","lastModifiedDate":"2023-10-17"},{"lineNumber":210,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":211,"author":{"gitId":"NaychiMin"},"content":" private static Command prepareListIngredient(Menu menu, String arguments) {","lastModifiedDate":"2023-10-18"},{"lineNumber":212,"author":{"gitId":"NaychiMin"},"content":" final Pattern prepareListPattern \u003d Pattern.compile(LIST_INGREDIENTS_ARGUMENT_STRING);","lastModifiedDate":"2023-10-18"},{"lineNumber":213,"author":{"gitId":"NaychiMin"},"content":" Matcher matcher \u003d prepareListPattern.matcher(arguments.trim());","lastModifiedDate":"2023-10-18"},{"lineNumber":214,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":215,"author":{"gitId":"NaychiMin"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":216,"author":{"gitId":"NaychiMin"},"content":" return new IncorrectCommand(Messages.MISSING_ARGUMENT_FOR_LIST_INGREDIENTS);","lastModifiedDate":"2023-10-18"},{"lineNumber":217,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":218,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":219,"author":{"gitId":"NaychiMin"},"content":" int dishIndex \u003d Integer.parseInt(matcher.group(1));","lastModifiedDate":"2023-10-18"},{"lineNumber":220,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":221,"author":{"gitId":"NaychiMin"},"content":" if (!menu.isValidDishIndex(dishIndex)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":222,"author":{"gitId":"NaychiMin"},"content":" return new IncorrectCommand(Messages.INVALID_DISH_INDEX);","lastModifiedDate":"2023-10-18"},{"lineNumber":223,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":224,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":225,"author":{"gitId":"NaychiMin"},"content":" return new ListIngredientCommand(dishIndex);","lastModifiedDate":"2023-10-18"},{"lineNumber":226,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":227,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":228,"author":{"gitId":"ShaniceTang"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":229,"author":{"gitId":"ShaniceTang"},"content":" * Parses arguments in the context of the Delete command.","lastModifiedDate":"2023-10-17"},{"lineNumber":230,"author":{"gitId":"ShaniceTang"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":231,"author":{"gitId":"ShaniceTang"},"content":" * @param menu menu of the current session","lastModifiedDate":"2023-10-18"},{"lineNumber":232,"author":{"gitId":"ShaniceTang"},"content":" * @param arguments string that matches group arguments","lastModifiedDate":"2023-10-18"},{"lineNumber":233,"author":{"gitId":"ShaniceTang"},"content":" * @return DeleteDishCommand if command is valid, IncorrectCommand otherwise","lastModifiedDate":"2023-10-18"},{"lineNumber":234,"author":{"gitId":"ShaniceTang"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":235,"author":{"gitId":"ShaniceTang"},"content":" private static Command prepareDelete(Menu menu, String arguments) {","lastModifiedDate":"2023-10-18"},{"lineNumber":236,"author":{"gitId":"ShaniceTang"},"content":" Pattern deleteDishArgumentsPattern \u003d Pattern.compile(DELETE_ARGUMENT_STRING);","lastModifiedDate":"2023-10-18"},{"lineNumber":237,"author":{"gitId":"ShaniceTang"},"content":" Matcher matcher \u003d deleteDishArgumentsPattern.matcher(arguments.trim());","lastModifiedDate":"2023-10-18"},{"lineNumber":238,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":239,"author":{"gitId":"ShaniceTang"},"content":" // Checks whether the overall pattern of delete price arguments is correct","lastModifiedDate":"2023-10-18"},{"lineNumber":240,"author":{"gitId":"ShaniceTang"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":241,"author":{"gitId":"ShaniceTang"},"content":" return new IncorrectCommand(Messages.MISSING_ARGUMENT_FOR_DELETE);","lastModifiedDate":"2023-10-18"},{"lineNumber":242,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":243,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":244,"author":{"gitId":"ShaniceTang"},"content":" int listIndexArgGroup \u003d 1;","lastModifiedDate":"2023-10-18"},{"lineNumber":245,"author":{"gitId":"ShaniceTang"},"content":" int dishIndex \u003d Integer.parseInt(matcher.group(listIndexArgGroup));","lastModifiedDate":"2023-10-18"},{"lineNumber":246,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":247,"author":{"gitId":"ShaniceTang"},"content":" if (!menu.isValidDishIndex(dishIndex)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":248,"author":{"gitId":"ShaniceTang"},"content":" return new IncorrectCommand(Messages.INVALID_DISH_INDEX);","lastModifiedDate":"2023-10-18"},{"lineNumber":249,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":250,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":251,"author":{"gitId":"ShaniceTang"},"content":" return new DeleteDishCommand(dishIndex);","lastModifiedDate":"2023-10-18"},{"lineNumber":252,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":253,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":254,"author":{"gitId":"Cazh1"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":255,"author":{"gitId":"Cazh1"},"content":" * Parses the given arguments string to identify task index number.","lastModifiedDate":"2023-10-17"},{"lineNumber":256,"author":{"gitId":"Cazh1"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":257,"author":{"gitId":"Cazh1"},"content":" * @param userInput arguments string to parse as index number","lastModifiedDate":"2023-10-17"},{"lineNumber":258,"author":{"gitId":"Cazh1"},"content":" * @param command expected String name of the command called","lastModifiedDate":"2023-10-17"},{"lineNumber":259,"author":{"gitId":"Cazh1"},"content":" * @return the parsed index number","lastModifiedDate":"2023-10-17"},{"lineNumber":260,"author":{"gitId":"Cazh1"},"content":" * @throws ParseException if no region of the args string could be found for the index","lastModifiedDate":"2023-10-17"},{"lineNumber":261,"author":{"gitId":"Cazh1"},"content":" * @throws NumberFormatException the args string region is not a valid number","lastModifiedDate":"2023-10-17"},{"lineNumber":262,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":263,"author":{"gitId":"NaychiMin"},"content":" private static int parseArgsAsDisplayedIndex(String userInput, String command)","lastModifiedDate":"2023-10-17"},{"lineNumber":264,"author":{"gitId":"Cazh1"},"content":" throws ParseException, NumberFormatException {","lastModifiedDate":"2023-10-17"},{"lineNumber":265,"author":{"gitId":"Cazh1"},"content":" String formattedString \u003d userInput.replace(command, \"\").trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":266,"author":{"gitId":"NaychiMin"},"content":" return Integer.parseInt(formattedString);","lastModifiedDate":"2023-10-17"},{"lineNumber":267,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":268,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"NaychiMin":19,"DextheChik3n":72,"Cazh1":29,"ziyi105":123,"ShaniceTang":25}},{"path":"src/main/java/seedu/cafectrl/ui/Messages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ziyi105"},"content":"package seedu.cafectrl.ui;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"ziyi105"},"content":"public class Messages {","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"ziyi105"},"content":" // Error messages","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":" public static final String MISSING_ARGUMENT_FOR_EDIT_PRICE \u003d \"Error: Missing arguments \"","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":" + \"for edit price command.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"ShaniceTang"},"content":" public static final String MISSING_ARGUMENT_FOR_LIST_INGREDIENTS \u003d \"Error: Missing arguments \"","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"ShaniceTang"},"content":" + \"for list ingredients command.\";","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"ShaniceTang"},"content":" public static final String MISSING_ARGUMENT_FOR_DELETE \u003d \"Error: Missing arguments \"","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"ShaniceTang"},"content":" + \"for delete command.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"NaychiMin"},"content":" public static final String INVALID_DISH_INDEX \u003d \"Error: Invalid dish index.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"NaychiMin"},"content":" public static final String WRONG_ARGUMENT_TYPE_FOR_EDIT_PRICE \u003d \"Error: Invalid dish index. \\n \"","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"NaychiMin"},"content":" + \"Make sure dish index is \"","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"ziyi105"},"content":" + \"of type int and price is of type float!\";","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"ShaniceTang"},"content":" public static final String UNKNOWN_COMMAND_MESSAGE \u003d \"Error: Unknown command. \"","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"ShaniceTang"},"content":" + \"Type \u0027help\u0027 to view the accepted list of commands\";","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"ziyi105"},"content":" // Ui messages","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"ziyi105"},"content":" public static final String PRICE_MODIFIED_MESSAGE \u003d \"Price modified for the following dish: \";","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"ShaniceTang"},"content":" public static final String WELCOME_MESSAGE \u003d \"Hello! Welcome to CafeCTRL!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"ShaniceTang"},"content":" public static final String GOODBYE_MESSAGE \u003d \"Goodbye \u003c3 Have a great day ahead!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"Cazh1"},"content":" public static final String LIST_MENU_MESSAGE \u003d \"| Ah, behold, the grand menu of delights! |\";","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"Cazh1"},"content":" public static final String MENU_EMPTY_MESSAGE \u003d \"It seems our menu is currently taking a break. \"","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"Cazh1"},"content":" + \"Let\u0027s give it a wake-up call and fill \u0027er up with delectable delights, shall we?\";","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"Cazh1"},"content":" public static final String MENU_TOP \u003d \"+-----------------------------------------+\";","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"Cazh1"},"content":" public static final String MENU_CORNER \u003d \"+--------------------------+--------------+\";","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"Cazh1"},"content":" public static final String MENU_TITLE \u003d \"| Dish Name | Price |\";","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"ShaniceTang"},"content":" public static final String ADD_DISH_MESSAGE \u003d \"You have added the following dish...\";","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"NaychiMin":4,"Cazh1":6,"ziyi105":12,"ShaniceTang":19}},{"path":"src/main/java/seedu/cafectrl/ui/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Ingredient;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DextheChik3n"},"content":"import java.text.DecimalFormat;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"NaychiMin"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"NaychiMin"},"content":"public class Ui {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"DextheChik3n"},"content":" public static final int OFFSET_LIST_INDEX \u003d 1;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"DextheChik3n"},"content":" public static final String LINE_STRING \u003d \"-----------------------------------------------------\";","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"NaychiMin"},"content":" private final Scanner scanner;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"NaychiMin"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"NaychiMin"},"content":" * Constructs a UI instance with a Scanner for user input.","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"NaychiMin"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"NaychiMin"},"content":" public Ui() {","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"NaychiMin"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"DextheChik3n"},"content":" public void printLine() {","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"DextheChik3n"},"content":" showToUser(LINE_STRING);","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"NaychiMin"},"content":" public String receiveUserInput() {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"DextheChik3n"},"content":" System.out.print(\"\u003e \");","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"NaychiMin"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"NaychiMin"},"content":" public void showWelcome() {","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"ShaniceTang"},"content":" showToUser(Messages.WELCOME_MESSAGE);","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"NaychiMin"},"content":" public void showGoodbye() {","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"ShaniceTang"},"content":" showToUser(Messages.GOODBYE_MESSAGE);","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"NaychiMin"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"NaychiMin"},"content":" * Prints out the quantity of each ingredient needed for the","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"NaychiMin"},"content":" * dish that the user selects.","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"NaychiMin"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"NaychiMin"},"content":" * @param selectedDish Dish for ingredients to be listed out.","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"NaychiMin"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"NaychiMin"},"content":" public void printIngredients(Dish selectedDish) {","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"NaychiMin"},"content":" String ingredientsString \u003d selectedDish.getName() + \" Ingredients: \\n\";","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"NaychiMin"},"content":" for (Ingredient ingredient : selectedDish.getIngredients()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"NaychiMin"},"content":" ingredientsString +\u003d ingredient.toString() + \"\\n\";","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"NaychiMin"},"content":" showToUser(ingredientsString.trim());","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"DextheChik3n"},"content":" public void printAddDishMessage(Dish dish) {","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"DextheChik3n"},"content":" String dishNameString \u003d \"Dish Name: \" + dish.getName();","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"DextheChik3n"},"content":" DecimalFormat dollarValue \u003d new DecimalFormat(\"0.00\");","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"DextheChik3n"},"content":" float dishPrice \u003d dish.getPrice();","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"DextheChik3n"},"content":" String dishPriceString \u003d \"Dish Price: $\" + dollarValue.format(dishPrice);","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"DextheChik3n"},"content":" StringBuilder dishIngredientsString \u003d new StringBuilder(\"Ingredients:\\n\");","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"DextheChik3n"},"content":" for (int i \u003d 0; i \u003c dish.getIngredients().size(); i++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"DextheChik3n"},"content":" Ingredient ingredient \u003d dish.getIngredients().get(i);","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"DextheChik3n"},"content":" dishIngredientsString.append(\"\\t\")","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"DextheChik3n"},"content":" .append(i + OFFSET_LIST_INDEX)","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"DextheChik3n"},"content":" .append(\". \")","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"DextheChik3n"},"content":" .append(ingredient.toString())","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"DextheChik3n"},"content":" .append(\"\\n\");","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"ShaniceTang"},"content":" showToUser(Messages.ADD_DISH_MESSAGE,","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"DextheChik3n"},"content":" dishNameString,","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"DextheChik3n"},"content":" dishPriceString,","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"DextheChik3n"},"content":" dishIngredientsString.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"ShaniceTang"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"ShaniceTang"},"content":" * Shows delete message to user","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"ShaniceTang"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"ShaniceTang"},"content":" * @param selectedDish Dish to be deleted","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"ShaniceTang"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"ShaniceTang"},"content":" public void showDeleteMessage(Dish selectedDish) {","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"ShaniceTang"},"content":" showToUser(\"Okay! \" + selectedDish.getName() + \" is deleted! :)\");","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"DextheChik3n"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"DextheChik3n"},"content":" * Shows messages(s) to the user","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"DextheChik3n"},"content":" * @param message string(s) of messages to print","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"DextheChik3n"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"DextheChik3n"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"DextheChik3n"},"content":" for (String m: message) {","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"DextheChik3n"},"content":" System.out.println(m);","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"Cazh1"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"Cazh1"},"content":" * Shows menu to user is table format","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"Cazh1"},"content":" * @param dishName","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"Cazh1"},"content":" * @param dishPrice","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"Cazh1"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"Cazh1"},"content":" public void showToUserFormat(String dishName, String dishPrice) {","lastModifiedDate":"2023-10-18"},{"lineNumber":103,"author":{"gitId":"Cazh1"},"content":" String leftAlignFormat \u003d \"| %-24s | %-12s |%n\";","lastModifiedDate":"2023-10-18"},{"lineNumber":104,"author":{"gitId":"Cazh1"},"content":" System.out.format(leftAlignFormat, dishName, dishPrice);","lastModifiedDate":"2023-10-18"},{"lineNumber":105,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"Cazh1"},"content":" //+-----------------+------+","lastModifiedDate":"2023-10-18"},{"lineNumber":107,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":108,"author":{"gitId":"ziyi105"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"ziyi105"},"content":" * show edit price message to user","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"ziyi105"},"content":" * @param menuItem menuItem that has been modified","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"ziyi105"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"ziyi105"},"content":" public void showEditPriceMessage(String menuItem) {","lastModifiedDate":"2023-10-18"},{"lineNumber":113,"author":{"gitId":"ziyi105"},"content":" this.showToUser(Messages.PRICE_MODIFIED_MESSAGE, menuItem);","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"NaychiMin"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"NaychiMin":40,"DextheChik3n":42,"Cazh1":13,"ziyi105":8,"ShaniceTang":12}},{"path":"src/test/java/seedu/cafectrl/DukeTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"class DukeTest {","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":" public void sampleTest() {","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":" assertTrue(true);","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"DextheChik3n":1,"-":11}},{"path":"src/test/java/seedu/cafectrl/UiTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ShaniceTang"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"ShaniceTang"},"content":" * Junit test for Ui.java","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"ShaniceTang"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"ShaniceTang"},"content":"public class UiTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"ShaniceTang"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"DextheChik3n":1,"ShaniceTang":7}},{"path":"src/test/java/seedu/cafectrl/command/AddDishCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Ingredient;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"DextheChik3n"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"DextheChik3n"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"DextheChik3n"},"content":"class AddDishCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"DextheChik3n"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"DextheChik3n"},"content":" void execute_oneDishAdded_expectDishInMenu() {","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"DextheChik3n"},"content":" ArrayList\u003cIngredient\u003e ingredients \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"DextheChik3n"},"content":" ArrayList\u003cDish\u003e menuItems \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"DextheChik3n"},"content":" Menu menu \u003d new Menu(menuItems);","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"DextheChik3n"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"DextheChik3n"},"content":" //creating a dish","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"DextheChik3n"},"content":" ingredients.add(new Ingredient(\"chicken\", \"100g\"));","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"DextheChik3n"},"content":" Dish dish \u003d new Dish(\"Chicken Rice\", ingredients, (float) 1.00);","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"DextheChik3n"},"content":" AddDishCommand addDishCommand \u003d new AddDishCommand(dish);","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"DextheChik3n"},"content":" addDishCommand.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"DextheChik3n"},"content":" assertEquals(1, menu.getMenuItemsList().size());","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"DextheChik3n"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"DextheChik3n":30}},{"path":"src/test/java/seedu/cafectrl/command/CommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"DextheChik3n"},"content":"class CommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DextheChik3n"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"DextheChik3n":5}},{"path":"src/test/java/seedu/cafectrl/command/DeleteDishCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"ShaniceTang"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"ShaniceTang"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"ShaniceTang"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"ShaniceTang"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"ShaniceTang"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ShaniceTang"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"ShaniceTang"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"ShaniceTang"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"Cazh1"},"content":"class DeleteDishCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ShaniceTang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"ShaniceTang"},"content":" void execute_validInput() {","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"ShaniceTang"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"ShaniceTang"},"content":" menu.addDish(new Dish(\"Chicken Rice\", 2.50F));","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ShaniceTang"},"content":" menu.addDish(new Dish(\"Chicken Curry\", 4.30F));","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ShaniceTang"},"content":" menu.addDish(new Dish(\"Nasi Lemak\", 5.60F));","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"ShaniceTang"},"content":" ArrayList\u003cString\u003e actualOutput \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"ShaniceTang"},"content":" Ui ui \u003d new Ui() {","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"ShaniceTang"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"ShaniceTang"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"ShaniceTang"},"content":" actualOutput.addAll(Arrays.asList(message));","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"ShaniceTang"},"content":" };","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"ShaniceTang"},"content":" int testIndex \u003d 2;","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"ShaniceTang"},"content":" DeleteDishCommand deleteDishCommand \u003d new DeleteDishCommand(testIndex);","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"ShaniceTang"},"content":" deleteDishCommand.execute(menu, ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ShaniceTang"},"content":" int actualOutputIndex \u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"ShaniceTang"},"content":" String expectedOutput \u003d \"Okay! Chicken Curry is deleted! :)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"ShaniceTang"},"content":" assertEquals(expectedOutput, actualOutput.get(actualOutputIndex));","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"ShaniceTang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"ShaniceTang"},"content":" void execute_invalidInput_throwIndexOutOfBoundsException() {","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"ShaniceTang"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"ShaniceTang"},"content":" menu.addDish(new Dish(\"Chicken Rice\", 2.50F));","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"ShaniceTang"},"content":" menu.addDish(new Dish(\"Chicken Curry\", 4.30F));","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"ShaniceTang"},"content":" menu.addDish(new Dish(\"Nasi Lemak\", 5.60F));","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"ShaniceTang"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"ShaniceTang"},"content":" int testIndex \u003d 5;","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"ShaniceTang"},"content":" DeleteDishCommand deleteDishCommand \u003d new DeleteDishCommand(testIndex);","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"ShaniceTang"},"content":" assertThrows(IndexOutOfBoundsException.class, () -\u003e deleteDishCommand.execute(menu, ui));","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"Cazh1"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"DextheChik3n":1,"Cazh1":4,"ShaniceTang":49}},{"path":"src/test/java/seedu/cafectrl/command/EditPriceCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ziyi105"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"ziyi105"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.ui.Messages;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"ziyi105"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"ziyi105"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"ziyi105"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"ziyi105"},"content":"class EditPriceCommandTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"ziyi105"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"ziyi105"},"content":" void execute_validInput_editPrice() {","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"ziyi105"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"ziyi105"},"content":" Dish testDish \u003d new Dish(\"Chicken Rice\", 2.50F);","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"ziyi105"},"content":" menu.addDish(testDish);","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"ziyi105"},"content":" ArrayList\u003cString\u003e actualOutput \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"ziyi105"},"content":" Ui ui \u003d new Ui() {","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"ziyi105"},"content":" @Override","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"ziyi105"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"ziyi105"},"content":" actualOutput.addAll(Arrays.asList(message));","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"ziyi105"},"content":" };","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"ziyi105"},"content":" int testDishIndex \u003d 1;","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"ziyi105"},"content":" float testNewPrice \u003d 3;","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"ziyi105"},"content":" Command editPriceCommand \u003d new EditPriceCommand(testDishIndex, testNewPrice);","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"ziyi105"},"content":" editPriceCommand.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"ziyi105"},"content":" int firstLine \u003d 0;","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"ziyi105"},"content":" int secondLine \u003d 1;","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"ziyi105"},"content":" String expectedOutputFirstLine \u003d Messages.PRICE_MODIFIED_MESSAGE;","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"ziyi105"},"content":" String expectedOutputSecondLine \u003d testDish.toString();","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"ziyi105"},"content":" assertEquals(expectedOutputFirstLine, actualOutput.get(firstLine));","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"ziyi105"},"content":" assertEquals(expectedOutputSecondLine, actualOutput.get(secondLine));","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"ziyi105":42}},{"path":"src/test/java/seedu/cafectrl/command/ListIngredientCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"NaychiMin"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"NaychiMin"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"NaychiMin"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"NaychiMin"},"content":"import seedu.cafectrl.data.dish.Ingredient;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"NaychiMin"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"NaychiMin"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"NaychiMin"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"NaychiMin"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"NaychiMin"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"Cazh1"},"content":"class ListIngredientCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"NaychiMin"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"NaychiMin"},"content":" public void execute_validIndex_printsIngredients() {","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"NaychiMin"},"content":" ArrayList\u003cDish\u003e menuItems \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"NaychiMin"},"content":" menuItems.add(new Dish(\"Chicken Rice\",","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"NaychiMin"},"content":" new ArrayList\u003c\u003e(Arrays.asList(new Ingredient(\"Rice\", \"1 cup\"),","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"NaychiMin"},"content":" new Ingredient(\"Chicken\", \"100g\"))), 8.0F));","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"NaychiMin"},"content":" menuItems.add(new Dish(\"Chicken Sandwich\",","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"NaychiMin"},"content":" new ArrayList\u003c\u003e(Arrays.asList(new Ingredient(\"Lettuce\", \"100g\"),","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"NaychiMin"},"content":" new Ingredient(\"Chicken\", \"50g\"))), 5.0F));","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"NaychiMin"},"content":" Menu menu \u003d new Menu(menuItems);","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"NaychiMin"},"content":" ArrayList\u003cString\u003e actualOutput \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"NaychiMin"},"content":" Ui ui \u003d new Ui() {","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"NaychiMin"},"content":" @Override","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"NaychiMin"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"NaychiMin"},"content":" actualOutput.addAll(Arrays.asList(message));","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"NaychiMin"},"content":" };","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"NaychiMin"},"content":" int indexToSelect \u003d 1;","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"NaychiMin"},"content":" ListIngredientCommand listIngredientCommand \u003d new ListIngredientCommand(indexToSelect);","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"NaychiMin"},"content":" listIngredientCommand.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"NaychiMin"},"content":" String expectedOutput \u003d \"Chicken Rice Ingredients: \\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"NaychiMin"},"content":" \"Rice - 1 cup\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"NaychiMin"},"content":" \"Chicken - 100g\\n\";","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"NaychiMin"},"content":" assertEquals(expectedOutput.trim().replaceAll(\"\\\\s+\", \" \"),","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"NaychiMin"},"content":" actualOutput.get(0).trim().replaceAll(\"\\\\s+\", \" \"));","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"NaychiMin"},"content":" public void execute_invalidIndex_returnsErrorMessage() {","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"NaychiMin"},"content":" ArrayList\u003cDish\u003e menuItems \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"NaychiMin"},"content":" menuItems.add(new Dish(\"Chicken Rice\",","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"NaychiMin"},"content":" new ArrayList\u003c\u003e(Arrays.asList(new Ingredient(\"Rice\", \"1 cup\"),","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"NaychiMin"},"content":" new Ingredient(\"Chicken\", \"100g\"))), 8.0F));","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"NaychiMin"},"content":" menuItems.add(new Dish(\"Chicken Sandwich\",","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"NaychiMin"},"content":" new ArrayList\u003c\u003e(Arrays.asList(new Ingredient(\"Lettuce\", \"100g\"),","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"NaychiMin"},"content":" new Ingredient(\"Chicken\", \"50g\"))), 5.0F));","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"NaychiMin"},"content":" Menu menu \u003d new Menu(menuItems);","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"NaychiMin"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"NaychiMin"},"content":" int invalidIndex \u003d 3;","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"NaychiMin"},"content":" assertThrows(IllegalArgumentException.class, () -\u003e {","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"NaychiMin"},"content":" ListIngredientCommand listIngredientCommand \u003d new ListIngredientCommand(invalidIndex);","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"NaychiMin"},"content":" listIngredientCommand.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"NaychiMin"},"content":" });","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"Cazh1"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NaychiMin":59,"DextheChik3n":1,"Cazh1":4}},{"path":"src/test/java/seedu/cafectrl/command/ListMenuCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"Cazh1"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"Cazh1"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"Cazh1"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"Cazh1"},"content":"class ListMenuCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"Cazh1"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"Cazh1"},"content":" public void execute_addTwoDishes_expectTwoDishes() {","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"Cazh1"},"content":" ArrayList\u003cDish\u003e menuItems \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"Cazh1"},"content":" menuItems.add(new Dish(\"Chicken Rice\", 2.50F));","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"Cazh1"},"content":" menuItems.add(new Dish(\"Chicken Curry\", 4.30F));","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"Cazh1"},"content":" Menu menu \u003d new Menu(menuItems);","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"Cazh1"},"content":" assertEquals(2, menu.getSize());","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"Cazh1"},"content":" ArrayList\u003cString\u003e commandOutput \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"Cazh1"},"content":" Ui ui \u003d new Ui() {","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"Cazh1"},"content":" @Override","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"Cazh1"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"Cazh1"},"content":" String parseString \u003d convertArrayToString(message, \",\");","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"Cazh1"},"content":" commandOutput.add(parseString);","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"Cazh1"},"content":" @Override","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"Cazh1"},"content":" public void showToUserFormat(String dishName, String dishPrice) {","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"Cazh1"},"content":" String leftAlignFormat \u003d \"| %-24s | %-12s |\";","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"Cazh1"},"content":" String parseString \u003d String.format(leftAlignFormat, dishName, dishPrice);","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"Cazh1"},"content":" commandOutput.add(parseString);","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"Cazh1"},"content":" };","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"Cazh1"},"content":" Command listMenuCommand \u003d new ListMenuCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"Cazh1"},"content":" listMenuCommand.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"Cazh1"},"content":" String actualOutput \u003d String.join(\",\", commandOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"Cazh1"},"content":" String expectedOutput \u003d \"+-----------------------------------------+\"","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"Cazh1"},"content":" + \"| Ah, behold, the grand menu of delights! |\"","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"Cazh1"},"content":" + \"+--------------------------+--------------+\"","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"Cazh1"},"content":" + \"| Dish Name | Price |\"","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"Cazh1"},"content":" + \"+--------------------------+--------------+\"","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"Cazh1"},"content":" + \"| 1. Chicken Rice | $2.50 |\"","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"Cazh1"},"content":" + \"| 2. Chicken Curry | $4.30 |\"","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"Cazh1"},"content":" + \"+-----------------------------------------+\";","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"Cazh1"},"content":" ","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"Cazh1"},"content":" assert (expectedOutput.trim().replaceAll(\",\", \"\").equals(actualOutput.trim().replaceAll(\",\", \"\")));","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"Cazh1"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"Cazh1"},"content":" private static String convertArrayToString(String[] message, String delimiter) {","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"Cazh1"},"content":" StringBuilder sb \u003d new StringBuilder();","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"Cazh1"},"content":" for (String str : message) {","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"Cazh1"},"content":" sb.append(str.toString()).append(delimiter);","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"Cazh1"},"content":" return sb.substring(0, sb.length() - 1);","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"Cazh1"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"Cazh1"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"DextheChik3n":4,"Cazh1":56}},{"path":"src/test/java/seedu/cafectrl/data/MenuTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.data;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ziyi105"},"content":"//import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"ziyi105"},"content":"class MenuTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"DextheChik3n":1,"ziyi105":6}},{"path":"src/test/java/seedu/cafectrl/data/dish/DishTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.data.dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ziyi105"},"content":"//import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"ziyi105"},"content":"class DishTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"DextheChik3n":1,"ziyi105":6}},{"path":"src/test/java/seedu/cafectrl/data/dish/IngredientTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.data.dish;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ziyi105"},"content":"//import static org.junit.jupiter.api.Assertions.*;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"ziyi105"},"content":"class IngredientTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"DextheChik3n":1,"ziyi105":6}},{"path":"src/test/java/seedu/cafectrl/parser/ParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"DextheChik3n"},"content":"package seedu.cafectrl.parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":3,"author":{"gitId":"ShaniceTang"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"DextheChik3n"},"content":"import seedu.cafectrl.command.AddDishCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"ShaniceTang"},"content":"import seedu.cafectrl.command.Command;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"ShaniceTang"},"content":"import seedu.cafectrl.command.DeleteDishCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"NaychiMin"},"content":"import seedu.cafectrl.command.IncorrectCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"NaychiMin"},"content":"import seedu.cafectrl.command.ListIngredientCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"ShaniceTang"},"content":"import seedu.cafectrl.data.Menu;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.data.dish.Dish;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"NaychiMin"},"content":"import seedu.cafectrl.data.dish.Ingredient;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.ui.Messages;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"ziyi105"},"content":"import seedu.cafectrl.ui.Ui;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"ziyi105"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"ziyi105"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"ShaniceTang"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"DextheChik3n"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"NaychiMin"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"ziyi105"},"content":"/**","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"ziyi105"},"content":" * Junit test for Parser.java","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"ziyi105"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"ziyi105"},"content":"class ParserTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":26,"author":{"gitId":"NaychiMin"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"NaychiMin"},"content":" public void parseCommand_validCommand_successfulCommandParse() {","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"NaychiMin"},"content":" ArrayList\u003cDish\u003e menuItems \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"NaychiMin"},"content":" menuItems.add(new Dish(\"Chicken Rice\",","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"NaychiMin"},"content":" new ArrayList\u003c\u003e(Arrays.asList(new Ingredient(\"Rice\", \"1 cup\"),","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"NaychiMin"},"content":" new Ingredient(\"Chicken\", \"100g\"))), 8.0F));","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"NaychiMin"},"content":" menuItems.add(new Dish(\"Chicken Sandwich\",","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"NaychiMin"},"content":" new ArrayList\u003c\u003e(Arrays.asList(new Ingredient(\"Lettuce\", \"100g\"),","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"NaychiMin"},"content":" new Ingredient(\"Chicken\", \"50g\"))), 5.0F));","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"NaychiMin"},"content":" Menu menu \u003d new Menu(menuItems);","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"NaychiMin"},"content":" String userInput \u003d \"list_ingredients 1\";","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"NaychiMin"},"content":" Command result \u003d Parser.parseCommand(menu, userInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"NaychiMin"},"content":" assertTrue(result instanceof ListIngredientCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"NaychiMin"},"content":" ListIngredientCommand listIngredientCommand \u003d (ListIngredientCommand) result;","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"NaychiMin"},"content":" int index \u003d listIngredientCommand.index;","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"NaychiMin"},"content":" assertEquals(1, index);","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"NaychiMin"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"NaychiMin"},"content":" public void parseCommand_missingIndex_returnsErrorMessage() {","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"NaychiMin"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"NaychiMin"},"content":" String userInput \u003d \"list_ingredients\";","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"NaychiMin"},"content":" Command result \u003d Parser.parseCommand(menu, userInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"NaychiMin"},"content":" assertTrue(result instanceof IncorrectCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":55,"author":{"gitId":"NaychiMin"},"content":" IncorrectCommand incorrectCommand \u003d (IncorrectCommand) result;","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"NaychiMin"},"content":" String feedbackToUser \u003d incorrectCommand.feedbackToUser;","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"NaychiMin"},"content":" assertEquals(Messages.MISSING_ARGUMENT_FOR_LIST_INGREDIENTS, feedbackToUser);","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"NaychiMin"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"NaychiMin"},"content":" public void parseCommand_invalidIndex_returnsErrorMessage() {","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"NaychiMin"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"NaychiMin"},"content":" String userInput \u003d \"list_ingredients a\";","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"NaychiMin"},"content":" Command result \u003d Parser.parseCommand(menu, userInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"NaychiMin"},"content":" assertTrue(result instanceof IncorrectCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"NaychiMin"},"content":" IncorrectCommand incorrectCommand \u003d (IncorrectCommand) result;","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"NaychiMin"},"content":" String feedbackToUser \u003d incorrectCommand.feedbackToUser;","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"NaychiMin"},"content":" assertEquals(Messages.MISSING_ARGUMENT_FOR_LIST_INGREDIENTS, feedbackToUser);","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"NaychiMin"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"NaychiMin"},"content":" public void parseCommand_indexOutOfBounds_returnsErrorMessage() {","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"NaychiMin"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"NaychiMin"},"content":" String userInput \u003d \"list_ingredients 1\";","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"NaychiMin"},"content":" Command result \u003d Parser.parseCommand(menu, userInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"NaychiMin"},"content":" assertTrue(result instanceof IncorrectCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"NaychiMin"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"NaychiMin"},"content":" IncorrectCommand incorrectCommand \u003d (IncorrectCommand) result;","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"NaychiMin"},"content":" String feedbackToUser \u003d incorrectCommand.feedbackToUser;","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"NaychiMin"},"content":" assertEquals(Messages.INVALID_DISH_INDEX, feedbackToUser);","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"NaychiMin"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":86,"author":{"gitId":"ShaniceTang"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"ShaniceTang"},"content":" public void parseCommand_validDeleteCommand_successfulCommandParse() {","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"ShaniceTang"},"content":" ArrayList\u003cDish\u003e menuItems \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"ShaniceTang"},"content":" menuItems.add(new Dish(\"Chicken Rice\",","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"ShaniceTang"},"content":" new ArrayList\u003c\u003e(Arrays.asList(new Ingredient(\"Rice\", \"1 cup\"),","lastModifiedDate":"2023-10-18"},{"lineNumber":91,"author":{"gitId":"ShaniceTang"},"content":" new Ingredient(\"Chicken\", \"100g\"))), 8.0F));","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"ShaniceTang"},"content":" menuItems.add(new Dish(\"Chicken Sandwich\",","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"ShaniceTang"},"content":" new ArrayList\u003c\u003e(Arrays.asList(new Ingredient(\"Lettuce\", \"100g\"),","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"ShaniceTang"},"content":" new Ingredient(\"Chicken\", \"50g\"))), 5.0F));","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"ShaniceTang"},"content":" Menu menu \u003d new Menu(menuItems);","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"ShaniceTang"},"content":" String userInput \u003d \"delete 1\";","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"ShaniceTang"},"content":" Command result \u003d Parser.parseCommand(menu, userInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"ShaniceTang"},"content":" assertTrue(result instanceof DeleteDishCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"ShaniceTang"},"content":" DeleteDishCommand deleteDishCommand \u003d (DeleteDishCommand) result;","lastModifiedDate":"2023-10-18"},{"lineNumber":103,"author":{"gitId":"ShaniceTang"},"content":" int index \u003d deleteDishCommand.index;","lastModifiedDate":"2023-10-18"},{"lineNumber":104,"author":{"gitId":"ShaniceTang"},"content":" assertEquals(1, index);","lastModifiedDate":"2023-10-18"},{"lineNumber":105,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-14"},{"lineNumber":107,"author":{"gitId":"ShaniceTang"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":108,"author":{"gitId":"ShaniceTang"},"content":" public void parseCommand_missingDeleteIndex_returnsErrorMessage() {","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"ShaniceTang"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":110,"author":{"gitId":"ShaniceTang"},"content":" String userInput \u003d \"delete\";","lastModifiedDate":"2023-10-18"},{"lineNumber":111,"author":{"gitId":"ShaniceTang"},"content":" Command result \u003d Parser.parseCommand(menu, userInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":112,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":113,"author":{"gitId":"ShaniceTang"},"content":" assertTrue(result instanceof IncorrectCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":115,"author":{"gitId":"ShaniceTang"},"content":" IncorrectCommand incorrectCommand \u003d (IncorrectCommand) result;","lastModifiedDate":"2023-10-18"},{"lineNumber":116,"author":{"gitId":"ShaniceTang"},"content":" String feedbackToUser \u003d incorrectCommand.feedbackToUser;","lastModifiedDate":"2023-10-18"},{"lineNumber":117,"author":{"gitId":"ShaniceTang"},"content":" assertEquals(Messages.MISSING_ARGUMENT_FOR_DELETE, feedbackToUser);","lastModifiedDate":"2023-10-18"},{"lineNumber":118,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":119,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":120,"author":{"gitId":"ShaniceTang"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":121,"author":{"gitId":"ShaniceTang"},"content":" public void parseCommand_invalidDeleteIndex_returnsErrorMessage() {","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"ShaniceTang"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":123,"author":{"gitId":"ShaniceTang"},"content":" String userInput \u003d \"delete a\";","lastModifiedDate":"2023-10-18"},{"lineNumber":124,"author":{"gitId":"ShaniceTang"},"content":" Command result \u003d Parser.parseCommand(menu, userInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":125,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":126,"author":{"gitId":"ShaniceTang"},"content":" assertTrue(result instanceof IncorrectCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":127,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":128,"author":{"gitId":"ShaniceTang"},"content":" IncorrectCommand incorrectCommand \u003d (IncorrectCommand) result;","lastModifiedDate":"2023-10-18"},{"lineNumber":129,"author":{"gitId":"ShaniceTang"},"content":" String feedbackToUser \u003d incorrectCommand.feedbackToUser;","lastModifiedDate":"2023-10-18"},{"lineNumber":130,"author":{"gitId":"ShaniceTang"},"content":" assertEquals(Messages.MISSING_ARGUMENT_FOR_DELETE, feedbackToUser);","lastModifiedDate":"2023-10-18"},{"lineNumber":131,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":132,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":133,"author":{"gitId":"ShaniceTang"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":134,"author":{"gitId":"ShaniceTang"},"content":" public void parseCommand_deleteIndexOutOfBounds_returnsErrorMessage() {","lastModifiedDate":"2023-10-18"},{"lineNumber":135,"author":{"gitId":"ShaniceTang"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":136,"author":{"gitId":"ShaniceTang"},"content":" String userInput \u003d \"delete 1\";","lastModifiedDate":"2023-10-18"},{"lineNumber":137,"author":{"gitId":"ShaniceTang"},"content":" Command result \u003d Parser.parseCommand(menu, userInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":138,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":139,"author":{"gitId":"ShaniceTang"},"content":" assertTrue(result instanceof IncorrectCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":140,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":141,"author":{"gitId":"ShaniceTang"},"content":" IncorrectCommand incorrectCommand \u003d (IncorrectCommand) result;","lastModifiedDate":"2023-10-18"},{"lineNumber":142,"author":{"gitId":"ShaniceTang"},"content":" String feedbackToUser \u003d incorrectCommand.feedbackToUser;","lastModifiedDate":"2023-10-18"},{"lineNumber":143,"author":{"gitId":"ShaniceTang"},"content":" assertEquals(Messages.INVALID_DISH_INDEX, feedbackToUser);","lastModifiedDate":"2023-10-18"},{"lineNumber":144,"author":{"gitId":"ShaniceTang"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":145,"author":{"gitId":"ShaniceTang"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":146,"author":{"gitId":"ziyi105"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":147,"author":{"gitId":"ziyi105"},"content":" void parseCommand_unrecognisedInput_unknownCommand() {","lastModifiedDate":"2023-10-18"},{"lineNumber":148,"author":{"gitId":"ziyi105"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":149,"author":{"gitId":"ziyi105"},"content":" Dish testDish \u003d new Dish(\"Chicken Rice\", 2.50F);","lastModifiedDate":"2023-10-18"},{"lineNumber":150,"author":{"gitId":"ziyi105"},"content":" menu.addDish(testDish);","lastModifiedDate":"2023-10-18"},{"lineNumber":151,"author":{"gitId":"ziyi105"},"content":" String testUserInput \u003d \"random input\";","lastModifiedDate":"2023-10-18"},{"lineNumber":152,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":153,"author":{"gitId":"ziyi105"},"content":" ArrayList\u003cString\u003e actualOutput \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":154,"author":{"gitId":"ziyi105"},"content":" Ui ui \u003d new Ui() {","lastModifiedDate":"2023-10-18"},{"lineNumber":155,"author":{"gitId":"ziyi105"},"content":" @Override","lastModifiedDate":"2023-10-18"},{"lineNumber":156,"author":{"gitId":"ziyi105"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-18"},{"lineNumber":157,"author":{"gitId":"ziyi105"},"content":" actualOutput.addAll(Arrays.asList(message));","lastModifiedDate":"2023-10-18"},{"lineNumber":158,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":159,"author":{"gitId":"ziyi105"},"content":" };","lastModifiedDate":"2023-10-18"},{"lineNumber":160,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":161,"author":{"gitId":"ziyi105"},"content":" Command commandReturned \u003d Parser.parseCommand(menu, testUserInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":162,"author":{"gitId":"ziyi105"},"content":" commandReturned.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":163,"author":{"gitId":"ShaniceTang"},"content":" assertEquals(Messages.UNKNOWN_COMMAND_MESSAGE, actualOutput.get(0));","lastModifiedDate":"2023-10-22"},{"lineNumber":164,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":165,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":166,"author":{"gitId":"ziyi105"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":167,"author":{"gitId":"ziyi105"},"content":" void parseCommand_missingArgumentsForEditPrice_missingArgMsg() {","lastModifiedDate":"2023-10-18"},{"lineNumber":168,"author":{"gitId":"ziyi105"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":169,"author":{"gitId":"ziyi105"},"content":" Dish testDish \u003d new Dish(\"Chicken Rice\", 2.50F);","lastModifiedDate":"2023-10-18"},{"lineNumber":170,"author":{"gitId":"ziyi105"},"content":" menu.addDish(testDish);","lastModifiedDate":"2023-10-18"},{"lineNumber":171,"author":{"gitId":"ziyi105"},"content":" String testUserInput \u003d \"edit_price index/1\";","lastModifiedDate":"2023-10-18"},{"lineNumber":172,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":173,"author":{"gitId":"ziyi105"},"content":" ArrayList\u003cString\u003e actualOutput \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":174,"author":{"gitId":"ziyi105"},"content":" Ui ui \u003d new Ui() {","lastModifiedDate":"2023-10-18"},{"lineNumber":175,"author":{"gitId":"ziyi105"},"content":" @Override","lastModifiedDate":"2023-10-18"},{"lineNumber":176,"author":{"gitId":"ziyi105"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-18"},{"lineNumber":177,"author":{"gitId":"ziyi105"},"content":" actualOutput.addAll(Arrays.asList(message));","lastModifiedDate":"2023-10-18"},{"lineNumber":178,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":179,"author":{"gitId":"ziyi105"},"content":" };","lastModifiedDate":"2023-10-18"},{"lineNumber":180,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":181,"author":{"gitId":"ziyi105"},"content":" Command commandReturned \u003d Parser.parseCommand(menu, testUserInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":182,"author":{"gitId":"ziyi105"},"content":" commandReturned.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":183,"author":{"gitId":"ziyi105"},"content":" assertEquals(Messages.MISSING_ARGUMENT_FOR_EDIT_PRICE, actualOutput.get(0));","lastModifiedDate":"2023-10-18"},{"lineNumber":184,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":185,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":186,"author":{"gitId":"ziyi105"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":187,"author":{"gitId":"ziyi105"},"content":" void parseCommand_invalidDishIndexForEditPrice_invalidIndexForEditPrice() {","lastModifiedDate":"2023-10-18"},{"lineNumber":188,"author":{"gitId":"ziyi105"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":189,"author":{"gitId":"ziyi105"},"content":" Dish testDish \u003d new Dish(\"Chicken Rice\", 2.50F);","lastModifiedDate":"2023-10-18"},{"lineNumber":190,"author":{"gitId":"ziyi105"},"content":" menu.addDish(testDish);","lastModifiedDate":"2023-10-18"},{"lineNumber":191,"author":{"gitId":"ziyi105"},"content":" String testUserInput \u003d \"edit_price index/2 price/3\";","lastModifiedDate":"2023-10-18"},{"lineNumber":192,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":193,"author":{"gitId":"ziyi105"},"content":" ArrayList\u003cString\u003e actualOutput \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":194,"author":{"gitId":"ziyi105"},"content":" Ui ui \u003d new Ui() {","lastModifiedDate":"2023-10-18"},{"lineNumber":195,"author":{"gitId":"ziyi105"},"content":" @Override","lastModifiedDate":"2023-10-18"},{"lineNumber":196,"author":{"gitId":"ziyi105"},"content":" public void showToUser(String... message) {","lastModifiedDate":"2023-10-18"},{"lineNumber":197,"author":{"gitId":"ziyi105"},"content":" actualOutput.addAll(Arrays.asList(message));","lastModifiedDate":"2023-10-18"},{"lineNumber":198,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":199,"author":{"gitId":"ziyi105"},"content":" };","lastModifiedDate":"2023-10-18"},{"lineNumber":200,"author":{"gitId":"ziyi105"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":201,"author":{"gitId":"ziyi105"},"content":" Command commandReturned \u003d Parser.parseCommand(menu, testUserInput);","lastModifiedDate":"2023-10-18"},{"lineNumber":202,"author":{"gitId":"ziyi105"},"content":" commandReturned.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":203,"author":{"gitId":"ziyi105"},"content":" assertEquals(Messages.INVALID_DISH_INDEX, actualOutput.get(0));","lastModifiedDate":"2023-10-18"},{"lineNumber":204,"author":{"gitId":"ziyi105"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":205,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":206,"author":{"gitId":"DextheChik3n"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":207,"author":{"gitId":"DextheChik3n"},"content":" void parseCommand_validDishInputForAddDish_dishAddedToMenu() {","lastModifiedDate":"2023-10-18"},{"lineNumber":208,"author":{"gitId":"DextheChik3n"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":209,"author":{"gitId":"DextheChik3n"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-10-18"},{"lineNumber":210,"author":{"gitId":"DextheChik3n"},"content":" String testDishInputWithOneIngredient \u003d \"add name/Christmas Ham price/50.00 ingredient/Ham qty/1kg\";","lastModifiedDate":"2023-10-18"},{"lineNumber":211,"author":{"gitId":"DextheChik3n"},"content":" Command outputCommand \u003d Parser.parseCommand(menu, testDishInputWithOneIngredient);","lastModifiedDate":"2023-10-18"},{"lineNumber":212,"author":{"gitId":"DextheChik3n"},"content":" //Test for correct Command type returned","lastModifiedDate":"2023-10-18"},{"lineNumber":213,"author":{"gitId":"DextheChik3n"},"content":" assertTrue(outputCommand instanceof AddDishCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":214,"author":{"gitId":"DextheChik3n"},"content":" //Test for 1 Dish added to Menu","lastModifiedDate":"2023-10-18"},{"lineNumber":215,"author":{"gitId":"DextheChik3n"},"content":" outputCommand.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":216,"author":{"gitId":"DextheChik3n"},"content":" assertEquals(1, menu.getSize());","lastModifiedDate":"2023-10-18"},{"lineNumber":217,"author":{"gitId":"DextheChik3n"},"content":" //Test for correct parsing of dish arguments","lastModifiedDate":"2023-10-18"},{"lineNumber":218,"author":{"gitId":"DextheChik3n"},"content":" Dish getOutputDish \u003d menu.getDish(0);","lastModifiedDate":"2023-10-18"},{"lineNumber":219,"author":{"gitId":"DextheChik3n"},"content":" assertEquals(\"Christmas Ham\", getOutputDish.getName()); // Dish name test","lastModifiedDate":"2023-10-18"},{"lineNumber":220,"author":{"gitId":"DextheChik3n"},"content":" assertEquals((float) 50.0, getOutputDish.getPrice()); //Dish price test","lastModifiedDate":"2023-10-18"},{"lineNumber":221,"author":{"gitId":"DextheChik3n"},"content":" assertEquals(\"[Ham - 1kg]\", getOutputDish.getIngredients().toString()); //Dish ingredients test","lastModifiedDate":"2023-10-18"},{"lineNumber":222,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":223,"author":{"gitId":"DextheChik3n"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":224,"author":{"gitId":"DextheChik3n"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":225,"author":{"gitId":"DextheChik3n"},"content":" void parseCommand_invalidDishInputForAddDish_noDishAddedToMenu() {","lastModifiedDate":"2023-10-18"},{"lineNumber":226,"author":{"gitId":"DextheChik3n"},"content":" Menu menu \u003d new Menu();","lastModifiedDate":"2023-10-18"},{"lineNumber":227,"author":{"gitId":"DextheChik3n"},"content":" Ui ui \u003d new Ui();","lastModifiedDate":"2023-10-18"},{"lineNumber":228,"author":{"gitId":"DextheChik3n"},"content":" //input name/ argument wrongly","lastModifiedDate":"2023-10-18"},{"lineNumber":229,"author":{"gitId":"DextheChik3n"},"content":" String testDishInputWithOneIngredient \u003d \"add named/Christmas Ham price/50.00 ingredient/Ham qty/1kg\";","lastModifiedDate":"2023-10-18"},{"lineNumber":230,"author":{"gitId":"DextheChik3n"},"content":" Command outputCommand \u003d Parser.parseCommand(menu, testDishInputWithOneIngredient);","lastModifiedDate":"2023-10-18"},{"lineNumber":231,"author":{"gitId":"DextheChik3n"},"content":" //Test for incorrect Command type returned","lastModifiedDate":"2023-10-18"},{"lineNumber":232,"author":{"gitId":"DextheChik3n"},"content":" assertFalse(outputCommand instanceof AddDishCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":233,"author":{"gitId":"DextheChik3n"},"content":" //Test for no dish added in menu","lastModifiedDate":"2023-10-18"},{"lineNumber":234,"author":{"gitId":"DextheChik3n"},"content":" outputCommand.execute(menu, ui);","lastModifiedDate":"2023-10-18"},{"lineNumber":235,"author":{"gitId":"DextheChik3n"},"content":" assertEquals(0, menu.getSize());","lastModifiedDate":"2023-10-18"},{"lineNumber":236,"author":{"gitId":"DextheChik3n"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":237,"author":{"gitId":"ziyi105"},"content":"}","lastModifiedDate":"2023-10-14"}],"authorContributionMap":{"NaychiMin":63,"DextheChik3n":35,"ziyi105":73,"ShaniceTang":66}}] diff --git a/AY2324S1-CS2113-T17-2_tp_master/commits.json b/AY2324S1-CS2113-T17-2_tp_master/commits.json index 270372b..aa568e6 100644 --- a/AY2324S1-CS2113-T17-2_tp_master/commits.json +++ b/AY2324S1-CS2113-T17-2_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"NaychiMin":[{"date":"2023-10-05","commitResults":[{"hash":"094363dc81635ad0658ac71e4eb02ca05a61c993","isMergeCommit":false,"messageTitle":"Edit about us with updated information.","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}},{"hash":"568bed8b462e7fa328b1459b8cb2430513f0186c","isMergeCommit":true,"messageTitle":"Merge pull request #1 from NaychiMin/master","messageBody":"Edit about us with updated information.","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"78321f89bd358320aec6190b2e1f57bceec9b61b","isMergeCommit":false,"messageTitle":"Add Ui class for user input handling and UserOutput enum for user messages. Fixes #9","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":54,"deletions":0}}},{"hash":"47e208e3c20a79c10f0f4c9fe082b7db52170725","isMergeCommit":false,"messageTitle":"Remove showError() function from Ui class.","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":15}}}]},{"date":"2023-10-17","commitResults":[{"hash":"b1c8b3917bf5d9a2969b2dfcc85a77ed902bb5ab","isMergeCommit":false,"messageTitle":"Add list ingredient command.","messageBody":"#Fixes 20\n","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":1}}},{"hash":"3208c1e12e18a4730c187ef788f95e8c69b477f5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 20-UI-to-list-ingredients-v1.0","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/duke/data/Menu.java\n#\tsrc/main/java/seedu/duke/data/dish/Dish.java\n#\tsrc/main/java/seedu/duke/ui/Ui.java\n\n#Fixes 20\n","fileTypesAndContributionMap":{}},{"hash":"9f31ada3ba8e663dce87e230896db30dc424a8c9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 20-UI-to-list-ingredients-v1.0","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2c367e72327872d4a83ee33f677e2e977129ad7a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 20-UI-to-list-ingredients-v1.0","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"517bdf262e8a206ffde596e42f4ce95e17ea3d1f","isMergeCommit":false,"messageTitle":"Implement parsing for listing ingredients and necessary error handling.","messageBody":"Fixes #23\n","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":29}}},{"hash":"06da5aa5369ab28d0ad2880c2f68094700fb5cbe","isMergeCommit":false,"messageTitle":"Remove unused imports from Ui class and ListIngredientCommand class.","messageBody":"Fixes #23\n","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"ea5dbbd520baf2c7ae4b0e34f21a81b974e40961","isMergeCommit":false,"messageTitle":"Improve coding standard.","messageBody":"Fixes #23\n","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"d23e91b4260bd6d3677ece51eb74663a1655b266","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 23-parser-for-list-ingredients-v1.0","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"2fb7143c3608035bd2598e54e161afa8f31bac17","isMergeCommit":false,"messageTitle":"Add Junit test for list ingredient command.","messageBody":"Fixes #56\n","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":6},"test-code":{"insertions":51,"deletions":0}}},{"hash":"06cc5ab4bd4bc12cd600dff0a5e02fb9342cec43","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 56-Junit-test-for-list-ingredient.v1.0","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7a6a61058cc79064a530c3f47ddd22ce55efd919","isMergeCommit":false,"messageTitle":"Rename imported packages in ListIngredientCommandTest.java into the new refactored format.","messageBody":"Fixes #56\n","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3},"test-code":{"insertions":4,"deletions":4}}},{"hash":"421167b78f8a3be9664ab6d40146164793398dc6","isMergeCommit":false,"messageTitle":"Improve coding standard.","messageBody":"Fixes #56\n","fileTypesAndContributionMap":{"test-code":{"insertions":15,"deletions":7}}},{"hash":"37824dd4fbe3a1a7651fa68e34755eedfb2d726d","isMergeCommit":false,"messageTitle":"Update parsing of List Ingredients command.","messageBody":"Fixes #15\n","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":12}}},{"hash":"f3cc35239cedc9d46cb877ebe130fd7b47d1627d","isMergeCommit":false,"messageTitle":"Implement JUnit test for parsing list ingredients command.","messageBody":"Fixes #15\n","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5},"test-code":{"insertions":74,"deletions":0}}},{"hash":"6e09c0cac22f46b9e55ad711e96d793d38302f99","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 23-parser-for-list-ingredients-v1.0","messageBody":"# Conflicts:\n#\tsrc/test/java/seedu/cafectrl/parser/ParserTest.java\n","fileTypesAndContributionMap":{}},{"hash":"5b7fa6298201506cb8947488d2bcfd94d02210a6","isMergeCommit":false,"messageTitle":"Improve coding standard using line wrapping.","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}}]}],"DextheChik3n":[{"date":"2023-10-05","commitResults":[{"hash":"21a60988c0892050292fffd82c8fb54d749500d8","isMergeCommit":false,"messageTitle":"Add information in AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"b5fd7b2190cecf65805f1bbb30e667ef2c1292b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d76839232f9c1431f4caf8f5cfb25e385855dfa3","isMergeCommit":true,"messageTitle":"Merge pull request #3 from DextheChik3n/master","messageBody":"Add information in AboutUs.md","fileTypesAndContributionMap":{}},{"hash":"dbf0d943a9c8571848d9a7b298faf23652a8c899","isMergeCommit":true,"messageTitle":"Merge pull request #5 from Cazh1/master","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"ff19f057cf581945a4cd59e390d9be62bfc7fcc2","isMergeCommit":true,"messageTitle":"Merge pull request #34 from ziyi105/31-create-common-classes-v0.1","messageBody":"Task 31 Create Menu.java, Dish.java, Ingredient.java","fileTypesAndContributionMap":{}},{"hash":"d89e31068e0e0da1879bc5598aeb4ead9e960ab6","isMergeCommit":true,"messageTitle":"Merge pull request #32 from ziyi105/8-12-create-parser-class-v0.1","messageBody":"Task 8, 12 Create parser class and parser test class","fileTypesAndContributionMap":{}},{"hash":"04bdcc795e4402fb53826282d1623dad29c321d5","isMergeCommit":true,"messageTitle":"Merge pull request #35 from ziyi105/8-12-create-parser-class-v0.1","messageBody":"PR Review: add javadoc to the ParserTest class","fileTypesAndContributionMap":{}},{"hash":"2d1e435914a8d7a18891a5e9562d272c5b202d53","isMergeCommit":true,"messageTitle":"Merge pull request #37 from ShaniceTang/27-create-UiTest-class-v0.1","messageBody":"Issue #27, Add JUnit Test for UI class","fileTypesAndContributionMap":{}},{"hash":"3ca63034d0c9587550244e0ca3ac1fce710fbf7a","isMergeCommit":true,"messageTitle":"Merge pull request #36 from NaychiMin/9-create-UI-class-v0.1","messageBody":"Task 9, Create Ui class and UserOutput enum.","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"19e37bdc77938ff179bc7bcc3ddd59592394dc2e","isMergeCommit":true,"messageTitle":"Merge pull request #39 from Cazh1/master","messageBody":"10-create-command-class-v0.1 ","fileTypesAndContributionMap":{}},{"hash":"8e4fb479ae61dfc19385dee50a5acffe9072dd7d","isMergeCommit":false,"messageTitle":"Add commonly used methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":42,"deletions":0}}},{"hash":"f97b53934e0c8778b06897e07499db1182d9365f","isMergeCommit":false,"messageTitle":"Add getters for Ingredient class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0}}}]},{"date":"2023-10-17","commitResults":[{"hash":"0d23d416e38c44e837ef3925d0862cca5e201e3e","isMergeCommit":true,"messageTitle":"Merge pull request #45 from ShaniceTang/21-implement-delete-ui","messageBody":"Issue 21, Implement Ui message for deleting a menu item","fileTypesAndContributionMap":{}},{"hash":"74f4f4d8f197fab8035bc1e7a855ccbd426dfc11","isMergeCommit":false,"messageTitle":"Implement add dish feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":43,"deletions":7}}},{"hash":"f5824da1df3a9f3402190010e915feb380ebdbd0","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 43-add-items-v1.0","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"13d502c1c6a51e25c60748c110433973e7e72f6e","isMergeCommit":true,"messageTitle":"Merge pull request #47 from NaychiMin/20-UI-to-list-ingredients-v1.0","messageBody":"20 UI to list ingredients v1.0","fileTypesAndContributionMap":{}},{"hash":"69b789b05598d52130d17ad17ceeec896c42ef5e","isMergeCommit":false,"messageTitle":"Add testing for add dish command","messageBody":"Fixes #48\n","fileTypesAndContributionMap":{"test-code":{"insertions":24,"deletions":0}}},{"hash":"ca9212eada5e9bc6b5c18f161cb2a8983ccc3a35","isMergeCommit":false,"messageTitle":"Edit comment","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":1}}},{"hash":"eed8da07c304064b6e444c35e284ab8e0c393455","isMergeCommit":false,"messageTitle":"Update code based on gradle coding standard","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":2}}},{"hash":"0667ad8410478761765952e3186d0c5e5cc33356","isMergeCommit":true,"messageTitle":"Merge pull request #49 from Cazh1/#16-View-Menu-Items","messageBody":"#16 view menu items","fileTypesAndContributionMap":{}},{"hash":"c5043aaeea97d5ad78353eaf80389098f3e1f210","isMergeCommit":true,"messageTitle":"Merge pull request #50 from Cazh1/#19-Implement-Parser-Support","messageBody":"#19 implement parser support","fileTypesAndContributionMap":{}},{"hash":"eb16e2ca4bf8e39022a0ec75a64f2e3beab45774","isMergeCommit":true,"messageTitle":"Merge pull request #53 from ShaniceTang/22-implement-delete-feature","messageBody":"Task 22, Implement parser support for deleting a dish","fileTypesAndContributionMap":{}},{"hash":"a60c6f8075c9bac64b07d31815539843eb994d77","isMergeCommit":true,"messageTitle":"Merge pull request #54 from NaychiMin/23-parser-for-list-ingredients-v1.0","messageBody":"Task 23, Implement parsing support for listing ingredients .","fileTypesAndContributionMap":{}},{"hash":"2df1928e48276841f508f61e5cd0349ca6fe6df3","isMergeCommit":true,"messageTitle":"Merge pull request #51 from ziyi105/use-pattern-and-matcher-in-parser","messageBody":"Use pattern and matcher in parser","fileTypesAndContributionMap":{}},{"hash":"59eef0cdf11d0ea66d95fb251b957f33a24b201f","isMergeCommit":false,"messageTitle":"Renamed main class to CafeCtrl","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":19},"other":{"insertions":64,"deletions":56},"test-code":{"insertions":10,"deletions":10}}},{"hash":"08b6d3757647c4100510c3f57df4a3423980a755","isMergeCommit":false,"messageTitle":"Edit main function to start CafeCtrl application","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":48,"deletions":7}}},{"hash":"557ea9cc49cdf6bce167d8bba7f828c9bb35dfea","isMergeCommit":false,"messageTitle":"Add JavaDoc to appropriate methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":1}}},{"hash":"a84615c4ad6c93f020b83e1cb92e6717d84e77ae","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 38-edit-main-class-v1.0","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/cafectrl/parser/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"87ceea9d298f8b648ed7219c550f363a2685ec60","isMergeCommit":false,"messageTitle":"Edit code to change displayed text","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"d96a43c56516085e4f47d119e887509154d76318","isMergeCommit":false,"messageTitle":"Remove unused import statement","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"ef8dd90e355a925a8d75c9a7ef0fd3e55e4efa46","isMergeCommit":false,"messageTitle":"Edit accessibility, add Javadoc and edit to resolve coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":3}}},{"hash":"6da928e074d832fb7ec5d798d84fe03a2dfd4b3c","isMergeCommit":false,"messageTitle":"Edit code for exiting loop logic","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":1}}},{"hash":"597bd744aa3a8af3f037200da66ec4124e067311","isMergeCommit":false,"messageTitle":"Edit code to follow coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}}]},{"date":"2023-10-18","commitResults":[{"hash":"5cbc5ff9fbc6f1cd8e2f45f9254dad5522fe73b6","isMergeCommit":true,"messageTitle":"Merge pull request #61 from ziyi105/master","messageBody":"Sync my master ","fileTypesAndContributionMap":{}},{"hash":"c5cd369348c670f00cee3d1057e691e82af5d924","isMergeCommit":true,"messageTitle":"Merge pull request #64 from ziyi105/ziyi105-11-feature-edit-price-v1.0","messageBody":"11 feature edit price v1.0","fileTypesAndContributionMap":{}},{"hash":"cd65ca12b9a4aa2d948b592690f25f2f23c10502","isMergeCommit":false,"messageTitle":"Create parsing logic for add command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":33,"deletions":26}}},{"hash":"662573be694dfbb3b724a75cb1523a54ed7d65be","isMergeCommit":false,"messageTitle":"Refactor prepareAdd method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":24}}},{"hash":"1efc60f9586f0d30b7825876730b0b655c88eeb7","isMergeCommit":false,"messageTitle":"Edit error messages for add dish parsing","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":3}}},{"hash":"a91ce9760719dd42f2a4f04b5945d19194e15e02","isMergeCommit":false,"messageTitle":"Remove magic numbers in prepareAdd method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":3}}},{"hash":"b288c8a7fe69918fc91bbaeaeacb7b0e4a3d3e22","isMergeCommit":false,"messageTitle":"Edit printAddDishMessage method to display price in 2 decimal place","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":2}}},{"hash":"46d545187e45a75040194e17f555938a00c0531a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 24-parser-add-dish-v1.0","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/cafectrl/parser/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"bafeabf2525e5166b1ab60cb4f14a6fc7566bf58","isMergeCommit":false,"messageTitle":"Resolve checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":9}}},{"hash":"dc474694da89328e8858e7a6d0dbd9e3acecd725","isMergeCommit":false,"messageTitle":"Fix regex for checking command format","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"b2cdb4b7ed5c7a53f4c94a59976d9cb9b210fa5f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 48-add-junit-add-dish-command-class-v1.0","messageBody":"# Conflicts:\n#\tsrc/test/java/seedu/duke/command/AddDishCommandTest.java\n","fileTypesAndContributionMap":{}},{"hash":"fa8ef0342b58f18674f264f4ccf62ba1c191089e","isMergeCommit":true,"messageTitle":"Merge pull request #68 from ziyi105/65-junit-test-edit_price","messageBody":"65 junit test edit price","fileTypesAndContributionMap":{}},{"hash":"4d15f13e7ddfa5613ca9aeead0a522e7ca345d7d","isMergeCommit":false,"messageTitle":"Migrate code to the proper file to account for refactoring","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":25,"deletions":31}}},{"hash":"21f12ca05d6c12e1ebf594b645ee414aa463f867","isMergeCommit":false,"messageTitle":"Rename assertion test class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}},{"hash":"39a749dfb863c53632cfc7fe43940e78ffcbaa36","isMergeCommit":true,"messageTitle":"Merge pull request #71 from NaychiMin/23-parser-for-list-ingredients-v1.0","messageBody":"Task 15 Fulfill user story: As a cafe owner, I want to list the ingredients needed for each dish on the menu","fileTypesAndContributionMap":{}},{"hash":"edf80a2a80eecbec3210162b4005895920dc697f","isMergeCommit":true,"messageTitle":"Merge pull request #70 from Cazh1/master","messageBody":"Update ListMenuCommand JUnit assertion use","fileTypesAndContributionMap":{}},{"hash":"293c66243dde702314e4b2f53db72f638f5a773b","isMergeCommit":false,"messageTitle":"Added JUnit Tests for add dish command parsing","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":35,"deletions":0}}},{"hash":"a1c50f66393dc01a4e45c75e9ef33fb975305ec7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 67-junit-test-for-add-dish-v1.0","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"41cb964a10164e5c327493bac64d1bb053d05657","isMergeCommit":false,"messageTitle":"Update ParserTest.java to resolve checkstyle bug","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"1b21699f299353403aff2b6e37e077e604e675cf","isMergeCommit":true,"messageTitle":"Merge pull request #75 from ShaniceTang/22-implement-delete-feature","messageBody":"Task 17, Implement delete feature","fileTypesAndContributionMap":{}},{"hash":"c694c066583b13ef900278baa32b1df645b43fd6","isMergeCommit":false,"messageTitle":"Edit add dish parsing code to prevent negative price input","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":0}}},{"hash":"d1fa8a2f18fd567e65f8e22359f333e35cda5099","isMergeCommit":false,"messageTitle":"Edit code to solve checkstyle issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":6}}}]}],"Cazh1":[{"date":"2023-10-05","commitResults":[{"hash":"070155ed53e9e987a79208ac10c5a7942c4cf353","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"723d6d3ec5d4432d2631550b9b22baf980699341","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"7c37a72bf95a8e73203623e2f7bba0d31d980da2","isMergeCommit":false,"messageTitle":"Add Command class","messageBody":"Fixes #10\n","fileTypesAndContributionMap":{"functional-code":{"insertions":47,"deletions":0},"test-code":{"insertions":28,"deletions":0}}},{"hash":"41a9cdcf458fc3a5c3263d6a38a86dcd2df4bf24","isMergeCommit":false,"messageTitle":"Update DeleteCommand.java documentation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"d97572fd5728f2ca25a88738e0051ea5e7eb8ad0","isMergeCommit":false,"messageTitle":"Update class names to be more specific","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":39,"deletions":11},"other":{"insertions":2,"deletions":2},"test-code":{"insertions":20,"deletions":23}}},{"hash":"eb08e382fa90c0fb9bdf8e71b309f20284cd98ad","isMergeCommit":false,"messageTitle":"Add newline at end of test files","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":5,"deletions":5}}},{"hash":"3c06e5aa4557a25d90dda38e1a41ae36ca9e6e10","isMergeCommit":false,"messageTitle":"Update execute method in Command class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":6}}},{"hash":"07a56ed80238819e5d1923bc0495342718d6cc60","isMergeCommit":false,"messageTitle":"Update Command class to include index attribute","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":1}}},{"hash":"0571dea28a7a323f5ea3157b5b11efc77a16ad9d","isMergeCommit":false,"messageTitle":"Update ListMenuCommand.java for spacing issue","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"67f65e2b750751127920b80b45d162c28849b99f","isMergeCommit":false,"messageTitle":"Update Menu.java methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":1}}},{"hash":"dd7c6f2d40a3ed811a03e75cc2af2322965eb214","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into #16-View-Menu-Items","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"43905d03b1a0e1e6f237519feb227e5c606d0e3d","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into #16-View-Menu-Items","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"188ec8e7c0cd4b376b7ab20baa1b24b4b3a9fce0","isMergeCommit":false,"messageTitle":"Update ListMenuCommand.java function","messageBody":"Fixes #16\n","fileTypesAndContributionMap":{"functional-code":{"insertions":17,"deletions":4}}},{"hash":"960269b67e4aa999773ea1f4dbc28795c369f061","isMergeCommit":false,"messageTitle":"Implement UI support for ListMenu","messageBody":"Fixes #18\n","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"ad6b223efae6bf4be468bf1ad7cbeb772c58d774","isMergeCommit":false,"messageTitle":"Implement Junit for ListCommand.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0},"test-code":{"insertions":16,"deletions":0}}},{"hash":"ac4e57130e2e050f03f1ccd7411de2e88ee69082","isMergeCommit":false,"messageTitle":"Update ListMenuCommand.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":0}}},{"hash":"00a910fc686c6c00e94650e0d5916547bc5e5ad9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into #16-View-Menu-Items","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f6297af60c900eefedcceacecce2d08c15276341","isMergeCommit":false,"messageTitle":"Update ListMenuCommandTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}},{"hash":"2856c5f60c980e91be95c745fedd8c9e8ddd6e31","isMergeCommit":false,"messageTitle":"Implement Parser Class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":136,"deletions":10}}},{"hash":"0d2d717f903269c31c1ca662023c8ce76f91caa6","isMergeCommit":true,"messageTitle":"Merge branch \u0027#16-View-Menu-Items\u0027 of https://github.com/Cazh1/tp into #16-View-Menu-Items","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b561971875675cd6dbafb42d37fd06e4bf2c8ddf","isMergeCommit":false,"messageTitle":"Implement Parser Class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"9ce30642e1d1acc79672f3dcf830307d7482cf42","isMergeCommit":false,"messageTitle":"Update Parser.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"d9714d689f822fffe73a376d3954546775ceaa7d","isMergeCommit":false,"messageTitle":"Update code in reference to Gradle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":20}}},{"hash":"71629404bad7b6184f37a4cff09948061ab74dda","isMergeCommit":false,"messageTitle":"Update ListMenuCommandTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":3}}},{"hash":"ec3ad41cac129fdce30e4415477e1dded5257571","isMergeCommit":false,"messageTitle":"Update Duke.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":29}}},{"hash":"108544c2ee7ab0add14e4add818cec3bd9833423","isMergeCommit":false,"messageTitle":"Update code with regards to Gradle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":47},"test-code":{"insertions":3,"deletions":3}}},{"hash":"dcb4058fbb404099fe3a75a755d95dccb55511a5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into #19-Implement-Parser-Support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5f5820c74f52b67d4286d5eb18c96c705fb71c52","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"017b36204c1a5a2dfcec158d84a28b4c8f9bfd0d","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"31be1a09cca6f201e27ca77b56b7b58c660e54fb","isMergeCommit":false,"messageTitle":"Update JUnit to include assertion","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":1}}},{"hash":"0bfb9deb1c64b443917db9cf43fd1941db44c731","isMergeCommit":false,"messageTitle":"Update Parser to support ListMenuCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":2}}},{"hash":"2374d2890158c0441811d369ecfb121d1c23bc25","isMergeCommit":false,"messageTitle":"Update JUnit test case name to comply with standards","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-18","commitResults":[{"hash":"aa96baada7a5530ba329e33200dc264f6b09434e","isMergeCommit":false,"messageTitle":"Update code to remove use of Magic String","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":6}}},{"hash":"4d0cc8da2c44626b3abdc3baaac5f28f183e57bc","isMergeCommit":false,"messageTitle":"Update JUnit assertion use","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"test-code":{"insertions":27,"deletions":1}}},{"hash":"0956546fb4a59b7037ad7a3e659dc894f97ef3dc","isMergeCommit":false,"messageTitle":"Update ListMenuCommandTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":4}}},{"hash":"e43dffdab7af41343dd985321360c9d9547d0ff3","isMergeCommit":false,"messageTitle":"Update MenuList appearance","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":2},"test-code":{"insertions":4,"deletions":4}}}]},{"date":"2023-10-19","commitResults":[{"hash":"b18deabd054b19780e3d5cc6eac3fe1e541643d1","isMergeCommit":false,"messageTitle":"Update code to comply Gradle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}}]},{"date":"2023-10-22","commitResults":[{"hash":"b1aac1c4b0473c620dcb918ceb878ab12757384a","isMergeCommit":false,"messageTitle":"Add method for empty menu","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":2}}},{"hash":"69168a3d641267d405a4019bcbade582689e8d5f","isMergeCommit":false,"messageTitle":"Update code to comply with Gradle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"927b64d77278cb15a7b0f986d7719a29bb655771","isMergeCommit":false,"messageTitle":"Update JUnit for ListMenu","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":18,"deletions":8}}},{"hash":"c2c3c5c523442a2120fd42ec4c0403a3c32892d5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Edit-List_Menu-appearance","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fffd1c462fa1ec1f8c4f210824670563c458d26e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Edit-List_Menu-appearance","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"65510e0cc0896dd9dbb314673257289143d76e40","isMergeCommit":false,"messageTitle":"Update ListMenu to use Messages.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":1}}}]}],"ziyi105":[{"date":"2023-10-05","commitResults":[{"hash":"ce55b55eeedfddf78b8dcd41a589ab3097fc943f","isMergeCommit":false,"messageTitle":"Update AboutUs.md with Ziyi\u0027s name and github","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"0a4dab6d434c8f1fce06a3b938c558a2f24cba82","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9ac70fde66fd83d921866a9b4555dd6d59d78e7c","isMergeCommit":true,"messageTitle":"Merge pull request #4 from ziyi105/master","messageBody":"Update AboutUs.md with Ziyi\u0027s name and github","fileTypesAndContributionMap":{}},{"hash":"db3be0d4dbc95092f2a772ee485cf24139f4a960","isMergeCommit":false,"messageTitle":"Update Ziyi\u0027s photo on AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"4c760d59203dc1a28a8eb86763ea3e80f6a71ff2","isMergeCommit":true,"messageTitle":"Merge pull request #6 from ziyi105/master","messageBody":"Update Ziyi\u0027s photo on AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-14","commitResults":[{"hash":"a58bed14f14de4d92994e46cc136783aba7fd4c3","isMergeCommit":false,"messageTitle":"Add Parser.java","messageBody":"fixes #8\n","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":0}}},{"hash":"5ddffe229dba287cf4773bad97938c3b6659e9ef","isMergeCommit":false,"messageTitle":"Parser.java: move from package Parser to seedu.duke.parser","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"b806594dfa85c2c71007f457c46139694b196274","isMergeCommit":false,"messageTitle":"Add ParserTest.java","messageBody":"fixes #12\n","fileTypesAndContributionMap":{"test-code":{"insertions":7,"deletions":0}}},{"hash":"74d345ea8d7fd35e7906b35ae7c5dea5124d0f2f","isMergeCommit":false,"messageTitle":"ParserTest.java: remove wild card import","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":2}}}]},{"date":"2023-10-15","commitResults":[{"hash":"72f47e36ee6fc50c291c3ba56995c48ca4d7adec","isMergeCommit":false,"messageTitle":"ParserTest.java: add a new line at the end of the file","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}},{"hash":"ce21b499b97b8604e902d81c2ffc5d2e5e3dbda1","isMergeCommit":false,"messageTitle":"Add Menu.java, Dish.java, Ingredient.java and their test classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":37,"deletions":0},"test-code":{"insertions":21,"deletions":0}}},{"hash":"6cd980d30ffc7269100b0e144deb704624108ba4","isMergeCommit":false,"messageTitle":"Add Menu.java","messageBody":"fixes 31\n","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":13}}},{"hash":"9de4ee60d69353f1d1e32b5a60b5b27991d8219c","isMergeCommit":false,"messageTitle":"Revert \"Add Menu.java\"","messageBody":"This reverts commit 6cd980d30ffc7269100b0e144deb704624108ba4.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":0}}},{"hash":"79afe5da305b841bf11d7be35b464cbfc2ad8134","isMergeCommit":false,"messageTitle":"Dish.java: change price type double to float","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"e5534107d88a9f49f4eaa864f24622948c9dc773","isMergeCommit":false,"messageTitle":"ParserTest.java: add javadoc to the class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":0}}}]},{"date":"2023-10-16","commitResults":[{"hash":"2600dcb46108a997b4c7366401b3fd7bcb2b8e44","isMergeCommit":true,"messageTitle":"Merge pull request #42 from Cazh1/master","messageBody":"Update attributes and methods in Command class","fileTypesAndContributionMap":{}},{"hash":"bf1325d50b3a48da0fd72c5ab665f452d4d4f919","isMergeCommit":true,"messageTitle":"Merge pull request #44 from DextheChik3n/edit-classes-v1.0","messageBody":"Edit classes v1.0","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"f079f9950ec7a31a8ce26b0cf50c5a7507d3dd6f","isMergeCommit":false,"messageTitle":"Implement parseCommand() method according to AddressbookLevel2","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":37,"deletions":0}}},{"hash":"0852e29a9ee8563ff84a34e75b5b0efd5b342e09","isMergeCommit":false,"messageTitle":"Implement ui support for edit price feature","messageBody":"fixes #14\n","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"0dcf6106d09cef97c0c807f356e3a62be9043b33","isMergeCommit":false,"messageTitle":"Dish.java: add setter for price","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"b67df48ceadf6e7b7d4972f4ab094428396d9293","isMergeCommit":false,"messageTitle":"Create EditPriceCommand.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":0}}},{"hash":"db9131da26048c68ee531e9cf035c0a3045ffa72","isMergeCommit":true,"messageTitle":"Merge pull request #46 from DextheChik3n/43-add-items-v1.0","messageBody":"Implement add dish feature","fileTypesAndContributionMap":{}},{"hash":"c88d9091f99c7c1c13c815b1a926dec91d729117","isMergeCommit":false,"messageTitle":"Parser.java: add parserCommand() method and incomplete prepareEditPriceCommand()","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":0}}},{"hash":"38e05b78ff2369a7299c9de1a6c53cfa8560537d","isMergeCommit":false,"messageTitle":"Add constant COMMAND_WORD in executable command classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0}}},{"hash":"2743a171159dc3e00cc9bf9134802df91516a91c","isMergeCommit":false,"messageTitle":"Declare COMMAND_ARGUMENT_STRING for compiling patterns","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":7}}},{"hash":"fc0ae7663b7c245853f11061b2d7d0531b378f6c","isMergeCommit":false,"messageTitle":"Implement parseCommand with pattern and matcher","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":30,"deletions":2}}},{"hash":"87643e1fff76ea1ff58a72c59069501ea1ad8d5d","isMergeCommit":false,"messageTitle":"Parser.java: design the overall structure of different prepareCommands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":54,"deletions":10}}},{"hash":"687f3a97f09b7b76fdc37f1647fe310d852dbcaa","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into use-pattern-and-matcher-in-parser","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a4588d6428a667606b73729fc4d7b171b814bc0e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into use-pattern-and-matcher-in-parser","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"76f879d8556fefdcdd8426b7ce96f08e9661dcf8","isMergeCommit":false,"messageTitle":"Parser.java: remove argument when creating DeleteDishCommand and ListIngredientCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"3166afc463ac1cf0c36a3c0f02025286408336a9","isMergeCommit":false,"messageTitle":"Parser.java: pass arguments to prepareListIngredient","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"4e07571336b93f76098b442a3b7818cc3de7638f","isMergeCommit":false,"messageTitle":"Update ListIngredientCommand.java with constructor that takes in listIndex","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"972c84e4f91f7e6184b2071370f7ce136e27da80","isMergeCommit":false,"messageTitle":"Update Parser.java with correct coding standard","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"17930caaedda6b70d54027eabb2b45b299f3429f","isMergeCommit":false,"messageTitle":"Parser.java: split ADD_COMMAND_ARGUMENTS correctly","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"2f877b3b7908caaa0fa8feec1de4bf94936aa508","isMergeCommit":false,"messageTitle":"Parser.java: update ADD_PATTERN to ADD_ARGUMENT_PATTERN","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"fe4ae667b55c28acbef1156b7576731def556694","isMergeCommit":false,"messageTitle":"Parser.java: correct indentation at line 129","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5}}},{"hash":"306797c8dc6fbccf4d7d8ffd573f27301af152d7","isMergeCommit":true,"messageTitle":"Merge branch \u002711-feature-edit-price-v1.0\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/duke/parser/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"f9822a12af4e06828b3f5dcd72ba6019bfa22186","isMergeCommit":true,"messageTitle":"Merge pull request #57 from DextheChik3n/38-edit-main-class-v1.0","messageBody":"38 edit main class v1.0","fileTypesAndContributionMap":{}},{"hash":"3b01a433e7853ceea15ec017094e14628381c8f6","isMergeCommit":false,"messageTitle":"EditPriceCommand.java: update edit price to edit_price","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"20abc84278a6421e5be06493cdb0619b4103f6f4","isMergeCommit":false,"messageTitle":"Implement parser support for edit_price feature","messageBody":"fixes #13\n","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":6}}},{"hash":"b7b6c987b205a69bc9bfda9bf6b6bb62604a065e","isMergeCommit":false,"messageTitle":"Dish.java: add toString method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"e4a58f40bd283404e96d922aee5bbf1b9c0c7f1b","isMergeCommit":false,"messageTitle":"Ui.java: make showToUser and showEditPriceMessage static","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"d87ddca7b459be077d396635d101e07b267a5036","isMergeCommit":false,"messageTitle":"EditPriceCommand.java: show message after execute","messageBody":"Fixes #14\n","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":1}}},{"hash":"31aec2fa86642f1dc57bcb132c4afd5b60260c6f","isMergeCommit":false,"messageTitle":"Ui.java: add javadoc for showEditPriceMessage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":1}}},{"hash":"a1926699bd7da67ea47b9daa1148860d14cbb2ab","isMergeCommit":false,"messageTitle":"Parser.java: rename ADD_ARGUMENT_STRING and EDIT_DISH_ARGUMENT to camelCase","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":6}}}]},{"date":"2023-10-18","commitResults":[{"hash":"569e182e90d0a3efd3d9e2b08b848914b93e03d0","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/cafectrl/command/EditPriceCommand.java\n#\tsrc/main/java/seedu/cafectrl/parser/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"e991c9db72a04d04051bbd6fef381a324a2f7b05","isMergeCommit":false,"messageTitle":"Parser.java: remove wildcard import","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":1}}},{"hash":"d3f5e998de9b97220a2fb1c5de9e42ed1565e310","isMergeCommit":false,"messageTitle":"Parser.java: remove duplicated import","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"e7bb131f1de78bf89df8036169b194cca157557d","isMergeCommit":true,"messageTitle":"Merge pull request #60 from Cazh1/master","messageBody":"Update code quality","fileTypesAndContributionMap":{}},{"hash":"4aef10a1aaade726ea889271653dc5f2a7fe17f2","isMergeCommit":true,"messageTitle":"Merge pull request #58 from ShaniceTang/55-deletecommand-junit-test","messageBody":"Task 55, Add JUnit test for Delete Command","fileTypesAndContributionMap":{}},{"hash":"4075a3361550a84ae8b24e23fec324f9db30502c","isMergeCommit":false,"messageTitle":"Menu.java: add isValidDishIndex method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"721151f928162dceba3584c0bd568cef7596a74d","isMergeCommit":false,"messageTitle":"Parser.java: remove catch block for IndexOutOfBoundsException","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":11}}},{"hash":"cf6e6994cea30240729079377b6b68476dcfe433","isMergeCommit":true,"messageTitle":"Merge pull request #62 from NaychiMin/56-Junit-test-for-list-ingredient.v1.0","messageBody":"Task 56, Add junit test for List Ingredient command.","fileTypesAndContributionMap":{}},{"hash":"6e6f539c96aa5844eb403591beb81a723bf06059","isMergeCommit":true,"messageTitle":"Merge branch \u002711-feature-edit-price-v1.0\u0027 into ziyi105-11-feature-edit-price-v1.0","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/cafectrl/command/EditPriceCommand.java\n#\tsrc/main/java/seedu/cafectrl/data/Menu.java\n#\tsrc/main/java/seedu/cafectrl/parser/Parser.java\n#\tsrc/main/java/seedu/cafectrl/ui/Messages.java\n","fileTypesAndContributionMap":{}},{"hash":"d8fd274670ac311f83fcb2090492a94c62379017","isMergeCommit":false,"messageTitle":"Ui.java: remove static from showToUser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"edf108043148d24277cf8430c989201972ec2c45","isMergeCommit":false,"messageTitle":"Improve code quality with gradlew","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"d128fc7c9682256fea60137e194f239e52521613","isMergeCommit":false,"messageTitle":"Messages.java: update position of plus operator for strings","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":6}}},{"hash":"bd4181f11168d9c3e1b34bf16a0f7efa37f68418","isMergeCommit":false,"messageTitle":"Parser.java: update position of plus operator","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"defbb3e75f20842edf6faa71e54688a3367ed1d6","isMergeCommit":false,"messageTitle":"Messages.java: Update position of plus operator for MISSING_ARGUMENT_FOR_EDIT_PRICE","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"e7ca9e70c6a75d581ac6d8fa41cf173be97da596","isMergeCommit":false,"messageTitle":"Parser.java: replace matcher.matches() with matcher.find() in line 96","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"54e6c789b799b86d458d6a74ee4d57e8362a1fa2","isMergeCommit":false,"messageTitle":"EditPriceCommand.java: minus offset for menuID","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"908e1da4fe7c6f257b299d05d81fc277440ff8cc","isMergeCommit":false,"messageTitle":"EditPriceCommandTest.ava: add JUnit test for valid input","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":2},"test-code":{"insertions":42,"deletions":0}}},{"hash":"7f6ae576969e353434ae08a9b55ead58169bb6f0","isMergeCommit":false,"messageTitle":"ParserTest.java: add JUnit test for parseCommand_unrecognisedInput_unknownCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":2},"test-code":{"insertions":32,"deletions":0}}},{"hash":"b4ae9501b1c0bad09222f0d0d90da681de3da7a0","isMergeCommit":true,"messageTitle":"Merge pull request #66 from DextheChik3n/24-parser-add-dish-v1.0","messageBody":"24 parser add dish v1.0","fileTypesAndContributionMap":{}},{"hash":"a20cbd574d66169d6c7098cc9edeffbadefbf04d","isMergeCommit":false,"messageTitle":"ParserTest.java: add JUnit test for possible user inputs for edit_price command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":42,"deletions":2}}},{"hash":"9f593575dd7db9e268f6508508d3a7bb12de40e3","isMergeCommit":true,"messageTitle":"Merge pull request #69 from DextheChik3n/48-add-junit-add-dish-command-class-v1.0","messageBody":"48 add junit add dish command class v1.0","fileTypesAndContributionMap":{}},{"hash":"b47e636e131f0a3984ee2cbd5fb2d149ff029dab","isMergeCommit":true,"messageTitle":"Merge pull request #72 from DextheChik3n/67-junit-test-for-add-dish-v1.0","messageBody":"Added JUnit Tests for add dish command parsing","fileTypesAndContributionMap":{}},{"hash":"e677079202361a2f65f201103b146ae13c1a143b","isMergeCommit":true,"messageTitle":"Merge pull request #76 from DextheChik3n/74-resolve-negative-price-input-v1.0","messageBody":"Edit add dish parsing code to prevent negative price input","tags":["A-Release-v1.0"],"fileTypesAndContributionMap":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"96882eb9101008776de82b957a9ae270e0af3bff","isMergeCommit":true,"messageTitle":"Merge pull request #80 from ShaniceTang/78-combine-messages","messageBody":"Task 78, Add UserOutput enumeration messages to Message class","fileTypesAndContributionMap":{}},{"hash":"06fb6a449152d4bbcb83c66a33ea8e1f5fce6457","isMergeCommit":true,"messageTitle":"Merge pull request #81 from Cazh1/Edit-List_Menu-appearance","messageBody":"Edit list menu appearance","fileTypesAndContributionMap":{}}]}],"ShaniceTang":[{"date":"2023-10-05","commitResults":[{"hash":"88288a4ee312a4a3906c0c7f8ecad9003abaf8fa","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"cea95da46d699ef3d7182ed840e860be204a6270","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6b3c432ddb95359f5c4f9dee044cba3b53dc4b62","isMergeCommit":true,"messageTitle":"Merge pull request #2 from ShaniceTang/master","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"dadae0261aa4778ac64d68cbc66ec345da97f599","isMergeCommit":false,"messageTitle":"Fixes #27","messageBody":"Create UiTest JUnit Class\n","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":0}}},{"hash":"ba46ad20ecedd9d0cb49290bd75ba7df3e989b11","isMergeCommit":false,"messageTitle":"Add javadoc to UiTest class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":0}}}]},{"date":"2023-10-17","commitResults":[{"hash":"c4e118ce054a0eed4b0d076aadeaf5059f04853a","isMergeCommit":false,"messageTitle":"Add delete message to Ui class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"93ca9601f61702c86011451a21e6c3a097ff8f11","isMergeCommit":false,"messageTitle":"Fixes #21","messageBody":"Add javadoc to delete message method\n","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"812654327335924346f337a4102942a40b05df4e","isMergeCommit":false,"messageTitle":"Edit delete message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"ddd3d5049a361d1bc8b66e1fc77f7b4ea24ed638","isMergeCommit":false,"messageTitle":"Update delete command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":1}}},{"hash":"2a3d1fdcc0f08aba6e15f425fd490c8ffa5eb1b7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-2/tp into 22-implement-delete-feature","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5e69f2317cb5536d4b0bbad556082b7c831439a8","isMergeCommit":false,"messageTitle":"Rename remove to removeDish method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"0ea6f655d06d20f1b3ff16724412856b42269ca4","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-2/tp into 22-implement-delete-feature","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/duke/command/DeleteDishCommand.java\n","fileTypesAndContributionMap":{}},{"hash":"be50d359eeb512d129d052773bddfd07c2982b9f","isMergeCommit":false,"messageTitle":"Handle invalid index error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":5}}},{"hash":"411253bc7049f64567ed3785d19fc9e8d93c4dbb","isMergeCommit":false,"messageTitle":"Reformat printed string","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"2e861f26e20a182639268add85bec7b82792038c","isMergeCommit":false,"messageTitle":"Fixes #22","messageBody":"Implement parser support for deleting a dish\n","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":12}}},{"hash":"e94d49fcda0fa69ee9d80bab03b075c94b7c80e5","isMergeCommit":false,"messageTitle":"Improve code standard","messageBody":"Fixes #22\n","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":3}}},{"hash":"1c1742d4902012be02dfe7409ac94eb0e17f45e9","isMergeCommit":false,"messageTitle":"Handle out of bounds input index","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":5}}},{"hash":"39edc4758bf49b45c071bbe3f2bb0612d87381b3","isMergeCommit":false,"messageTitle":"Add JUnit test for Delete Command valid and invalid input","messageBody":"Fixes #55\n","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"test-code":{"insertions":59,"deletions":0}}},{"hash":"d2dfdeed55d7eb2b519262ccd86d50d2dcb86e3f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-2/tp into 55-deletecommand-junit-test","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1bd674a5beecdb86bfec754b7b106c70180ce148","isMergeCommit":false,"messageTitle":"Update import path","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":3}}}]},{"date":"2023-10-18","commitResults":[{"hash":"02f561afd0972856a346bb73cfd099c3414c1fd7","isMergeCommit":false,"messageTitle":"Add try-catch error handler","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":3}}},{"hash":"40341fbba23130d1bb37d570eabbe1422bcf451b","isMergeCommit":false,"messageTitle":"Throw Index Out Of Bounds Exception","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"aca573016cb7a28d67fb0cb705e45fe9f562d15f","isMergeCommit":false,"messageTitle":"Update prepareDelete to match other methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":5}}},{"hash":"eed4152ad902aee18c1690be1c2b8e5d1264823a","isMergeCommit":false,"messageTitle":"Assert exception instead of equal string","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":7,"deletions":18}}},{"hash":"7f02a0de9aac1ed99944fc0c4beebc648b1d7d60","isMergeCommit":false,"messageTitle":"Create JUnit test for prepareDelete in Parser class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":17,"deletions":0}}},{"hash":"19a2ba9679b87ce118bc75987aed02a6207c6236","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-2/tp into 22-implement-delete-feature","messageBody":"# Conflicts:\n#\tsrc/test/java/seedu/cafectrl/parser/ParserTest.java\n","fileTypesAndContributionMap":{}},{"hash":"4881d95845ceae0c637849d3fa0142af1402db66","isMergeCommit":false,"messageTitle":"Use message string from Messages class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"695a304ae83f3e437f8ad2ed792591a1a624f2f6","isMergeCommit":false,"messageTitle":"Update prepareDelete method to standardize","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":10}}},{"hash":"cdea65514d1e4bc676cec5623e13bc10b96da8b3","isMergeCommit":false,"messageTitle":"Add JUnit test for delete command for parseCommand method","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":15,"deletions":4}}},{"hash":"b366ac5c0f59c71cbe7964111908f0f4e3cbb2d5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-2/tp into 22-implement-delete-feature","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/cafectrl/ui/Messages.java\n#\tsrc/test/java/seedu/cafectrl/parser/ParserTest.java\n","fileTypesAndContributionMap":{}},{"hash":"72da852206244ef87bcd8f2f765de519177317d0","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"Fixes #17\n","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"d2c8fd89be220ad3d1ddf9ce4f4e2a0f734dc9c0","isMergeCommit":false,"messageTitle":"Remove duplicate import statement","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":2}}}]},{"date":"2023-10-22","commitResults":[{"hash":"8e589d37d341acdb4abcb34da25475bdc8a04e33","isMergeCommit":false,"messageTitle":"Move all messages in to Message class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":26},"test-code":{"insertions":1,"deletions":2}}},{"hash":"12bc39306efa8ba725bcbe10c93079d745569e03","isMergeCommit":false,"messageTitle":"Update unknown command message","messageBody":"Fixes #78\n","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"NaychiMin":{"docs":1,"functional-code":82,"test-code":122},"DextheChik3n":{"docs":1,"functional-code":282,"test-code":81,"other":2},"Cazh1":{"docs":1,"functional-code":178,"test-code":64},"ziyi105":{"docs":1,"functional-code":223,"test-code":133},"ShaniceTang":{"docs":2,"functional-code":73,"test-code":122}},"authorContributionVariance":{"NaychiMin":1825.5985,"DextheChik3n":6337.983,"Cazh1":6426.177,"ziyi105":4630.572,"ShaniceTang":1328.4329},"authorDisplayNameMap":{"NaychiMin":"CS2113-T17-2 SAUN.. MIN","DextheChik3n":"CS2113-T17-2 DEXT..G EN","Cazh1":"CS2113-T17-2 CHUA..HENG","ziyi105":"CS2113-T17-2 NG Z..I YI","ShaniceTang":"CS2113-T17-2 TANG..NICE"}} +{"authorDailyContributionsMap":{"NaychiMin":[{"date":"2023-10-05","commitResults":[{"hash":"094363dc81635ad0658ac71e4eb02ca05a61c993","isMergeCommit":false,"messageTitle":"Edit about us with updated information.","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":5}}},{"hash":"568bed8b462e7fa328b1459b8cb2430513f0186c","isMergeCommit":true,"messageTitle":"Merge pull request #1 from NaychiMin/master","messageBody":"Edit about us with updated information.","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"78321f89bd358320aec6190b2e1f57bceec9b61b","isMergeCommit":false,"messageTitle":"Add Ui class for user input handling and UserOutput enum for user messages. Fixes #9","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":54,"deletions":0}}},{"hash":"47e208e3c20a79c10f0f4c9fe082b7db52170725","isMergeCommit":false,"messageTitle":"Remove showError() function from Ui class.","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":15}}}]},{"date":"2023-10-17","commitResults":[{"hash":"b1c8b3917bf5d9a2969b2dfcc85a77ed902bb5ab","isMergeCommit":false,"messageTitle":"Add list ingredient command.","messageBody":"#Fixes 20\n","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":1}}},{"hash":"3208c1e12e18a4730c187ef788f95e8c69b477f5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 20-UI-to-list-ingredients-v1.0","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/duke/data/Menu.java\n#\tsrc/main/java/seedu/duke/data/dish/Dish.java\n#\tsrc/main/java/seedu/duke/ui/Ui.java\n\n#Fixes 20\n","fileTypesAndContributionMap":{}},{"hash":"9f31ada3ba8e663dce87e230896db30dc424a8c9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 20-UI-to-list-ingredients-v1.0","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2c367e72327872d4a83ee33f677e2e977129ad7a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 20-UI-to-list-ingredients-v1.0","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"517bdf262e8a206ffde596e42f4ce95e17ea3d1f","isMergeCommit":false,"messageTitle":"Implement parsing for listing ingredients and necessary error handling.","messageBody":"Fixes #23\n","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":29}}},{"hash":"06da5aa5369ab28d0ad2880c2f68094700fb5cbe","isMergeCommit":false,"messageTitle":"Remove unused imports from Ui class and ListIngredientCommand class.","messageBody":"Fixes #23\n","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"ea5dbbd520baf2c7ae4b0e34f21a81b974e40961","isMergeCommit":false,"messageTitle":"Improve coding standard.","messageBody":"Fixes #23\n","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"d23e91b4260bd6d3677ece51eb74663a1655b266","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 23-parser-for-list-ingredients-v1.0","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"2fb7143c3608035bd2598e54e161afa8f31bac17","isMergeCommit":false,"messageTitle":"Add Junit test for list ingredient command.","messageBody":"Fixes #56\n","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":6},"test-code":{"insertions":51,"deletions":0}}},{"hash":"06cc5ab4bd4bc12cd600dff0a5e02fb9342cec43","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 56-Junit-test-for-list-ingredient.v1.0","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7a6a61058cc79064a530c3f47ddd22ce55efd919","isMergeCommit":false,"messageTitle":"Rename imported packages in ListIngredientCommandTest.java into the new refactored format.","messageBody":"Fixes #56\n","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3},"test-code":{"insertions":4,"deletions":4}}},{"hash":"421167b78f8a3be9664ab6d40146164793398dc6","isMergeCommit":false,"messageTitle":"Improve coding standard.","messageBody":"Fixes #56\n","fileTypesAndContributionMap":{"test-code":{"insertions":15,"deletions":7}}},{"hash":"37824dd4fbe3a1a7651fa68e34755eedfb2d726d","isMergeCommit":false,"messageTitle":"Update parsing of List Ingredients command.","messageBody":"Fixes #15\n","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":12}}},{"hash":"f3cc35239cedc9d46cb877ebe130fd7b47d1627d","isMergeCommit":false,"messageTitle":"Implement JUnit test for parsing list ingredients command.","messageBody":"Fixes #15\n","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5},"test-code":{"insertions":74,"deletions":0}}},{"hash":"6e09c0cac22f46b9e55ad711e96d793d38302f99","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 23-parser-for-list-ingredients-v1.0","messageBody":"# Conflicts:\n#\tsrc/test/java/seedu/cafectrl/parser/ParserTest.java\n","fileTypesAndContributionMap":{}},{"hash":"5b7fa6298201506cb8947488d2bcfd94d02210a6","isMergeCommit":false,"messageTitle":"Improve coding standard using line wrapping.","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}}]}],"DextheChik3n":[{"date":"2023-10-05","commitResults":[{"hash":"21a60988c0892050292fffd82c8fb54d749500d8","isMergeCommit":false,"messageTitle":"Add information in AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"b5fd7b2190cecf65805f1bbb30e667ef2c1292b2","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d76839232f9c1431f4caf8f5cfb25e385855dfa3","isMergeCommit":true,"messageTitle":"Merge pull request #3 from DextheChik3n/master","messageBody":"Add information in AboutUs.md","fileTypesAndContributionMap":{}},{"hash":"dbf0d943a9c8571848d9a7b298faf23652a8c899","isMergeCommit":true,"messageTitle":"Merge pull request #5 from Cazh1/master","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"ff19f057cf581945a4cd59e390d9be62bfc7fcc2","isMergeCommit":true,"messageTitle":"Merge pull request #34 from ziyi105/31-create-common-classes-v0.1","messageBody":"Task 31 Create Menu.java, Dish.java, Ingredient.java","fileTypesAndContributionMap":{}},{"hash":"d89e31068e0e0da1879bc5598aeb4ead9e960ab6","isMergeCommit":true,"messageTitle":"Merge pull request #32 from ziyi105/8-12-create-parser-class-v0.1","messageBody":"Task 8, 12 Create parser class and parser test class","fileTypesAndContributionMap":{}},{"hash":"04bdcc795e4402fb53826282d1623dad29c321d5","isMergeCommit":true,"messageTitle":"Merge pull request #35 from ziyi105/8-12-create-parser-class-v0.1","messageBody":"PR Review: add javadoc to the ParserTest class","fileTypesAndContributionMap":{}},{"hash":"2d1e435914a8d7a18891a5e9562d272c5b202d53","isMergeCommit":true,"messageTitle":"Merge pull request #37 from ShaniceTang/27-create-UiTest-class-v0.1","messageBody":"Issue #27, Add JUnit Test for UI class","fileTypesAndContributionMap":{}},{"hash":"3ca63034d0c9587550244e0ca3ac1fce710fbf7a","isMergeCommit":true,"messageTitle":"Merge pull request #36 from NaychiMin/9-create-UI-class-v0.1","messageBody":"Task 9, Create Ui class and UserOutput enum.","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"19e37bdc77938ff179bc7bcc3ddd59592394dc2e","isMergeCommit":true,"messageTitle":"Merge pull request #39 from Cazh1/master","messageBody":"10-create-command-class-v0.1 ","fileTypesAndContributionMap":{}},{"hash":"8e4fb479ae61dfc19385dee50a5acffe9072dd7d","isMergeCommit":false,"messageTitle":"Add commonly used methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":42,"deletions":0}}},{"hash":"f97b53934e0c8778b06897e07499db1182d9365f","isMergeCommit":false,"messageTitle":"Add getters for Ingredient class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0}}}]},{"date":"2023-10-17","commitResults":[{"hash":"0d23d416e38c44e837ef3925d0862cca5e201e3e","isMergeCommit":true,"messageTitle":"Merge pull request #45 from ShaniceTang/21-implement-delete-ui","messageBody":"Issue 21, Implement Ui message for deleting a menu item","fileTypesAndContributionMap":{}},{"hash":"74f4f4d8f197fab8035bc1e7a855ccbd426dfc11","isMergeCommit":false,"messageTitle":"Implement add dish feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":43,"deletions":7}}},{"hash":"f5824da1df3a9f3402190010e915feb380ebdbd0","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 43-add-items-v1.0","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"13d502c1c6a51e25c60748c110433973e7e72f6e","isMergeCommit":true,"messageTitle":"Merge pull request #47 from NaychiMin/20-UI-to-list-ingredients-v1.0","messageBody":"20 UI to list ingredients v1.0","fileTypesAndContributionMap":{}},{"hash":"69b789b05598d52130d17ad17ceeec896c42ef5e","isMergeCommit":false,"messageTitle":"Add testing for add dish command","messageBody":"Fixes #48\n","fileTypesAndContributionMap":{"test-code":{"insertions":24,"deletions":0}}},{"hash":"ca9212eada5e9bc6b5c18f161cb2a8983ccc3a35","isMergeCommit":false,"messageTitle":"Edit comment","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":1}}},{"hash":"eed8da07c304064b6e444c35e284ab8e0c393455","isMergeCommit":false,"messageTitle":"Update code based on gradle coding standard","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":2}}},{"hash":"0667ad8410478761765952e3186d0c5e5cc33356","isMergeCommit":true,"messageTitle":"Merge pull request #49 from Cazh1/#16-View-Menu-Items","messageBody":"#16 view menu items","fileTypesAndContributionMap":{}},{"hash":"c5043aaeea97d5ad78353eaf80389098f3e1f210","isMergeCommit":true,"messageTitle":"Merge pull request #50 from Cazh1/#19-Implement-Parser-Support","messageBody":"#19 implement parser support","fileTypesAndContributionMap":{}},{"hash":"eb16e2ca4bf8e39022a0ec75a64f2e3beab45774","isMergeCommit":true,"messageTitle":"Merge pull request #53 from ShaniceTang/22-implement-delete-feature","messageBody":"Task 22, Implement parser support for deleting a dish","fileTypesAndContributionMap":{}},{"hash":"a60c6f8075c9bac64b07d31815539843eb994d77","isMergeCommit":true,"messageTitle":"Merge pull request #54 from NaychiMin/23-parser-for-list-ingredients-v1.0","messageBody":"Task 23, Implement parsing support for listing ingredients .","fileTypesAndContributionMap":{}},{"hash":"2df1928e48276841f508f61e5cd0349ca6fe6df3","isMergeCommit":true,"messageTitle":"Merge pull request #51 from ziyi105/use-pattern-and-matcher-in-parser","messageBody":"Use pattern and matcher in parser","fileTypesAndContributionMap":{}},{"hash":"59eef0cdf11d0ea66d95fb251b957f33a24b201f","isMergeCommit":false,"messageTitle":"Renamed main class to CafeCtrl","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":19},"other":{"insertions":64,"deletions":56},"test-code":{"insertions":10,"deletions":10}}},{"hash":"08b6d3757647c4100510c3f57df4a3423980a755","isMergeCommit":false,"messageTitle":"Edit main function to start CafeCtrl application","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":48,"deletions":7}}},{"hash":"557ea9cc49cdf6bce167d8bba7f828c9bb35dfea","isMergeCommit":false,"messageTitle":"Add JavaDoc to appropriate methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":1}}},{"hash":"a84615c4ad6c93f020b83e1cb92e6717d84e77ae","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 38-edit-main-class-v1.0","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/cafectrl/parser/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"87ceea9d298f8b648ed7219c550f363a2685ec60","isMergeCommit":false,"messageTitle":"Edit code to change displayed text","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"d96a43c56516085e4f47d119e887509154d76318","isMergeCommit":false,"messageTitle":"Remove unused import statement","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"ef8dd90e355a925a8d75c9a7ef0fd3e55e4efa46","isMergeCommit":false,"messageTitle":"Edit accessibility, add Javadoc and edit to resolve coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":3}}},{"hash":"6da928e074d832fb7ec5d798d84fe03a2dfd4b3c","isMergeCommit":false,"messageTitle":"Edit code for exiting loop logic","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":1}}},{"hash":"597bd744aa3a8af3f037200da66ec4124e067311","isMergeCommit":false,"messageTitle":"Edit code to follow coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}}]},{"date":"2023-10-18","commitResults":[{"hash":"5cbc5ff9fbc6f1cd8e2f45f9254dad5522fe73b6","isMergeCommit":true,"messageTitle":"Merge pull request #61 from ziyi105/master","messageBody":"Sync my master ","fileTypesAndContributionMap":{}},{"hash":"c5cd369348c670f00cee3d1057e691e82af5d924","isMergeCommit":true,"messageTitle":"Merge pull request #64 from ziyi105/ziyi105-11-feature-edit-price-v1.0","messageBody":"11 feature edit price v1.0","fileTypesAndContributionMap":{}},{"hash":"cd65ca12b9a4aa2d948b592690f25f2f23c10502","isMergeCommit":false,"messageTitle":"Create parsing logic for add command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":33,"deletions":26}}},{"hash":"662573be694dfbb3b724a75cb1523a54ed7d65be","isMergeCommit":false,"messageTitle":"Refactor prepareAdd method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":24}}},{"hash":"1efc60f9586f0d30b7825876730b0b655c88eeb7","isMergeCommit":false,"messageTitle":"Edit error messages for add dish parsing","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":3}}},{"hash":"a91ce9760719dd42f2a4f04b5945d19194e15e02","isMergeCommit":false,"messageTitle":"Remove magic numbers in prepareAdd method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":3}}},{"hash":"b288c8a7fe69918fc91bbaeaeacb7b0e4a3d3e22","isMergeCommit":false,"messageTitle":"Edit printAddDishMessage method to display price in 2 decimal place","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":2}}},{"hash":"46d545187e45a75040194e17f555938a00c0531a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 24-parser-add-dish-v1.0","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/cafectrl/parser/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"bafeabf2525e5166b1ab60cb4f14a6fc7566bf58","isMergeCommit":false,"messageTitle":"Resolve checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":9}}},{"hash":"dc474694da89328e8858e7a6d0dbd9e3acecd725","isMergeCommit":false,"messageTitle":"Fix regex for checking command format","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"b2cdb4b7ed5c7a53f4c94a59976d9cb9b210fa5f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 48-add-junit-add-dish-command-class-v1.0","messageBody":"# Conflicts:\n#\tsrc/test/java/seedu/duke/command/AddDishCommandTest.java\n","fileTypesAndContributionMap":{}},{"hash":"fa8ef0342b58f18674f264f4ccf62ba1c191089e","isMergeCommit":true,"messageTitle":"Merge pull request #68 from ziyi105/65-junit-test-edit_price","messageBody":"65 junit test edit price","fileTypesAndContributionMap":{}},{"hash":"4d15f13e7ddfa5613ca9aeead0a522e7ca345d7d","isMergeCommit":false,"messageTitle":"Migrate code to the proper file to account for refactoring","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":25,"deletions":31}}},{"hash":"21f12ca05d6c12e1ebf594b645ee414aa463f867","isMergeCommit":false,"messageTitle":"Rename assertion test class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}},{"hash":"39a749dfb863c53632cfc7fe43940e78ffcbaa36","isMergeCommit":true,"messageTitle":"Merge pull request #71 from NaychiMin/23-parser-for-list-ingredients-v1.0","messageBody":"Task 15 Fulfill user story: As a cafe owner, I want to list the ingredients needed for each dish on the menu","fileTypesAndContributionMap":{}},{"hash":"edf80a2a80eecbec3210162b4005895920dc697f","isMergeCommit":true,"messageTitle":"Merge pull request #70 from Cazh1/master","messageBody":"Update ListMenuCommand JUnit assertion use","fileTypesAndContributionMap":{}},{"hash":"293c66243dde702314e4b2f53db72f638f5a773b","isMergeCommit":false,"messageTitle":"Added JUnit Tests for add dish command parsing","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":35,"deletions":0}}},{"hash":"a1c50f66393dc01a4e45c75e9ef33fb975305ec7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into 67-junit-test-for-add-dish-v1.0","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"41cb964a10164e5c327493bac64d1bb053d05657","isMergeCommit":false,"messageTitle":"Update ParserTest.java to resolve checkstyle bug","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"1b21699f299353403aff2b6e37e077e604e675cf","isMergeCommit":true,"messageTitle":"Merge pull request #75 from ShaniceTang/22-implement-delete-feature","messageBody":"Task 17, Implement delete feature","fileTypesAndContributionMap":{}},{"hash":"c694c066583b13ef900278baa32b1df645b43fd6","isMergeCommit":false,"messageTitle":"Edit add dish parsing code to prevent negative price input","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":0}}},{"hash":"d1fa8a2f18fd567e65f8e22359f333e35cda5099","isMergeCommit":false,"messageTitle":"Edit code to solve checkstyle issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":6}}}]},{"date":"2023-10-22","commitResults":[{"hash":"bf777c46f6b1718b5e939b83e6b6d710b37ff8ff","isMergeCommit":false,"messageTitle":"build.gradle: Enable assertions","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":0}}}]}],"Cazh1":[{"date":"2023-10-05","commitResults":[{"hash":"070155ed53e9e987a79208ac10c5a7942c4cf353","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"723d6d3ec5d4432d2631550b9b22baf980699341","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"7c37a72bf95a8e73203623e2f7bba0d31d980da2","isMergeCommit":false,"messageTitle":"Add Command class","messageBody":"Fixes #10\n","fileTypesAndContributionMap":{"functional-code":{"insertions":47,"deletions":0},"test-code":{"insertions":28,"deletions":0}}},{"hash":"41a9cdcf458fc3a5c3263d6a38a86dcd2df4bf24","isMergeCommit":false,"messageTitle":"Update DeleteCommand.java documentation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"d97572fd5728f2ca25a88738e0051ea5e7eb8ad0","isMergeCommit":false,"messageTitle":"Update class names to be more specific","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":39,"deletions":11},"other":{"insertions":2,"deletions":2},"test-code":{"insertions":20,"deletions":23}}},{"hash":"eb08e382fa90c0fb9bdf8e71b309f20284cd98ad","isMergeCommit":false,"messageTitle":"Add newline at end of test files","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":5,"deletions":5}}},{"hash":"3c06e5aa4557a25d90dda38e1a41ae36ca9e6e10","isMergeCommit":false,"messageTitle":"Update execute method in Command class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":6}}},{"hash":"07a56ed80238819e5d1923bc0495342718d6cc60","isMergeCommit":false,"messageTitle":"Update Command class to include index attribute","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":1}}},{"hash":"0571dea28a7a323f5ea3157b5b11efc77a16ad9d","isMergeCommit":false,"messageTitle":"Update ListMenuCommand.java for spacing issue","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"67f65e2b750751127920b80b45d162c28849b99f","isMergeCommit":false,"messageTitle":"Update Menu.java methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":1}}},{"hash":"dd7c6f2d40a3ed811a03e75cc2af2322965eb214","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into #16-View-Menu-Items","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"43905d03b1a0e1e6f237519feb227e5c606d0e3d","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into #16-View-Menu-Items","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"188ec8e7c0cd4b376b7ab20baa1b24b4b3a9fce0","isMergeCommit":false,"messageTitle":"Update ListMenuCommand.java function","messageBody":"Fixes #16\n","fileTypesAndContributionMap":{"functional-code":{"insertions":17,"deletions":4}}},{"hash":"960269b67e4aa999773ea1f4dbc28795c369f061","isMergeCommit":false,"messageTitle":"Implement UI support for ListMenu","messageBody":"Fixes #18\n","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"ad6b223efae6bf4be468bf1ad7cbeb772c58d774","isMergeCommit":false,"messageTitle":"Implement Junit for ListCommand.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0},"test-code":{"insertions":16,"deletions":0}}},{"hash":"ac4e57130e2e050f03f1ccd7411de2e88ee69082","isMergeCommit":false,"messageTitle":"Update ListMenuCommand.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":0}}},{"hash":"00a910fc686c6c00e94650e0d5916547bc5e5ad9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into #16-View-Menu-Items","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f6297af60c900eefedcceacecce2d08c15276341","isMergeCommit":false,"messageTitle":"Update ListMenuCommandTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}},{"hash":"2856c5f60c980e91be95c745fedd8c9e8ddd6e31","isMergeCommit":false,"messageTitle":"Implement Parser Class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":136,"deletions":10}}},{"hash":"0d2d717f903269c31c1ca662023c8ce76f91caa6","isMergeCommit":true,"messageTitle":"Merge branch \u0027#16-View-Menu-Items\u0027 of https://github.com/Cazh1/tp into #16-View-Menu-Items","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b561971875675cd6dbafb42d37fd06e4bf2c8ddf","isMergeCommit":false,"messageTitle":"Implement Parser Class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"9ce30642e1d1acc79672f3dcf830307d7482cf42","isMergeCommit":false,"messageTitle":"Update Parser.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"d9714d689f822fffe73a376d3954546775ceaa7d","isMergeCommit":false,"messageTitle":"Update code in reference to Gradle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":20}}},{"hash":"71629404bad7b6184f37a4cff09948061ab74dda","isMergeCommit":false,"messageTitle":"Update ListMenuCommandTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":3}}},{"hash":"ec3ad41cac129fdce30e4415477e1dded5257571","isMergeCommit":false,"messageTitle":"Update Duke.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":29}}},{"hash":"108544c2ee7ab0add14e4add818cec3bd9833423","isMergeCommit":false,"messageTitle":"Update code with regards to Gradle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":47},"test-code":{"insertions":3,"deletions":3}}},{"hash":"dcb4058fbb404099fe3a75a755d95dccb55511a5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into #19-Implement-Parser-Support","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5f5820c74f52b67d4286d5eb18c96c705fb71c52","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"017b36204c1a5a2dfcec158d84a28b4c8f9bfd0d","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"31be1a09cca6f201e27ca77b56b7b58c660e54fb","isMergeCommit":false,"messageTitle":"Update JUnit to include assertion","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":1}}},{"hash":"0bfb9deb1c64b443917db9cf43fd1941db44c731","isMergeCommit":false,"messageTitle":"Update Parser to support ListMenuCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":2}}},{"hash":"2374d2890158c0441811d369ecfb121d1c23bc25","isMergeCommit":false,"messageTitle":"Update JUnit test case name to comply with standards","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-18","commitResults":[{"hash":"aa96baada7a5530ba329e33200dc264f6b09434e","isMergeCommit":false,"messageTitle":"Update code to remove use of Magic String","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":6}}},{"hash":"4d0cc8da2c44626b3abdc3baaac5f28f183e57bc","isMergeCommit":false,"messageTitle":"Update JUnit assertion use","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"test-code":{"insertions":27,"deletions":1}}},{"hash":"0956546fb4a59b7037ad7a3e659dc894f97ef3dc","isMergeCommit":false,"messageTitle":"Update ListMenuCommandTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":4}}},{"hash":"e43dffdab7af41343dd985321360c9d9547d0ff3","isMergeCommit":false,"messageTitle":"Update MenuList appearance","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":2},"test-code":{"insertions":4,"deletions":4}}}]},{"date":"2023-10-19","commitResults":[{"hash":"b18deabd054b19780e3d5cc6eac3fe1e541643d1","isMergeCommit":false,"messageTitle":"Update code to comply Gradle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}}]},{"date":"2023-10-22","commitResults":[{"hash":"b1aac1c4b0473c620dcb918ceb878ab12757384a","isMergeCommit":false,"messageTitle":"Add method for empty menu","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":2}}},{"hash":"69168a3d641267d405a4019bcbade582689e8d5f","isMergeCommit":false,"messageTitle":"Update code to comply with Gradle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"927b64d77278cb15a7b0f986d7719a29bb655771","isMergeCommit":false,"messageTitle":"Update JUnit for ListMenu","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":18,"deletions":8}}},{"hash":"c2c3c5c523442a2120fd42ec4c0403a3c32892d5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Edit-List_Menu-appearance","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fffd1c462fa1ec1f8c4f210824670563c458d26e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Edit-List_Menu-appearance","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"65510e0cc0896dd9dbb314673257289143d76e40","isMergeCommit":false,"messageTitle":"Update ListMenu to use Messages.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":1}}}]}],"ziyi105":[{"date":"2023-10-05","commitResults":[{"hash":"ce55b55eeedfddf78b8dcd41a589ab3097fc943f","isMergeCommit":false,"messageTitle":"Update AboutUs.md with Ziyi\u0027s name and github","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"0a4dab6d434c8f1fce06a3b938c558a2f24cba82","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9ac70fde66fd83d921866a9b4555dd6d59d78e7c","isMergeCommit":true,"messageTitle":"Merge pull request #4 from ziyi105/master","messageBody":"Update AboutUs.md with Ziyi\u0027s name and github","fileTypesAndContributionMap":{}},{"hash":"db3be0d4dbc95092f2a772ee485cf24139f4a960","isMergeCommit":false,"messageTitle":"Update Ziyi\u0027s photo on AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"4c760d59203dc1a28a8eb86763ea3e80f6a71ff2","isMergeCommit":true,"messageTitle":"Merge pull request #6 from ziyi105/master","messageBody":"Update Ziyi\u0027s photo on AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-14","commitResults":[{"hash":"a58bed14f14de4d92994e46cc136783aba7fd4c3","isMergeCommit":false,"messageTitle":"Add Parser.java","messageBody":"fixes #8\n","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":0}}},{"hash":"5ddffe229dba287cf4773bad97938c3b6659e9ef","isMergeCommit":false,"messageTitle":"Parser.java: move from package Parser to seedu.duke.parser","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"b806594dfa85c2c71007f457c46139694b196274","isMergeCommit":false,"messageTitle":"Add ParserTest.java","messageBody":"fixes #12\n","fileTypesAndContributionMap":{"test-code":{"insertions":7,"deletions":0}}},{"hash":"74d345ea8d7fd35e7906b35ae7c5dea5124d0f2f","isMergeCommit":false,"messageTitle":"ParserTest.java: remove wild card import","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":2}}}]},{"date":"2023-10-15","commitResults":[{"hash":"72f47e36ee6fc50c291c3ba56995c48ca4d7adec","isMergeCommit":false,"messageTitle":"ParserTest.java: add a new line at the end of the file","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}},{"hash":"ce21b499b97b8604e902d81c2ffc5d2e5e3dbda1","isMergeCommit":false,"messageTitle":"Add Menu.java, Dish.java, Ingredient.java and their test classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":37,"deletions":0},"test-code":{"insertions":21,"deletions":0}}},{"hash":"6cd980d30ffc7269100b0e144deb704624108ba4","isMergeCommit":false,"messageTitle":"Add Menu.java","messageBody":"fixes 31\n","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":13}}},{"hash":"9de4ee60d69353f1d1e32b5a60b5b27991d8219c","isMergeCommit":false,"messageTitle":"Revert \"Add Menu.java\"","messageBody":"This reverts commit 6cd980d30ffc7269100b0e144deb704624108ba4.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":0}}},{"hash":"79afe5da305b841bf11d7be35b464cbfc2ad8134","isMergeCommit":false,"messageTitle":"Dish.java: change price type double to float","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"e5534107d88a9f49f4eaa864f24622948c9dc773","isMergeCommit":false,"messageTitle":"ParserTest.java: add javadoc to the class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":0}}}]},{"date":"2023-10-16","commitResults":[{"hash":"2600dcb46108a997b4c7366401b3fd7bcb2b8e44","isMergeCommit":true,"messageTitle":"Merge pull request #42 from Cazh1/master","messageBody":"Update attributes and methods in Command class","fileTypesAndContributionMap":{}},{"hash":"bf1325d50b3a48da0fd72c5ab665f452d4d4f919","isMergeCommit":true,"messageTitle":"Merge pull request #44 from DextheChik3n/edit-classes-v1.0","messageBody":"Edit classes v1.0","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"f079f9950ec7a31a8ce26b0cf50c5a7507d3dd6f","isMergeCommit":false,"messageTitle":"Implement parseCommand() method according to AddressbookLevel2","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":37,"deletions":0}}},{"hash":"0852e29a9ee8563ff84a34e75b5b0efd5b342e09","isMergeCommit":false,"messageTitle":"Implement ui support for edit price feature","messageBody":"fixes #14\n","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"0dcf6106d09cef97c0c807f356e3a62be9043b33","isMergeCommit":false,"messageTitle":"Dish.java: add setter for price","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"b67df48ceadf6e7b7d4972f4ab094428396d9293","isMergeCommit":false,"messageTitle":"Create EditPriceCommand.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":0}}},{"hash":"db9131da26048c68ee531e9cf035c0a3045ffa72","isMergeCommit":true,"messageTitle":"Merge pull request #46 from DextheChik3n/43-add-items-v1.0","messageBody":"Implement add dish feature","fileTypesAndContributionMap":{}},{"hash":"c88d9091f99c7c1c13c815b1a926dec91d729117","isMergeCommit":false,"messageTitle":"Parser.java: add parserCommand() method and incomplete prepareEditPriceCommand()","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":0}}},{"hash":"38e05b78ff2369a7299c9de1a6c53cfa8560537d","isMergeCommit":false,"messageTitle":"Add constant COMMAND_WORD in executable command classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0}}},{"hash":"2743a171159dc3e00cc9bf9134802df91516a91c","isMergeCommit":false,"messageTitle":"Declare COMMAND_ARGUMENT_STRING for compiling patterns","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":7}}},{"hash":"fc0ae7663b7c245853f11061b2d7d0531b378f6c","isMergeCommit":false,"messageTitle":"Implement parseCommand with pattern and matcher","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":30,"deletions":2}}},{"hash":"87643e1fff76ea1ff58a72c59069501ea1ad8d5d","isMergeCommit":false,"messageTitle":"Parser.java: design the overall structure of different prepareCommands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":54,"deletions":10}}},{"hash":"687f3a97f09b7b76fdc37f1647fe310d852dbcaa","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into use-pattern-and-matcher-in-parser","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a4588d6428a667606b73729fc4d7b171b814bc0e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into use-pattern-and-matcher-in-parser","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"76f879d8556fefdcdd8426b7ce96f08e9661dcf8","isMergeCommit":false,"messageTitle":"Parser.java: remove argument when creating DeleteDishCommand and ListIngredientCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"3166afc463ac1cf0c36a3c0f02025286408336a9","isMergeCommit":false,"messageTitle":"Parser.java: pass arguments to prepareListIngredient","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"4e07571336b93f76098b442a3b7818cc3de7638f","isMergeCommit":false,"messageTitle":"Update ListIngredientCommand.java with constructor that takes in listIndex","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"972c84e4f91f7e6184b2071370f7ce136e27da80","isMergeCommit":false,"messageTitle":"Update Parser.java with correct coding standard","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"17930caaedda6b70d54027eabb2b45b299f3429f","isMergeCommit":false,"messageTitle":"Parser.java: split ADD_COMMAND_ARGUMENTS correctly","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"2f877b3b7908caaa0fa8feec1de4bf94936aa508","isMergeCommit":false,"messageTitle":"Parser.java: update ADD_PATTERN to ADD_ARGUMENT_PATTERN","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"fe4ae667b55c28acbef1156b7576731def556694","isMergeCommit":false,"messageTitle":"Parser.java: correct indentation at line 129","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5}}},{"hash":"306797c8dc6fbccf4d7d8ffd573f27301af152d7","isMergeCommit":true,"messageTitle":"Merge branch \u002711-feature-edit-price-v1.0\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/duke/parser/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"f9822a12af4e06828b3f5dcd72ba6019bfa22186","isMergeCommit":true,"messageTitle":"Merge pull request #57 from DextheChik3n/38-edit-main-class-v1.0","messageBody":"38 edit main class v1.0","fileTypesAndContributionMap":{}},{"hash":"3b01a433e7853ceea15ec017094e14628381c8f6","isMergeCommit":false,"messageTitle":"EditPriceCommand.java: update edit price to edit_price","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"20abc84278a6421e5be06493cdb0619b4103f6f4","isMergeCommit":false,"messageTitle":"Implement parser support for edit_price feature","messageBody":"fixes #13\n","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":6}}},{"hash":"b7b6c987b205a69bc9bfda9bf6b6bb62604a065e","isMergeCommit":false,"messageTitle":"Dish.java: add toString method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"e4a58f40bd283404e96d922aee5bbf1b9c0c7f1b","isMergeCommit":false,"messageTitle":"Ui.java: make showToUser and showEditPriceMessage static","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"d87ddca7b459be077d396635d101e07b267a5036","isMergeCommit":false,"messageTitle":"EditPriceCommand.java: show message after execute","messageBody":"Fixes #14\n","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":1}}},{"hash":"31aec2fa86642f1dc57bcb132c4afd5b60260c6f","isMergeCommit":false,"messageTitle":"Ui.java: add javadoc for showEditPriceMessage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":1}}},{"hash":"a1926699bd7da67ea47b9daa1148860d14cbb2ab","isMergeCommit":false,"messageTitle":"Parser.java: rename ADD_ARGUMENT_STRING and EDIT_DISH_ARGUMENT to camelCase","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":6}}}]},{"date":"2023-10-18","commitResults":[{"hash":"569e182e90d0a3efd3d9e2b08b848914b93e03d0","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/cafectrl/command/EditPriceCommand.java\n#\tsrc/main/java/seedu/cafectrl/parser/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"e991c9db72a04d04051bbd6fef381a324a2f7b05","isMergeCommit":false,"messageTitle":"Parser.java: remove wildcard import","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":1}}},{"hash":"d3f5e998de9b97220a2fb1c5de9e42ed1565e310","isMergeCommit":false,"messageTitle":"Parser.java: remove duplicated import","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"e7bb131f1de78bf89df8036169b194cca157557d","isMergeCommit":true,"messageTitle":"Merge pull request #60 from Cazh1/master","messageBody":"Update code quality","fileTypesAndContributionMap":{}},{"hash":"4aef10a1aaade726ea889271653dc5f2a7fe17f2","isMergeCommit":true,"messageTitle":"Merge pull request #58 from ShaniceTang/55-deletecommand-junit-test","messageBody":"Task 55, Add JUnit test for Delete Command","fileTypesAndContributionMap":{}},{"hash":"4075a3361550a84ae8b24e23fec324f9db30502c","isMergeCommit":false,"messageTitle":"Menu.java: add isValidDishIndex method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"721151f928162dceba3584c0bd568cef7596a74d","isMergeCommit":false,"messageTitle":"Parser.java: remove catch block for IndexOutOfBoundsException","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":11}}},{"hash":"cf6e6994cea30240729079377b6b68476dcfe433","isMergeCommit":true,"messageTitle":"Merge pull request #62 from NaychiMin/56-Junit-test-for-list-ingredient.v1.0","messageBody":"Task 56, Add junit test for List Ingredient command.","fileTypesAndContributionMap":{}},{"hash":"6e6f539c96aa5844eb403591beb81a723bf06059","isMergeCommit":true,"messageTitle":"Merge branch \u002711-feature-edit-price-v1.0\u0027 into ziyi105-11-feature-edit-price-v1.0","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/cafectrl/command/EditPriceCommand.java\n#\tsrc/main/java/seedu/cafectrl/data/Menu.java\n#\tsrc/main/java/seedu/cafectrl/parser/Parser.java\n#\tsrc/main/java/seedu/cafectrl/ui/Messages.java\n","fileTypesAndContributionMap":{}},{"hash":"d8fd274670ac311f83fcb2090492a94c62379017","isMergeCommit":false,"messageTitle":"Ui.java: remove static from showToUser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"edf108043148d24277cf8430c989201972ec2c45","isMergeCommit":false,"messageTitle":"Improve code quality with gradlew","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"d128fc7c9682256fea60137e194f239e52521613","isMergeCommit":false,"messageTitle":"Messages.java: update position of plus operator for strings","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":6}}},{"hash":"bd4181f11168d9c3e1b34bf16a0f7efa37f68418","isMergeCommit":false,"messageTitle":"Parser.java: update position of plus operator","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"defbb3e75f20842edf6faa71e54688a3367ed1d6","isMergeCommit":false,"messageTitle":"Messages.java: Update position of plus operator for MISSING_ARGUMENT_FOR_EDIT_PRICE","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"e7ca9e70c6a75d581ac6d8fa41cf173be97da596","isMergeCommit":false,"messageTitle":"Parser.java: replace matcher.matches() with matcher.find() in line 96","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"54e6c789b799b86d458d6a74ee4d57e8362a1fa2","isMergeCommit":false,"messageTitle":"EditPriceCommand.java: minus offset for menuID","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"908e1da4fe7c6f257b299d05d81fc277440ff8cc","isMergeCommit":false,"messageTitle":"EditPriceCommandTest.ava: add JUnit test for valid input","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":2},"test-code":{"insertions":42,"deletions":0}}},{"hash":"7f6ae576969e353434ae08a9b55ead58169bb6f0","isMergeCommit":false,"messageTitle":"ParserTest.java: add JUnit test for parseCommand_unrecognisedInput_unknownCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":2},"test-code":{"insertions":32,"deletions":0}}},{"hash":"b4ae9501b1c0bad09222f0d0d90da681de3da7a0","isMergeCommit":true,"messageTitle":"Merge pull request #66 from DextheChik3n/24-parser-add-dish-v1.0","messageBody":"24 parser add dish v1.0","fileTypesAndContributionMap":{}},{"hash":"a20cbd574d66169d6c7098cc9edeffbadefbf04d","isMergeCommit":false,"messageTitle":"ParserTest.java: add JUnit test for possible user inputs for edit_price command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":42,"deletions":2}}},{"hash":"9f593575dd7db9e268f6508508d3a7bb12de40e3","isMergeCommit":true,"messageTitle":"Merge pull request #69 from DextheChik3n/48-add-junit-add-dish-command-class-v1.0","messageBody":"48 add junit add dish command class v1.0","fileTypesAndContributionMap":{}},{"hash":"b47e636e131f0a3984ee2cbd5fb2d149ff029dab","isMergeCommit":true,"messageTitle":"Merge pull request #72 from DextheChik3n/67-junit-test-for-add-dish-v1.0","messageBody":"Added JUnit Tests for add dish command parsing","fileTypesAndContributionMap":{}},{"hash":"e677079202361a2f65f201103b146ae13c1a143b","isMergeCommit":true,"messageTitle":"Merge pull request #76 from DextheChik3n/74-resolve-negative-price-input-v1.0","messageBody":"Edit add dish parsing code to prevent negative price input","tags":["A-Release-v1.0"],"fileTypesAndContributionMap":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"96882eb9101008776de82b957a9ae270e0af3bff","isMergeCommit":true,"messageTitle":"Merge pull request #80 from ShaniceTang/78-combine-messages","messageBody":"Task 78, Add UserOutput enumeration messages to Message class","fileTypesAndContributionMap":{}},{"hash":"06fb6a449152d4bbcb83c66a33ea8e1f5fce6457","isMergeCommit":true,"messageTitle":"Merge pull request #81 from Cazh1/Edit-List_Menu-appearance","messageBody":"Edit list menu appearance","fileTypesAndContributionMap":{}},{"hash":"318b4e7f859ad0a4f8b4fff81731e5472fad9a08","isMergeCommit":true,"messageTitle":"Merge pull request #97 from DextheChik3n/77-enable-assertions-v1.1","messageBody":"77 enable assertions v1.1","fileTypesAndContributionMap":{}}]}],"ShaniceTang":[{"date":"2023-10-05","commitResults":[{"hash":"88288a4ee312a4a3906c0c7f8ecad9003abaf8fa","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"cea95da46d699ef3d7182ed840e860be204a6270","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"6b3c432ddb95359f5c4f9dee044cba3b53dc4b62","isMergeCommit":true,"messageTitle":"Merge pull request #2 from ShaniceTang/master","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"dadae0261aa4778ac64d68cbc66ec345da97f599","isMergeCommit":false,"messageTitle":"Fixes #27","messageBody":"Create UiTest JUnit Class\n","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":0}}},{"hash":"ba46ad20ecedd9d0cb49290bd75ba7df3e989b11","isMergeCommit":false,"messageTitle":"Add javadoc to UiTest class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":0}}}]},{"date":"2023-10-17","commitResults":[{"hash":"c4e118ce054a0eed4b0d076aadeaf5059f04853a","isMergeCommit":false,"messageTitle":"Add delete message to Ui class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"93ca9601f61702c86011451a21e6c3a097ff8f11","isMergeCommit":false,"messageTitle":"Fixes #21","messageBody":"Add javadoc to delete message method\n","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"812654327335924346f337a4102942a40b05df4e","isMergeCommit":false,"messageTitle":"Edit delete message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"ddd3d5049a361d1bc8b66e1fc77f7b4ea24ed638","isMergeCommit":false,"messageTitle":"Update delete command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":1}}},{"hash":"2a3d1fdcc0f08aba6e15f425fd490c8ffa5eb1b7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-2/tp into 22-implement-delete-feature","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5e69f2317cb5536d4b0bbad556082b7c831439a8","isMergeCommit":false,"messageTitle":"Rename remove to removeDish method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"0ea6f655d06d20f1b3ff16724412856b42269ca4","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-2/tp into 22-implement-delete-feature","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/duke/command/DeleteDishCommand.java\n","fileTypesAndContributionMap":{}},{"hash":"be50d359eeb512d129d052773bddfd07c2982b9f","isMergeCommit":false,"messageTitle":"Handle invalid index error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":5}}},{"hash":"411253bc7049f64567ed3785d19fc9e8d93c4dbb","isMergeCommit":false,"messageTitle":"Reformat printed string","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"2e861f26e20a182639268add85bec7b82792038c","isMergeCommit":false,"messageTitle":"Fixes #22","messageBody":"Implement parser support for deleting a dish\n","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":12}}},{"hash":"e94d49fcda0fa69ee9d80bab03b075c94b7c80e5","isMergeCommit":false,"messageTitle":"Improve code standard","messageBody":"Fixes #22\n","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":3}}},{"hash":"1c1742d4902012be02dfe7409ac94eb0e17f45e9","isMergeCommit":false,"messageTitle":"Handle out of bounds input index","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":5}}},{"hash":"39edc4758bf49b45c071bbe3f2bb0612d87381b3","isMergeCommit":false,"messageTitle":"Add JUnit test for Delete Command valid and invalid input","messageBody":"Fixes #55\n","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"test-code":{"insertions":59,"deletions":0}}},{"hash":"d2dfdeed55d7eb2b519262ccd86d50d2dcb86e3f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-2/tp into 55-deletecommand-junit-test","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"1bd674a5beecdb86bfec754b7b106c70180ce148","isMergeCommit":false,"messageTitle":"Update import path","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":3}}}]},{"date":"2023-10-18","commitResults":[{"hash":"02f561afd0972856a346bb73cfd099c3414c1fd7","isMergeCommit":false,"messageTitle":"Add try-catch error handler","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":3}}},{"hash":"40341fbba23130d1bb37d570eabbe1422bcf451b","isMergeCommit":false,"messageTitle":"Throw Index Out Of Bounds Exception","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"aca573016cb7a28d67fb0cb705e45fe9f562d15f","isMergeCommit":false,"messageTitle":"Update prepareDelete to match other methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":5}}},{"hash":"eed4152ad902aee18c1690be1c2b8e5d1264823a","isMergeCommit":false,"messageTitle":"Assert exception instead of equal string","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":7,"deletions":18}}},{"hash":"7f02a0de9aac1ed99944fc0c4beebc648b1d7d60","isMergeCommit":false,"messageTitle":"Create JUnit test for prepareDelete in Parser class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":17,"deletions":0}}},{"hash":"19a2ba9679b87ce118bc75987aed02a6207c6236","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-2/tp into 22-implement-delete-feature","messageBody":"# Conflicts:\n#\tsrc/test/java/seedu/cafectrl/parser/ParserTest.java\n","fileTypesAndContributionMap":{}},{"hash":"4881d95845ceae0c637849d3fa0142af1402db66","isMergeCommit":false,"messageTitle":"Use message string from Messages class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"695a304ae83f3e437f8ad2ed792591a1a624f2f6","isMergeCommit":false,"messageTitle":"Update prepareDelete method to standardize","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":10}}},{"hash":"cdea65514d1e4bc676cec5623e13bc10b96da8b3","isMergeCommit":false,"messageTitle":"Add JUnit test for delete command for parseCommand method","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":15,"deletions":4}}},{"hash":"b366ac5c0f59c71cbe7964111908f0f4e3cbb2d5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T17-2/tp into 22-implement-delete-feature","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/cafectrl/ui/Messages.java\n#\tsrc/test/java/seedu/cafectrl/parser/ParserTest.java\n","fileTypesAndContributionMap":{}},{"hash":"72da852206244ef87bcd8f2f765de519177317d0","isMergeCommit":false,"messageTitle":"Improve code quality","messageBody":"Fixes #17\n","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"d2c8fd89be220ad3d1ddf9ce4f4e2a0f734dc9c0","isMergeCommit":false,"messageTitle":"Remove duplicate import statement","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":2}}}]},{"date":"2023-10-22","commitResults":[{"hash":"8e589d37d341acdb4abcb34da25475bdc8a04e33","isMergeCommit":false,"messageTitle":"Move all messages in to Message class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":26},"test-code":{"insertions":1,"deletions":2}}},{"hash":"12bc39306efa8ba725bcbe10c93079d745569e03","isMergeCommit":false,"messageTitle":"Update unknown command message","messageBody":"Fixes #78\n","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}}]}]},"authorFileTypeContributionMap":{"NaychiMin":{"docs":1,"functional-code":82,"test-code":122},"DextheChik3n":{"docs":1,"functional-code":282,"test-code":81,"other":3},"Cazh1":{"docs":1,"functional-code":178,"test-code":64},"ziyi105":{"docs":1,"functional-code":223,"test-code":133},"ShaniceTang":{"docs":2,"functional-code":73,"test-code":122}},"authorContributionVariance":{"NaychiMin":1825.5985,"DextheChik3n":6336.5396,"Cazh1":6426.177,"ziyi105":4630.572,"ShaniceTang":1328.4329},"authorDisplayNameMap":{"NaychiMin":"CS2113-T17-2 SAUN.. MIN","DextheChik3n":"CS2113-T17-2 DEXT..G EN","Cazh1":"CS2113-T17-2 CHUA..HENG","ziyi105":"CS2113-T17-2 NG Z..I YI","ShaniceTang":"CS2113-T17-2 TANG..NICE"}} diff --git a/AY2324S1-CS2113-T18-1_tp_master/authorship.json b/AY2324S1-CS2113-T18-1_tp_master/authorship.json index 58d7f59..c67adcb 100644 --- a/AY2324S1-CS2113-T18-1_tp_master/authorship.json +++ b/AY2324S1-CS2113-T18-1_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"docs","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":"onx001"},"content":"This is a project template for a greenfield Java project. It\u0027s named after Chess and Master. Given below are instructions on how to use it.","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11 (use the exact version), update Intellij to the most recent version.","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. **Ensure Intellij JDK 11 is defined as an SDK**, as described [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk) -- this step is not needed if you have used JDK 11 in a previous Intellij project.","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. **Import the project _as a Gradle project_**, as described [here](https://se-education.org/guides/tutorials/intellijImportGradleProject.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"1. **Verify the set up**: After the importing is complete, locate the `src/main/java/seedu/duke/Duke.java` file, right-click it, and choose `Run Duke.main()`. If the setup is correct, you should see something like the below:","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003e Task :compileJava","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003e Task :processResources NO-SOURCE","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003e Task :classes","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003e Task :Duke.main()","lastModifiedDate":"2020-05-24"},{"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-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":" What is your name?","lastModifiedDate":"2020-05-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" Type some word and press enter to let the execution proceed to the end.","lastModifiedDate":"2020-05-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":"## Build automation using Gradle","lastModifiedDate":"2020-05-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":"* This project uses Gradle for build automation and dependency management. It includes a basic build script as well (i.e. the `build.gradle` file).","lastModifiedDate":"2020-05-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":"* If you are new to Gradle, refer to the [Gradle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/gradle.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":"## Testing","lastModifiedDate":"2020-05-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":"### I/O redirection tests","lastModifiedDate":"2020-05-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"* To run _I/O redirection_ tests (aka _Text UI tests_), navigate to the `text-ui-test` and run the `runtest(.bat/.sh)` script.","lastModifiedDate":"2020-05-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":"### JUnit tests","lastModifiedDate":"2020-05-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":42,"author":{"gitId":"-"},"content":"* A skeleton JUnit test (`src/test/java/seedu/duke/DukeTest.java`) is provided with this project template. ","lastModifiedDate":"2020-05-24"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* If you are new to JUnit, refer to the [JUnit Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/junit.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":"## Checkstyle","lastModifiedDate":"2020-05-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* A sample CheckStyle rule configuration is provided in this project.","lastModifiedDate":"2020-05-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* If you are new to Checkstyle, refer to the [Checkstyle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/checkstyle.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":"## CI using GitHub Actions","lastModifiedDate":"2020-05-24"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":52,"author":{"gitId":"-"},"content":"The project uses [GitHub actions](https://github.com/features/actions) for CI. When you push a commit to this repo or PR against it, GitHub actions will run automatically to build and verify the code as updated by the commit/PR.","lastModifiedDate":"2020-05-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":"## Documentation","lastModifiedDate":"2020-05-24"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":56,"author":{"gitId":"-"},"content":"`/docs` folder contains a skeleton version of the project documentation.","lastModifiedDate":"2020-05-24"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":58,"author":{"gitId":"-"},"content":"Steps for publishing documentation to the public: ","lastModifiedDate":"2020-05-24"},{"lineNumber":59,"author":{"gitId":"-"},"content":"1. If you are using this project template for an individual project, go your fork on GitHub.\u003cbr\u003e","lastModifiedDate":"2020-05-24"},{"lineNumber":60,"author":{"gitId":"-"},"content":" If you are using this project template for a team project, go to the team fork on GitHub.","lastModifiedDate":"2020-05-24"},{"lineNumber":61,"author":{"gitId":"-"},"content":"1. Click on the `settings` tab.","lastModifiedDate":"2020-05-24"},{"lineNumber":62,"author":{"gitId":"-"},"content":"1. Scroll down to the `GitHub Pages` section.","lastModifiedDate":"2020-05-24"},{"lineNumber":63,"author":{"gitId":"-"},"content":"1. Set the `source` as `master branch /docs folder`.","lastModifiedDate":"2020-05-24"},{"lineNumber":64,"author":{"gitId":"-"},"content":"1. Optionally, use the `choose a theme` button to choose a theme for your documentation.","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"onx001":1,"-":63}},{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" mainClass.set(\"chessmaster.ChessMaster\")","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" archiveBaseName.set(\"chessmaster\")","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":"compileJava.options.encoding \u003d \u0027UTF-8\u0027","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":"tasks.withType(JavaCompile) {","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" options.encoding \u003d \u0027UTF-8\u0027","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"TongZhengHong":8,"-":44}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"antrikshdhand"},"content":"| Name | ID | Github |","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"antrikshdhand"},"content":"|-----------------|-----------|---------------|","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"antrikshdhand"},"content":"| Antriksh Dhand | A0278458J | antrikshdhand |","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"antrikshdhand"},"content":"| Oh Ken Wei | A0251850J | ken-ruster |","lastModifiedDate":"2023-10-05"},{"lineNumber":7,"author":{"gitId":"antrikshdhand"},"content":"| Ou Ningxiang | A0249445W | onx001 |","lastModifiedDate":"2023-10-05"},{"lineNumber":8,"author":{"gitId":"antrikshdhand"},"content":"| Tong Zheng Hong | A0251819Y | TongZhengHong |","lastModifiedDate":"2023-10-05"},{"lineNumber":9,"author":{"gitId":"antrikshdhand"},"content":"| Tricia Boo Koh | A0264665U | TriciaBK |","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"antrikshdhand":7,"-":2}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ken-ruster"},"content":"# ChessMaster","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"-"},"content":"{Give product intro here}","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"Useful links:","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"* [User Guide](UserGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"* [Developer Guide](DeveloperGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"* [About Us](AboutUs.md)","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"ken-ruster":1,"-":7}},{"path":"src/main/java/chessmaster/ChessMaster.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.game.Game;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":" * Main entry-point for ChessMaster application.","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":"public class ChessMaster {","lastModifiedDate":"2023-10-14"},{"lineNumber":10,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" Game game \u003d new Game(ChessPiece.WHITE, \"/data/newGame.txt\");","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"antrikshdhand"},"content":" game.run();","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"antrikshdhand":3,"TriciaBK":1,"TongZhengHong":4,"-":7}},{"path":"src/main/java/chessmaster/commands/AbortCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"onx001"},"content":"package chessmaster.commands;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"onx001"},"content":"public class AbortCommand extends Command {","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" public static final String ABORT_COMAMND_STRING \u003d \"abort\";","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":" private static final String ABORT_MESSAGE \u003d \"Exiting program... Thanks for playing!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"onx001"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" return new CommandResult(ABORT_MESSAGE);","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" public static boolean isAbortCommand(Command command) {","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" return command instanceof AbortCommand;","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"onx001"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"onx001":11,"TongZhengHong":7}},{"path":"src/main/java/chessmaster/commands/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"onx001"},"content":"package chessmaster.commands;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.exceptions.ChessMasterException;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"onx001"},"content":"public abstract class Command {","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":" public abstract CommandResult execute() throws ChessMasterException;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"onx001"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"onx001":5,"TongZhengHong":2}},{"path":"src/main/java/chessmaster/commands/CommandResult.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.commands;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"/**","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":" * Represents the result of a command execution.","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"public class CommandResult {","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" * The feedback message to be shown to the user. Contains a description of the","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" * execution result","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" private final String[] message;","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" public CommandResult(String... message) {","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" this.message \u003d message;","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" public String[] getMessageStrings() {","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" return this.message;","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"TongZhengHong":22}},{"path":"src/main/java/chessmaster/commands/HelpCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"onx001"},"content":"package chessmaster.commands;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"onx001"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" public static final String HELP_COMAMND_STRING \u003d \"help\";","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":" private static final String[] HELP_STRINGS \u003d { ","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" \"Seems like you need some help, here are the following commands to play: \"","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" };","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"onx001"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" return new CommandResult(HELP_STRINGS);","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"onx001"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"onx001":10,"TongZhengHong":6}},{"path":"src/main/java/chessmaster/commands/MoveCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"onx001"},"content":"package chessmaster.commands;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.exceptions.ParseCoordinateException;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"onx001"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"onx001"},"content":"public class MoveCommand extends Command {","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" public static final String MOVE_COMAMND_STRING \u003d \"move\";","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" private static final String MOVE_PIECE_MESSAGE \u003d \"Moving %s to %s\";","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" private String userInput;","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" public MoveCommand(String inputString) {","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" this.userInput \u003d inputString;","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" * Executes the command based on user input, which is expected to consist of two algebraic ","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" * coordinate strings separated by whitespace.","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" * @return A CommandResult object containing the result of the command.","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" * @throws ParseCoordinateException If the user input cannot be parsed into two coordinate objects.","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"onx001"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" public CommandResult execute() throws ParseCoordinateException {","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" String[] coordinateStrings \u003d userInput.split(\"\\\\s+\", 2);","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" if (coordinateStrings.length !\u003d 2) {","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" throw new ParseCoordinateException();","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" String fromString \u003d coordinateStrings[0];","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" String toString \u003d coordinateStrings[1];","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":" Coordinate from \u003d Coordinate.parseAlgebraicCoor(fromString);","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" Coordinate to \u003d Coordinate.parseAlgebraicCoor(toString);","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" return new CommandResult(String.format(MOVE_PIECE_MESSAGE, from, to));","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"onx001"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"onx001":15,"TongZhengHong":26}},{"path":"src/main/java/chessmaster/exceptions/ChessMasterException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class ChessMasterException extends Exception {","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":" public ChessMasterException(String message) {","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" super(message);","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"TongZhengHong":7}},{"path":"src/main/java/chessmaster/exceptions/ExceptionMessages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class ExceptionMessages {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":" public static final String MESSAGE_PARSE_CHESS_PIECE_EXCEPTION \u003d \"Unable to parse chess piece!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" public static final String MESSAGE_PARSE_COORDINATE_EXCEPTION \u003d \"Unable to parse coordinate!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TriciaBK"},"content":" public static final String MESSAGE_SAVE_BOARD_EXCEPTION \u003d \"Unable to save board!\";","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"TriciaBK"},"content":" public static final String MESSAGE_LOAD_BOARD_EXCEPTION \u003d \"Unable to load board!\";","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ken-ruster"},"content":" public static final String MESSAGE_INVALID_MOVE_EXCEPTION \u003d \"Oops, that move isn\u0027t valid!\";","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" public static final String MESSAGE_NULL_PIECE_EXCEPTION \u003d \"No piece found at coordinate!\";","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" public static final String MESSAGE_MOVE_OPPONENT_EXCEPTION \u003d \"You are moving an opponent piece!\"","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" + \"Please choose your color!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" public static final String MESSAGE_PARSE_COLOR_EXCEPTION \u003d \"Unable to parse color!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":1,"TriciaBK":2,"TongZhengHong":10}},{"path":"src/main/java/chessmaster/exceptions/InvalidMoveException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ken-ruster"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class InvalidMoveException extends ChessMasterException {","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"ken-ruster"},"content":" public InvalidMoveException() {","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ken-ruster"},"content":" super(ExceptionMessages.MESSAGE_INVALID_MOVE_EXCEPTION);","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ken-ruster"},"content":" public InvalidMoveException(String message) {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ken-ruster"},"content":" super(message);","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"ken-ruster"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"ken-ruster":10,"TongZhengHong":1}},{"path":"src/main/java/chessmaster/exceptions/LoadBoardException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TriciaBK"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class LoadBoardException extends ChessMasterException {","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"TriciaBK"},"content":" public LoadBoardException() {","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"TriciaBK"},"content":" super(ExceptionMessages.MESSAGE_LOAD_BOARD_EXCEPTION);","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"TriciaBK"},"content":" public LoadBoardException(String message) {","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"TriciaBK"},"content":" super(message);","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"TriciaBK"},"content":"}","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"TriciaBK":13,"TongZhengHong":1}},{"path":"src/main/java/chessmaster/exceptions/MoveOpponentPieceException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class MoveOpponentPieceException extends ChessMasterException {","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":" public MoveOpponentPieceException() {","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" super(ExceptionMessages.MESSAGE_MOVE_OPPONENT_EXCEPTION);","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" public MoveOpponentPieceException(String message) {","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" super(message);","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"TongZhengHong":11}},{"path":"src/main/java/chessmaster/exceptions/NullPieceException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class NullPieceException extends ChessMasterException {","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":" public NullPieceException() {","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" super(ExceptionMessages.MESSAGE_NULL_PIECE_EXCEPTION);","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" public NullPieceException(String message) {","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" super(message);","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"TongZhengHong":11}},{"path":"src/main/java/chessmaster/exceptions/ParseChessPieceException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class ParseChessPieceException extends ChessMasterException {","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" public ParseChessPieceException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":" super(ExceptionMessages.MESSAGE_PARSE_CHESS_PIECE_EXCEPTION);","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" public ParseChessPieceException(String message) {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" super(message);","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"TongZhengHong":13}},{"path":"src/main/java/chessmaster/exceptions/ParseColorException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class ParseColorException extends ChessMasterException {","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":" public ParseColorException() {","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" super(ExceptionMessages.MESSAGE_PARSE_COLOR_EXCEPTION);","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" public ParseColorException(String message) {","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" super(message);","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"TongZhengHong":11}},{"path":"src/main/java/chessmaster/exceptions/ParseCoordinateException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class ParseCoordinateException extends ChessMasterException {","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" public ParseCoordinateException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":" super(ExceptionMessages.MESSAGE_PARSE_COORDINATE_EXCEPTION);","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" public ParseCoordinateException(String message) {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" super(message);","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"TongZhengHong":13}},{"path":"src/main/java/chessmaster/exceptions/SaveBoardException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TriciaBK"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class SaveBoardException extends ChessMasterException {","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"TriciaBK"},"content":" public SaveBoardException() {","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"TriciaBK"},"content":" super(ExceptionMessages.MESSAGE_SAVE_BOARD_EXCEPTION);","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"TriciaBK"},"content":" public SaveBoardException(String message) {","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"TriciaBK"},"content":" super(message);","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"TriciaBK"},"content":"}","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"TriciaBK":13,"TongZhengHong":1}},{"path":"src/main/java/chessmaster/game/ChessBoard.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.game;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.exceptions.InvalidMoveException;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.parser.Parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TriciaBK"},"content":"import chessmaster.pieces.King;","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.pieces.Pawn;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.ui.TextUI;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":"public class ChessBoard {","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" public static final int SIZE \u003d 8;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" public static final int TOP_ROW_INDEX \u003d 0;","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" public static final int BOTTOM_ROW_INDEX \u003d 7;","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" private static final String[][] STARTING_CHESSBOARD_BLACK \u003d { ","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" { \"r\", \"n\", \"b\", \"q\", \"k\", \"b\", \"n\", \"r\" }, ","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" { \"p\", \"p\", \"p\", \"p\", \"p\", \"p\", \"p\", \"p\" }, ","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" { \".\", \".\", \".\", \".\", \".\", \".\", \".\", \".\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" { \".\", \".\", \".\", \".\", \".\", \".\", \".\", \".\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" { \".\", \".\", \".\", \".\", \".\", \".\", \".\", \".\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" { \".\", \".\", \".\", \".\", \".\", \".\", \".\", \".\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" { \"P\", \"P\", \"P\", \"P\", \"P\", \"P\", \"P\", \"P\" }, ","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" { \"R\", \"N\", \"B\", \"Q\", \"K\", \"B\", \"N\", \"R\" }, ","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" };","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" private static final String[][] STARTING_CHESSBOARD_WHITE \u003d { ","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" { \"R\", \"N\", \"B\", \"Q\", \"K\", \"B\", \"N\", \"R\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" { \"P\", \"P\", \"P\", \"P\", \"P\", \"P\", \"P\", \"P\" },","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" { \".\", \".\", \".\", \".\", \".\", \".\", \".\", \".\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" { \".\", \".\", \".\", \".\", \".\", \".\", \".\", \".\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" { \".\", \".\", \".\", \".\", \".\", \".\", \".\", \".\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" { \".\", \".\", \".\", \".\", \".\", \".\", \".\", \".\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" { \"p\", \"p\", \"p\", \"p\", \"p\", \"p\", \"p\", \"p\" },","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":" { \"r\", \"n\", \"b\", \"q\", \"k\", \"b\", \"n\", \"r\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" };","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" private boolean isWhiteKingAlive \u003d true;","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":" private boolean isBlackKingAlive \u003d true;","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":41,"author":{"gitId":"antrikshdhand"},"content":" private final ChessTile[][] board \u003d new ChessTile[SIZE][SIZE];","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" public ChessBoard(int playerColor) {","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" for (int row \u003d 0; row \u003c SIZE; row++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" for (int col \u003d 0; col \u003c SIZE; col++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" String chessPieceString \u003d (playerColor \u003d\u003d ChessPiece.BLACK) ","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" ? STARTING_CHESSBOARD_BLACK[row][col]","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" : STARTING_CHESSBOARD_WHITE[row][col];","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" ChessPiece initialPiece \u003d Parser.parseChessPiece(chessPieceString, row, col);","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" board[row][col] \u003d new ChessTile(initialPiece);","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"ken-ruster"},"content":" assert (board[row][col] !\u003d null);","lastModifiedDate":"2023-10-20"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" public ChessBoard(ChessTile[][] boardTiles) {","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" for (int row \u003d 0; row \u003c SIZE; row++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":" for (int col \u003d 0; col \u003c SIZE; col++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"TongZhengHong"},"content":" board[row][col] \u003d boardTiles[row][col];","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"onx001"},"content":" public void displayAvailableMoves() {","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"onx001"},"content":" for (int i \u003d 0; i \u003c board.length; i++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"onx001"},"content":" for (int j \u003d 0; j \u003c board.length; j++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"onx001"},"content":" ChessPiece piece \u003d board[i][j].getChessPiece();","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"TongZhengHong"},"content":" if (piece.isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"ken-ruster"},"content":" piece.displayAvailableCoordinates(this);","lastModifiedDate":"2023-10-20"},{"lineNumber":70,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"antrikshdhand"},"content":" public void showChessBoard() {","lastModifiedDate":"2023-10-19"},{"lineNumber":76,"author":{"gitId":"antrikshdhand"},"content":" System.out.println();","lastModifiedDate":"2023-10-19"},{"lineNumber":77,"author":{"gitId":"antrikshdhand"},"content":" TextUI.printChessBoardHeader();","lastModifiedDate":"2023-10-19"},{"lineNumber":78,"author":{"gitId":"antrikshdhand"},"content":" TextUI.printChessBoardDivider();","lastModifiedDate":"2023-10-19"},{"lineNumber":79,"author":{"gitId":"TongZhengHong"},"content":" for (int i \u003d 0; i \u003c board.length; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"TongZhengHong"},"content":" ChessTile[] row \u003d board[i];","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"TongZhengHong"},"content":" StringBuilder rowString \u003d new StringBuilder();","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"TongZhengHong"},"content":" for (ChessTile tile : row) {","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"TongZhengHong"},"content":" rowString.append(tile.toString());","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"TongZhengHong"},"content":" int rowNum \u003d (i - 8) * -1;","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"antrikshdhand"},"content":" TextUI.printChessBoardRow(rowNum, rowString.toString());","lastModifiedDate":"2023-10-19"},{"lineNumber":89,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"antrikshdhand"},"content":" System.out.println();","lastModifiedDate":"2023-10-19"},{"lineNumber":91,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"TongZhengHong"},"content":" public void setPromotionPiece(Coordinate coord, ChessPiece promotedPiece) {","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"TongZhengHong"},"content":" getTileAtCoor(coord).updateTileChessPiece(promotedPiece);","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"TongZhengHong"},"content":" public void setTile(int row, int col, ChessTile tile) {","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"TongZhengHong"},"content":" board[row][col] \u003d tile;","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"TongZhengHong"},"content":" * Gets the ChessTile object located at the specified coordinate on the","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"TongZhengHong"},"content":" * chessboard.","lastModifiedDate":"2023-10-22"},{"lineNumber":104,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":105,"author":{"gitId":"TongZhengHong"},"content":" * @param coor The coordinate of the position to retrieve the tile for.","lastModifiedDate":"2023-10-22"},{"lineNumber":106,"author":{"gitId":"TongZhengHong"},"content":" * @return The ChessTile object at the specified coordinate.","lastModifiedDate":"2023-10-22"},{"lineNumber":107,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":108,"author":{"gitId":"TongZhengHong"},"content":" private ChessTile getTileAtCoor(Coordinate coor) {","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"TongZhengHong"},"content":" return board[coor.getY()][coor.getX()];","lastModifiedDate":"2023-10-18"},{"lineNumber":110,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":111,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":113,"author":{"gitId":"TongZhengHong"},"content":" * Gets the chess piece located at the specified coordinate on the chessboard.","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"TongZhengHong"},"content":" * @param coor The coordinate of the position to check.","lastModifiedDate":"2023-10-22"},{"lineNumber":116,"author":{"gitId":"TongZhengHong"},"content":" * @return The ChessPiece object at the specified coordinate. If empty piece at","lastModifiedDate":"2023-10-22"},{"lineNumber":117,"author":{"gitId":"TongZhengHong"},"content":" * coordinate, returns EmptyPiece object","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"TongZhengHong"},"content":" public ChessPiece getPieceAtCoor(Coordinate coor) {","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"TongZhengHong"},"content":" ChessTile tile \u003d getTileAtCoor(coor);","lastModifiedDate":"2023-10-18"},{"lineNumber":121,"author":{"gitId":"ken-ruster"},"content":" return tile.getChessPiece();","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":124,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":125,"author":{"gitId":"TongZhengHong"},"content":" * Executes a chess move on the chessboard.","lastModifiedDate":"2023-10-18"},{"lineNumber":126,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":127,"author":{"gitId":"TongZhengHong"},"content":" * @param move The Move object representing the move to be executed.","lastModifiedDate":"2023-10-18"},{"lineNumber":128,"author":{"gitId":"TongZhengHong"},"content":" * @throws InvalidMoveException If the move is not valid according to the game","lastModifiedDate":"2023-10-22"},{"lineNumber":129,"author":{"gitId":"TongZhengHong"},"content":" * rules.","lastModifiedDate":"2023-10-22"},{"lineNumber":130,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":131,"author":{"gitId":"TongZhengHong"},"content":" public void executeMove(Move move) throws InvalidMoveException {","lastModifiedDate":"2023-10-18"},{"lineNumber":132,"author":{"gitId":"TongZhengHong"},"content":" Coordinate startCoor \u003d move.getFrom();","lastModifiedDate":"2023-10-18"},{"lineNumber":133,"author":{"gitId":"TongZhengHong"},"content":" Coordinate destCoor \u003d move.getTo();","lastModifiedDate":"2023-10-18"},{"lineNumber":134,"author":{"gitId":"TongZhengHong"},"content":" ChessPiece chessPiece \u003d move.getPiece();","lastModifiedDate":"2023-10-18"},{"lineNumber":135,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":136,"author":{"gitId":"ken-ruster"},"content":" Coordinate[][] possibleCoordinates \u003d chessPiece.getAvailableCoordinates(this);","lastModifiedDate":"2023-10-20"},{"lineNumber":137,"author":{"gitId":"TongZhengHong"},"content":" if (!move.isValid(possibleCoordinates)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":138,"author":{"gitId":"TongZhengHong"},"content":" throw new InvalidMoveException();","lastModifiedDate":"2023-10-18"},{"lineNumber":139,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":140,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":141,"author":{"gitId":"TongZhengHong"},"content":" chessPiece.setHasMoved();","lastModifiedDate":"2023-10-22"},{"lineNumber":142,"author":{"gitId":"TongZhengHong"},"content":" chessPiece.updatePosition(destCoor);","lastModifiedDate":"2023-10-19"},{"lineNumber":143,"author":{"gitId":"ken-ruster"},"content":" getTileAtCoor(startCoor).setTileEmpty(startCoor);","lastModifiedDate":"2023-10-20"},{"lineNumber":144,"author":{"gitId":"TongZhengHong"},"content":" getTileAtCoor(destCoor).updateTileChessPiece(chessPiece);","lastModifiedDate":"2023-10-18"},{"lineNumber":145,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":146,"author":{"gitId":"onx001"},"content":" if (move.isLeftCastling()) {","lastModifiedDate":"2023-10-19"},{"lineNumber":147,"author":{"gitId":"onx001"},"content":" Coordinate rookStartCoor \u003d new Coordinate(startCoor.getX() - 4, startCoor.getY());","lastModifiedDate":"2023-10-19"},{"lineNumber":148,"author":{"gitId":"onx001"},"content":" Coordinate rookDestCoor \u003d new Coordinate(startCoor.getX() - 1, startCoor.getY());","lastModifiedDate":"2023-10-19"},{"lineNumber":149,"author":{"gitId":"onx001"},"content":" ChessPiece rook \u003d getTileAtCoor(rookStartCoor).getChessPiece();","lastModifiedDate":"2023-10-19"},{"lineNumber":150,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":151,"author":{"gitId":"TongZhengHong"},"content":" rook.setHasMoved();","lastModifiedDate":"2023-10-22"},{"lineNumber":152,"author":{"gitId":"onx001"},"content":" rook.updatePosition(rookDestCoor);","lastModifiedDate":"2023-10-19"},{"lineNumber":153,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":154,"author":{"gitId":"ken-ruster"},"content":" getTileAtCoor(rookStartCoor).setTileEmpty(rookStartCoor);","lastModifiedDate":"2023-10-20"},{"lineNumber":155,"author":{"gitId":"onx001"},"content":" getTileAtCoor(rookDestCoor).updateTileChessPiece(rook);","lastModifiedDate":"2023-10-19"},{"lineNumber":156,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":157,"author":{"gitId":"onx001"},"content":" } else if (move.isRightCastling()) {","lastModifiedDate":"2023-10-19"},{"lineNumber":158,"author":{"gitId":"onx001"},"content":" Coordinate rookStartCoor \u003d new Coordinate(startCoor.getX() + 3, startCoor.getY());","lastModifiedDate":"2023-10-19"},{"lineNumber":159,"author":{"gitId":"onx001"},"content":" Coordinate rookDestCoor \u003d new Coordinate(startCoor.getX() + 1, startCoor.getY());","lastModifiedDate":"2023-10-19"},{"lineNumber":160,"author":{"gitId":"onx001"},"content":" ChessPiece rook \u003d getTileAtCoor(rookStartCoor).getChessPiece();","lastModifiedDate":"2023-10-19"},{"lineNumber":161,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":162,"author":{"gitId":"TongZhengHong"},"content":" rook.setHasMoved();","lastModifiedDate":"2023-10-22"},{"lineNumber":163,"author":{"gitId":"onx001"},"content":" rook.updatePosition(rookDestCoor);","lastModifiedDate":"2023-10-19"},{"lineNumber":164,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":165,"author":{"gitId":"ken-ruster"},"content":" getTileAtCoor(rookStartCoor).setTileEmpty(rookStartCoor);","lastModifiedDate":"2023-10-20"},{"lineNumber":166,"author":{"gitId":"onx001"},"content":" getTileAtCoor(rookDestCoor).updateTileChessPiece(rook);","lastModifiedDate":"2023-10-19"},{"lineNumber":167,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":168,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":169,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":170,"author":{"gitId":"ken-ruster"},"content":" public boolean canPromote(Move move) {","lastModifiedDate":"2023-10-19"},{"lineNumber":171,"author":{"gitId":"ken-ruster"},"content":" ChessPiece piece \u003d move.getPiece();","lastModifiedDate":"2023-10-19"},{"lineNumber":172,"author":{"gitId":"ken-ruster"},"content":" Coordinate endCoord \u003d move.getTo();","lastModifiedDate":"2023-10-19"},{"lineNumber":173,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":174,"author":{"gitId":"TongZhengHong"},"content":" if (!(piece instanceof Pawn)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":175,"author":{"gitId":"ken-ruster"},"content":" return false;","lastModifiedDate":"2023-10-19"},{"lineNumber":176,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":177,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":178,"author":{"gitId":"TongZhengHong"},"content":" if (Game.isPieceFriendly(piece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":179,"author":{"gitId":"TongZhengHong"},"content":" return endCoord.getY() \u003d\u003d TOP_ROW_INDEX;","lastModifiedDate":"2023-10-22"},{"lineNumber":180,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":181,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":182,"author":{"gitId":"TongZhengHong"},"content":" if (Game.isPieceOpponent(piece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":183,"author":{"gitId":"TongZhengHong"},"content":" return endCoord.getY() \u003d\u003d BOTTOM_ROW_INDEX;","lastModifiedDate":"2023-10-22"},{"lineNumber":184,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":185,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":186,"author":{"gitId":"ken-ruster"},"content":" return false;","lastModifiedDate":"2023-10-19"},{"lineNumber":187,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":188,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":189,"author":{"gitId":"antrikshdhand"},"content":" public ChessTile[][] getBoard() {","lastModifiedDate":"2023-10-19"},{"lineNumber":190,"author":{"gitId":"antrikshdhand"},"content":" return this.board;","lastModifiedDate":"2023-10-19"},{"lineNumber":191,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":192,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":193,"author":{"gitId":"TriciaBK"},"content":" public boolean isEndGame() {","lastModifiedDate":"2023-10-20"},{"lineNumber":194,"author":{"gitId":"TongZhengHong"},"content":" isWhiteKingAlive \u003d false; ","lastModifiedDate":"2023-10-22"},{"lineNumber":195,"author":{"gitId":"TongZhengHong"},"content":" isBlackKingAlive \u003d false;","lastModifiedDate":"2023-10-22"},{"lineNumber":196,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":197,"author":{"gitId":"TriciaBK"},"content":" for (int row \u003d 0; row \u003c ChessBoard.SIZE; row++) {","lastModifiedDate":"2023-10-20"},{"lineNumber":198,"author":{"gitId":"TriciaBK"},"content":" for (int col \u003d 0; col \u003c ChessBoard.SIZE; col++) {","lastModifiedDate":"2023-10-20"},{"lineNumber":199,"author":{"gitId":"TriciaBK"},"content":" Coordinate coor \u003d new Coordinate(col, row);","lastModifiedDate":"2023-10-20"},{"lineNumber":200,"author":{"gitId":"TriciaBK"},"content":" ChessPiece piece \u003d getPieceAtCoor(coor);","lastModifiedDate":"2023-10-20"},{"lineNumber":201,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":202,"author":{"gitId":"TongZhengHong"},"content":" if (piece instanceof King) {","lastModifiedDate":"2023-10-22"},{"lineNumber":203,"author":{"gitId":"TongZhengHong"},"content":" if (piece.isWhite()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":204,"author":{"gitId":"TongZhengHong"},"content":" isWhiteKingAlive \u003d true;","lastModifiedDate":"2023-10-22"},{"lineNumber":205,"author":{"gitId":"TongZhengHong"},"content":" } else if (piece.isBlack()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":206,"author":{"gitId":"TongZhengHong"},"content":" isBlackKingAlive \u003d true;","lastModifiedDate":"2023-10-22"},{"lineNumber":207,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":208,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":209,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":210,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":211,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":212,"author":{"gitId":"TongZhengHong"},"content":" return !isBlackKingAlive || !isWhiteKingAlive;","lastModifiedDate":"2023-10-22"},{"lineNumber":213,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":214,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":215,"author":{"gitId":"TongZhengHong"},"content":" public int getWinningColor() {","lastModifiedDate":"2023-10-22"},{"lineNumber":216,"author":{"gitId":"TongZhengHong"},"content":" boolean whiteWin \u003d isWhiteKingAlive \u0026\u0026 !isBlackKingAlive;","lastModifiedDate":"2023-10-22"},{"lineNumber":217,"author":{"gitId":"TongZhengHong"},"content":" boolean blackWin \u003d isBlackKingAlive \u0026\u0026 !isWhiteKingAlive;","lastModifiedDate":"2023-10-22"},{"lineNumber":218,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":219,"author":{"gitId":"TongZhengHong"},"content":" if (whiteWin) {","lastModifiedDate":"2023-10-22"},{"lineNumber":220,"author":{"gitId":"TongZhengHong"},"content":" return ChessPiece.WHITE;","lastModifiedDate":"2023-10-22"},{"lineNumber":221,"author":{"gitId":"TongZhengHong"},"content":" } else if (blackWin) {","lastModifiedDate":"2023-10-22"},{"lineNumber":222,"author":{"gitId":"TongZhengHong"},"content":" return ChessPiece.BLACK;","lastModifiedDate":"2023-10-22"},{"lineNumber":223,"author":{"gitId":"TriciaBK"},"content":" } else {","lastModifiedDate":"2023-10-20"},{"lineNumber":224,"author":{"gitId":"TongZhengHong"},"content":" return -1;","lastModifiedDate":"2023-10-22"},{"lineNumber":225,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":226,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":227,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":26,"antrikshdhand":11,"TriciaBK":20,"onx001":23,"TongZhengHong":147}},{"path":"src/main/java/chessmaster/game/ChessTile.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.game;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.pieces.EmptyPiece;","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.Pawn;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"public class ChessTile {","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" public static final String TILE_DIVIDER \u003d \"|\";","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" private static final String EMPTY_TILE_STRING \u003d \" \";","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" /** Nullable ChessPiece object. Null signifies that this tile is empty */","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" private ChessPiece chessPiece;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"ken-ruster"},"content":" public ChessTile(Coordinate coor) {","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"ken-ruster"},"content":" chessPiece \u003d new EmptyPiece(coor.getX(),coor.getY(), ChessPiece.BLACK);","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" public ChessTile(ChessPiece piece) {","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" chessPiece \u003d piece;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" return chessPiece.isEmptyPiece();","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"ken-ruster"},"content":" public void setTileEmpty(Coordinate coor) {","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"ken-ruster"},"content":" chessPiece \u003d new EmptyPiece(coor.getX(),coor.getY(), ChessPiece.BLACK);","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" * Updates the ChessTile with a new ChessPiece, considering piece interactions. \u003cBR\u003e","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" * 1. Replace the new piece on an EMPTY tile. \u003cBR\u003e","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" * 2. Cannot capture a friendly piece; no change is made UNLESS it is for promotion. \u003cBR\u003e","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" * 3. If new piece captures the opponent piece, mark the opponent piece as captured and replace it. \u003cBR\u003e","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" * @param newPiece The new ChessPiece to place on the tile.","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" public void updateTileChessPiece(ChessPiece newPiece) {","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":" if (chessPiece.isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":" // Move newPiece to empty tile","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" chessPiece \u003d newPiece;","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" } ","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" if (newPiece.isFriendly(chessPiece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" // Only update if friendly pawn piece is promoting","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" if (chessPiece instanceof Pawn \u0026\u0026 newPiece.isPromotionPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" chessPiece \u003d newPiece;","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" return; // Cannot capture friendly piece","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" } ","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":" if (newPiece.isOpponent(chessPiece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" // Mark opponent piece as captured","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" chessPiece.setIsCaptured();","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" chessPiece \u003d newPiece;","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"TongZhengHong"},"content":" public ChessPiece getChessPiece() {","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"TongZhengHong"},"content":" return chessPiece;","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"TongZhengHong"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"TongZhengHong"},"content":" String tileContent \u003d isEmpty() ? EMPTY_TILE_STRING : chessPiece.toString();","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"TongZhengHong"},"content":" return String.format(\"%s %s \", TILE_DIVIDER, tileContent);","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":5,"TongZhengHong":64}},{"path":"src/main/java/chessmaster/game/Coordinate.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.game;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.exceptions.ParseCoordinateException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"public class Coordinate {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":" private static final String BOARD_COLUMNS \u003d \"abcdefgh\";","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" private int x;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" private int y;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" public Coordinate(int x, int y) {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" if (isCoorOutofBoard(x, y)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" this.x \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" this.y \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" return;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" this.x \u003d x;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" this.y \u003d y;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" public int getX() {","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" return x;","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" public int getY() {","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" return y;","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" public static boolean isCoorOutofBoard(int x, int y) {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" return (x \u003c 0 || x \u003e\u003d ChessBoard.SIZE) || (y \u003c 0 || y \u003e\u003d ChessBoard.SIZE);","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" * Checks if applying a given offset from the current position stays within the","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" * bounds of the chessboard.","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":" * @param offsetX The horizontal offset to apply.","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":" * @param offsetY The vertical offset to apply.","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" * @return true if the resulting position is within the board boundaries;","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" * otherwise, false.","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" public boolean isOffsetWithinBoard(int offsetX, int offsetY) {","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" int newX \u003d x + offsetX;","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" int newY \u003d y + offsetY;","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" return (newX \u003e\u003d 0 \u0026\u0026 newX \u003c ChessBoard.SIZE) \u0026\u0026","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" (newY \u003e\u003d 0 \u0026\u0026 newY \u003c ChessBoard.SIZE);","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":" * Adds the given offsets to the current coordinate and returns the new","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" * coordinate.","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" * @param offsetX The horizontal offset to apply.","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" * @param offsetY The vertical offset to apply.","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":" * @return A new coordinate after applying the offsets, or the current","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"TongZhengHong"},"content":" * coordinate","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"TongZhengHong"},"content":" * if the new position is out of the board boundaries.","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"TongZhengHong"},"content":" public Coordinate addOffsetToCoordinate(int offsetX, int offsetY) {","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"TongZhengHong"},"content":" int newX \u003d x + offsetX;","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"TongZhengHong"},"content":" int newY \u003d y + offsetY;","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"TongZhengHong"},"content":" if (isCoorOutofBoard(newX, newY)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"TongZhengHong"},"content":" return new Coordinate(x, y);","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"TongZhengHong"},"content":" return new Coordinate(newX, newY);","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"TongZhengHong"},"content":" * Parses an algebraic chess coordinate notation (e.g., \"a1\") and returns a","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"TongZhengHong"},"content":" * Coordinate object.","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"TongZhengHong"},"content":" * @param notation The algebraic coordinate notation to parse.","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"TongZhengHong"},"content":" * @return A Coordinate object representing the parsed chess coordinate.","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"TongZhengHong"},"content":" * @throws ParseCoordinateException If the input notation is invalid or out of","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"TongZhengHong"},"content":" * bounds.","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"TongZhengHong"},"content":" public static Coordinate parseAlgebraicCoor(String notation) throws ParseCoordinateException {","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"TongZhengHong"},"content":" notation \u003d notation.toLowerCase();","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"TongZhengHong"},"content":" if (notation.length() !\u003d 2) {","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"TongZhengHong"},"content":" throw new ParseCoordinateException();","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"TongZhengHong"},"content":" String colString \u003d Character.toString(notation.charAt(0));","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"TongZhengHong"},"content":" boolean isColValid \u003d BOARD_COLUMNS.contains(colString);","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"TongZhengHong"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"TongZhengHong"},"content":" String rowString \u003d String.valueOf(notation.charAt(1));","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"TongZhengHong"},"content":" int rowInt \u003d Integer.parseInt(String.valueOf(rowString));","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"TongZhengHong"},"content":" if (rowInt \u003c 1 || rowInt \u003e ChessBoard.SIZE || !isColValid) {","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"TongZhengHong"},"content":" throw new ParseCoordinateException();","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"TongZhengHong"},"content":" int indexX \u003d BOARD_COLUMNS.indexOf(colString); ","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"TongZhengHong"},"content":" int indexY \u003d (rowInt - 8) * -1;","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"TongZhengHong"},"content":" return new Coordinate(indexX, indexY);","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"TongZhengHong"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"TongZhengHong"},"content":" throw new ParseCoordinateException();","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"TongZhengHong"},"content":" public int[] calculateOffsetFrom(Coordinate otherCoordinate) {","lastModifiedDate":"2023-10-22"},{"lineNumber":110,"author":{"gitId":"TongZhengHong"},"content":" int offsetX \u003d this.x - otherCoordinate.getX();","lastModifiedDate":"2023-10-22"},{"lineNumber":111,"author":{"gitId":"TongZhengHong"},"content":" int offsetY \u003d this.y - otherCoordinate.getY();","lastModifiedDate":"2023-10-22"},{"lineNumber":112,"author":{"gitId":"TongZhengHong"},"content":" return new int[]{ offsetX, offsetY };","lastModifiedDate":"2023-10-22"},{"lineNumber":113,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"onx001"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"onx001"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"onx001"},"content":" return String.format(\"%s%d\", BOARD_COLUMNS.charAt(x), (ChessBoard.SIZE - y));","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":119,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":120,"author":{"gitId":"onx001"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"onx001"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"onx001"},"content":" if (obj instanceof Coordinate) {","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"onx001"},"content":" Coordinate other \u003d (Coordinate) obj;","lastModifiedDate":"2023-10-16"},{"lineNumber":124,"author":{"gitId":"onx001"},"content":" return x \u003d\u003d other.x \u0026\u0026 y \u003d\u003d other.y;","lastModifiedDate":"2023-10-16"},{"lineNumber":125,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":126,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":127,"author":{"gitId":"onx001"},"content":" return false;","lastModifiedDate":"2023-10-16"},{"lineNumber":128,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":129,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":130,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"onx001":15,"TongZhengHong":115}},{"path":"src/main/java/chessmaster/game/Game.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"antrikshdhand"},"content":"package chessmaster.game;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.commands.AbortCommand;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.commands.Command;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.commands.CommandResult;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.commands.MoveCommand;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.exceptions.ChessMasterException;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.ui.TextUI;","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.user.CPU;","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.user.Human;","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.user.Player;","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"antrikshdhand"},"content":"public class Game {","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" private static int playerColor; ","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"antrikshdhand"},"content":" private Human human;","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"antrikshdhand"},"content":" private CPU cpu;","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"antrikshdhand"},"content":" private ChessBoard board;","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" private Command command;","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" private boolean hasEnded;","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":" public Game(int playerColour, String filePath) {","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" Game.playerColor \u003d playerColour;","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" this.board \u003d new ChessBoard(playerColour);","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" this.human \u003d new Human(playerColour, board);","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" int cpuColor \u003d ChessPiece.getOppositeColour(playerColour);","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" this.cpu \u003d new CPU(cpuColor, board);","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"antrikshdhand"},"content":" public void run() {","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" board.showChessBoard();","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" while (!hasEnded \u0026\u0026 !AbortCommand.isAbortCommand(command)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" String userInputString \u003d TextUI.getUserInput();","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" command \u003d Parser.parseCommand(userInputString);","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" CommandResult result \u003d command.execute();","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" TextUI.printCommandResult(result);","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" if (!(command instanceof MoveCommand)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" continue; // Take new user command","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" // Input string contains 2 valid coordinates","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" Move humanMove \u003d Parser.parseMove(userInputString, board);","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" hasEnded \u003d processMove(humanMove, human);","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" if (!hasEnded) {","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" if (board.canPromote(humanMove)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" human.handlePromote(board, humanMove);","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"TongZhengHong"},"content":" Move cpuMove \u003d cpu.getRandomMove(board);","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"TongZhengHong"},"content":" processMove(cpuMove, cpu);","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"antrikshdhand"},"content":" board.showChessBoard();","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"TongZhengHong"},"content":" } catch (ChessMasterException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"TongZhengHong"},"content":" TextUI.printErrorMessage(e);","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"antrikshdhand"},"content":" ","lastModifiedDate":"2023-10-19"},{"lineNumber":68,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":69,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"TongZhengHong"},"content":" private boolean processMove(Move move, Player player) throws ChessMasterException {","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"TongZhengHong"},"content":" board.executeMove(move);","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"TongZhengHong"},"content":" player.addMove(move);","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":75,"author":{"gitId":"TongZhengHong"},"content":" boolean end \u003d board.isEndGame();","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"TongZhengHong"},"content":" if (end) {","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"TongZhengHong"},"content":" int winningColor \u003d board.getWinningColor();","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"TongZhengHong"},"content":" TextUI.printWinnerMessage(winningColor);","lastModifiedDate":"2023-10-22"},{"lineNumber":79,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":80,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":81,"author":{"gitId":"TongZhengHong"},"content":" return end;","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":83,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"TongZhengHong"},"content":" public static boolean isPieceFriendly(ChessPiece otherPiece) {","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"TongZhengHong"},"content":" return Game.playerColor \u003d\u003d otherPiece.getColour();","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":87,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"TongZhengHong"},"content":" public static boolean isPieceOpponent(ChessPiece otherPiece) {","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"TongZhengHong"},"content":" return Game.playerColor !\u003d otherPiece.getColour();","lastModifiedDate":"2023-10-22"},{"lineNumber":90,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":91,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":92,"author":{"gitId":"antrikshdhand"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"antrikshdhand":26,"TriciaBK":1,"TongZhengHong":65}},{"path":"src/main/java/chessmaster/game/Move.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ken-ruster"},"content":"package chessmaster.game;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.King;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ken-ruster"},"content":"public class Move {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ken-ruster"},"content":" private Coordinate from;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"ken-ruster"},"content":" private Coordinate to;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"ken-ruster"},"content":" private ChessPiece piece;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ken-ruster"},"content":" public Move(Coordinate from, Coordinate to, ChessPiece piece) {","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"ken-ruster"},"content":" this.from \u003d from;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"ken-ruster"},"content":" this.to \u003d to;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ken-ruster"},"content":" this.piece \u003d piece;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ken-ruster"},"content":" public Coordinate getFrom() {","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"ken-ruster"},"content":" return from;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"ken-ruster"},"content":" public Coordinate getTo() {","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"ken-ruster"},"content":" return to;","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ken-ruster"},"content":" public ChessPiece getPiece() {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ken-ruster"},"content":" return piece;","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"antrikshdhand"},"content":" public void setFrom(Coordinate from) {","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"antrikshdhand"},"content":" this.from \u003d from;","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"antrikshdhand"},"content":" public void setTo(Coordinate to) {","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"antrikshdhand"},"content":" this.to \u003d to;","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"antrikshdhand"},"content":" public void setPiece(ChessPiece piece) {","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"antrikshdhand"},"content":" this.piece \u003d piece;","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" public boolean isValid(Coordinate[][] possibleCoordinates) {","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" for (Coordinate[] direction : possibleCoordinates) {","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" for (Coordinate coor : direction) {","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" if (coor.equals(to)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" return true;","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" return false;","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"onx001"},"content":" public boolean isLeftCastling() {","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" if (!(piece instanceof King)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"TongZhengHong"},"content":" int[] offset \u003d to.calculateOffsetFrom(from);","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"TongZhengHong"},"content":" return Arrays.equals(offset, ChessPiece.CASTLE_LEFT);","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"onx001"},"content":" public boolean isRightCastling() {","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"TongZhengHong"},"content":" if (!(piece instanceof King)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"TongZhengHong"},"content":" return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"TongZhengHong"},"content":" int[] offset \u003d to.calculateOffsetFrom(from);","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"TongZhengHong"},"content":" return Arrays.equals(offset, ChessPiece.CASTLE_RIGHT);","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":71,"author":{"gitId":"ken-ruster"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"ken-ruster":27,"antrikshdhand":12,"onx001":6,"TongZhengHong":26}},{"path":"src/main/java/chessmaster/parser/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.commands.AbortCommand;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.commands.Command;","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.commands.HelpCommand;","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.commands.MoveCommand;","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.exceptions.MoveOpponentPieceException;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.exceptions.NullPieceException;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.exceptions.ParseColorException;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.exceptions.ParseCoordinateException;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Game;","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.Move;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.Bishop;","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.EmptyPiece;","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.King;","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.Knight;","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.Pawn;","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.Queen;","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.Rook;","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":"public class Parser {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":" private static final String ABORT_COMMAND \u003d \"abort\";","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"onx001"},"content":" public Parser() {","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" public static boolean isUserInputAbort(String userInput) {","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" return userInput.trim().toLowerCase().equals(ABORT_COMMAND);","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"ken-ruster"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" * Parses a string telling which chess piece the user wants to promote his piece","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" * to, and promotes the relevant piece","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"ken-ruster"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"ken-ruster"},"content":" * @param promoteFrom Chess piece to be promoted.","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"ken-ruster"},"content":" * @param promoteTo String representing the type of piece to be promoted to.","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"ken-ruster"},"content":" * @return Promoted chess piece.","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"ken-ruster"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"ken-ruster"},"content":" public static ChessPiece parsePromote(ChessPiece promoteFrom, String promoteTo) {","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"ken-ruster"},"content":" int colour \u003d promoteFrom.getColour();","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"ken-ruster"},"content":" Coordinate position \u003d promoteFrom.getPosition();","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" switch (promoteTo) {","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"ken-ruster"},"content":" case Bishop.BISHOP_WHITE:","lastModifiedDate":"2023-10-19"},{"lineNumber":49,"author":{"gitId":"ken-ruster"},"content":" return new Bishop(position.getY(), position.getX(), colour);","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"ken-ruster"},"content":" case Queen.QUEEN_WHITE:","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"ken-ruster"},"content":" return new Queen(position.getY(), position.getX(), colour);","lastModifiedDate":"2023-10-19"},{"lineNumber":52,"author":{"gitId":"ken-ruster"},"content":" case Knight.KNIGHT_WHITE:","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"ken-ruster"},"content":" return new Knight(position.getY(), position.getX(), colour);","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"ken-ruster"},"content":" case Rook.ROOK_WHITE:","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"ken-ruster"},"content":" return new Rook(position.getY(), position.getX(), colour);","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"ken-ruster"},"content":" default:","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"ken-ruster"},"content":" return promoteFrom;","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"ken-ruster"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"TongZhengHong"},"content":" * Parses a chess move from user input and creates a Move object. Used to read","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"TongZhengHong"},"content":" * user inputs during the chess game.","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"ken-ruster"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"TongZhengHong"},"content":" * @param in The user input string with 2 algebraic coordinate notations","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"TongZhengHong"},"content":" * (e.g., \"e2 e4\").","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"TongZhengHong"},"content":" * @param board The ChessBoard where the move is taking place.","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"TongZhengHong"},"content":" * @return Move object containing information about the move to be made.","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"ken-ruster"},"content":" * ","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"TongZhengHong"},"content":" * @throws ParseCoordinateException If the string entered is not in the","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"TongZhengHong"},"content":" * algebraic coordinate notation.","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"TongZhengHong"},"content":" * @throws NullPieceException If there is no piece at the \u0027from\u0027","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"TongZhengHong"},"content":" * coordinate.","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"TongZhengHong"},"content":" * @throws MoveOpponentPieceException","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"ken-ruster"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"TongZhengHong"},"content":" public static Move parseMove(String in, ChessBoard board) throws ParseCoordinateException, ","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"TongZhengHong"},"content":" NullPieceException, MoveOpponentPieceException {","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-22"},{"lineNumber":79,"author":{"gitId":"TongZhengHong"},"content":" String[] parseArray \u003d in.split(\"\\\\s+\", 2);","lastModifiedDate":"2023-10-22"},{"lineNumber":80,"author":{"gitId":"TongZhengHong"},"content":" if (parseArray.length \u003c 2) {","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"TongZhengHong"},"content":" throw new ParseCoordinateException();","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"TongZhengHong"},"content":" Coordinate from \u003d Coordinate.parseAlgebraicCoor(parseArray[0]);","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"TongZhengHong"},"content":" Coordinate to \u003d Coordinate.parseAlgebraicCoor(parseArray[1]);","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"ken-ruster"},"content":" ChessPiece relevantPiece \u003d board.getPieceAtCoor(from);","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"TongZhengHong"},"content":" if (Game.isPieceOpponent(relevantPiece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"TongZhengHong"},"content":" throw new MoveOpponentPieceException();","lastModifiedDate":"2023-10-22"},{"lineNumber":90,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"ken-ruster"},"content":" return new Move(from, to, relevantPiece);","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"TongZhengHong"},"content":" * Parses an input string and creates a ChessPiece object at the specified row","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"TongZhengHong"},"content":" * and column. Used for loading ChessPiece(s) from storage file or loading","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"TongZhengHong"},"content":" * starting ChessBoard. Returns null for recognised input string to signify that","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"TongZhengHong"},"content":" * piece is empty (for ChessTile)","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"TongZhengHong"},"content":" * @param pieceString The string representation of the chess piece, e.g., \"bB\"","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"TongZhengHong"},"content":" * for black bishop.","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"TongZhengHong"},"content":" * @param row The row where the piece is located.","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"TongZhengHong"},"content":" * @param col The column where the piece is located.","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"TongZhengHong"},"content":" * @return A ChessPiece object representing the parsed chess piece, or null if","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"TongZhengHong"},"content":" * the pieceString is not recognized.","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"TongZhengHong"},"content":" public static ChessPiece parseChessPiece(String pieceString, int row, int col) {","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"TongZhengHong"},"content":" switch (pieceString) {","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"TongZhengHong"},"content":" case Bishop.BISHOP_BLACK:","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"TongZhengHong"},"content":" return new Bishop(row, col, ChessPiece.BLACK);","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"TongZhengHong"},"content":" case Bishop.BISHOP_WHITE:","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"TongZhengHong"},"content":" return new Bishop(row, col, ChessPiece.WHITE);","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"TongZhengHong"},"content":" case King.KING_BLACK:","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"TongZhengHong"},"content":" return new King(row, col, ChessPiece.BLACK);","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"TongZhengHong"},"content":" case King.KING_WHITE:","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"TongZhengHong"},"content":" return new King(row, col, ChessPiece.WHITE);","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"TongZhengHong"},"content":" case Queen.QUEEN_BLACK:","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"TongZhengHong"},"content":" return new Queen(row, col, ChessPiece.BLACK);","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"TongZhengHong"},"content":" case Queen.QUEEN_WHITE:","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"TongZhengHong"},"content":" return new Queen(row, col, ChessPiece.WHITE);","lastModifiedDate":"2023-10-15"},{"lineNumber":122,"author":{"gitId":"TongZhengHong"},"content":" case Knight.KNIGHT_BLACK:","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"TongZhengHong"},"content":" return new Knight(row, col, ChessPiece.BLACK);","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"TongZhengHong"},"content":" case Knight.KNIGHT_WHITE:","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"TongZhengHong"},"content":" return new Knight(row, col, ChessPiece.WHITE);","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"TongZhengHong"},"content":" case Pawn.PAWN_BLACK:","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"TongZhengHong"},"content":" return new Pawn(row, col, ChessPiece.BLACK);","lastModifiedDate":"2023-10-15"},{"lineNumber":128,"author":{"gitId":"TongZhengHong"},"content":" case Pawn.PAWN_WHITE:","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"TongZhengHong"},"content":" return new Pawn(row, col, ChessPiece.WHITE);","lastModifiedDate":"2023-10-15"},{"lineNumber":130,"author":{"gitId":"TongZhengHong"},"content":" case Rook.ROOK_BLACK:","lastModifiedDate":"2023-10-15"},{"lineNumber":131,"author":{"gitId":"TongZhengHong"},"content":" return new Rook(row, col, ChessPiece.BLACK);","lastModifiedDate":"2023-10-15"},{"lineNumber":132,"author":{"gitId":"TongZhengHong"},"content":" case Rook.ROOK_WHITE:","lastModifiedDate":"2023-10-15"},{"lineNumber":133,"author":{"gitId":"TongZhengHong"},"content":" return new Rook(row, col, ChessPiece.WHITE);","lastModifiedDate":"2023-10-15"},{"lineNumber":134,"author":{"gitId":"TongZhengHong"},"content":" default:","lastModifiedDate":"2023-10-15"},{"lineNumber":135,"author":{"gitId":"ken-ruster"},"content":" return new EmptyPiece(row, col, ChessPiece.WHITE);","lastModifiedDate":"2023-10-20"},{"lineNumber":136,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":137,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":138,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":139,"author":{"gitId":"TongZhengHong"},"content":" public static Command parseCommand(String in) {","lastModifiedDate":"2023-10-22"},{"lineNumber":140,"author":{"gitId":"TongZhengHong"},"content":" String[] splitInputStrings \u003d in.split(\"\\\\s+\", 2);","lastModifiedDate":"2023-10-22"},{"lineNumber":141,"author":{"gitId":"TongZhengHong"},"content":" String commandString \u003d splitInputStrings[0];","lastModifiedDate":"2023-10-22"},{"lineNumber":142,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":143,"author":{"gitId":"TongZhengHong"},"content":" switch (commandString) {","lastModifiedDate":"2023-10-22"},{"lineNumber":144,"author":{"gitId":"TongZhengHong"},"content":" case HelpCommand.HELP_COMAMND_STRING:","lastModifiedDate":"2023-10-22"},{"lineNumber":145,"author":{"gitId":"onx001"},"content":" return new HelpCommand();","lastModifiedDate":"2023-10-19"},{"lineNumber":146,"author":{"gitId":"TongZhengHong"},"content":" case AbortCommand.ABORT_COMAMND_STRING:","lastModifiedDate":"2023-10-22"},{"lineNumber":147,"author":{"gitId":"onx001"},"content":" return new AbortCommand();","lastModifiedDate":"2023-10-19"},{"lineNumber":148,"author":{"gitId":"onx001"},"content":" default:","lastModifiedDate":"2023-10-19"},{"lineNumber":149,"author":{"gitId":"TongZhengHong"},"content":" return new MoveCommand(in);","lastModifiedDate":"2023-10-22"},{"lineNumber":150,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":151,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":152,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":153,"author":{"gitId":"TongZhengHong"},"content":" public static int parsePlayerColor(String inputColorString) throws ParseColorException {","lastModifiedDate":"2023-10-22"},{"lineNumber":154,"author":{"gitId":"TongZhengHong"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":155,"author":{"gitId":"TongZhengHong"},"content":" return Integer.parseInt(inputColorString);","lastModifiedDate":"2023-10-22"},{"lineNumber":156,"author":{"gitId":"TongZhengHong"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":157,"author":{"gitId":"TongZhengHong"},"content":" throw new ParseColorException();","lastModifiedDate":"2023-10-22"},{"lineNumber":158,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":159,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":160,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":38,"antrikshdhand":1,"onx001":11,"TongZhengHong":110}},{"path":"src/main/java/chessmaster/pieces/Bishop.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.pieces;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"public class Bishop extends ChessPiece {","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" public static final String BISHOP_WHITE \u003d \"b\"; // ♗","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" public static final String BISHOP_BLACK \u003d \"B\"; // ♝","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" public static final int[][] DIRECTIONS \u003d {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" UP_LEFT, UP_RIGHT, DOWN_LEFT, DOWN_RIGHT,","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" };","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" public Bishop(int row, int col, int color) {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" super(row, col, color);","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"ken-ruster"},"content":" public Coordinate[][] getAvailableCoordinates(ChessBoard board) {","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" Coordinate[][] result \u003d new Coordinate[DIRECTIONS.length][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" for (int dir \u003d 0; dir \u003c DIRECTIONS.length; dir++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" int offsetX \u003d DIRECTIONS[dir][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":" int offsetY \u003d DIRECTIONS[dir][1];","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" int multiplier \u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"onx001"},"content":" boolean isBlocked \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" ArrayList\u003cCoordinate\u003e possibleCoordInDirection \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" while (!isBlocked \u0026\u0026 multiplier \u003c ChessBoard.SIZE \u0026\u0026 position.isOffsetWithinBoard(offsetX, offsetY)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" Coordinate possibleCoord \u003d position.addOffsetToCoordinate(offsetX, offsetY);","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"ken-ruster"},"content":" ChessPiece destPiece \u003d board.getPieceAtCoor(possibleCoord);","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" isBlocked \u003d !destPiece.isEmptyPiece();","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" if (destPiece.isEmptyPiece() || isOpponent(destPiece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"onx001"},"content":" possibleCoordInDirection.add(possibleCoord);","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"onx001"},"content":" } ","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" multiplier++;","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" offsetX \u003d DIRECTIONS[dir][0] * multiplier;","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" offsetY \u003d DIRECTIONS[dir][1] * multiplier;","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" // Convert arraylist to array","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d possibleCoordInDirection.toArray(new Coordinate[0]);","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" return result;","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" return color \u003d\u003d ChessPiece.BLACK ? BISHOP_BLACK : BISHOP_WHITE;","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":2,"onx001":3,"TongZhengHong":52}},{"path":"src/main/java/chessmaster/pieces/ChessPiece.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.pieces;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"onx001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"public abstract class ChessPiece {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" public static final int BLACK \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" public static final int WHITE \u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" public static final int[] CASTLE_LEFT \u003d {-2, 0};","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" public static final int[] CASTLE_RIGHT \u003d {2, 0};","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] UP_UP_LEFT \u003d {1, -2}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] UP_UP_RIGHT \u003d {-1, -2}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] DOWN_DOWN_LEFT \u003d {1, 2}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] DOWN_DOWN_RIGHT \u003d {-1, 2}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] LEFT_UP_LEFT \u003d {2, -1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] LEFT_DOWN_LEFT \u003d {2, 1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] RIGHT_UP_RIGHT \u003d {-2, -1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] RIGHT_DOWN_RIGHT \u003d {-2, 1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] UP_UP \u003d {0, -2}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"onx001"},"content":" protected static final int[] DOWN_DOWN \u003d {0, 2};","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] UP \u003d {0, -1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] DOWN \u003d {0, 1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] LEFT \u003d {1, 0};","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] RIGHT \u003d {-1, 0};","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] UP_LEFT \u003d {1, -1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] UP_RIGHT \u003d {-1, -1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] DOWN_LEFT \u003d {1, 1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] DOWN_RIGHT \u003d {-1, 1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" protected int color;","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" protected Coordinate position;","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"onx001"},"content":" protected Coordinate[][] availableCoordinates;","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"onx001"},"content":" protected boolean hasMoved \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" protected boolean isCaptured \u003d false;","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" public ChessPiece(int row, int col, int color) {","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" this.position \u003d new Coordinate(col, row);","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" this.color \u003d color;","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" * Returns available coordinates in multiple directions from the current position. ","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" * The directions are dependent on the chess piece type. Each inner array stores the coordinates that is","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" * in the direction the current chess piece can move to.","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":" * @return A 2D array of Coordinate arrays representing available coordinates in different directions.","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"ken-ruster"},"content":" public abstract Coordinate[][] getAvailableCoordinates(ChessBoard board);","lastModifiedDate":"2023-10-20"},{"lineNumber":56,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"ken-ruster"},"content":" public Coordinate[] getFlattenedCoordinates(ChessBoard board) {","lastModifiedDate":"2023-10-20"},{"lineNumber":58,"author":{"gitId":"antrikshdhand"},"content":" Coordinate[][] availableCoordinates \u003d getAvailableCoordinates(board);","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"antrikshdhand"},"content":" ArrayList\u003cCoordinate\u003e flattenedCoordinates \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-19"},{"lineNumber":60,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"antrikshdhand"},"content":" for (Coordinate[] direction : availableCoordinates) {","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"antrikshdhand"},"content":" for (Coordinate possibleCoord : direction) {","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"antrikshdhand"},"content":" if (this.isMoveValid(possibleCoord, board)){","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"antrikshdhand"},"content":" flattenedCoordinates.add(possibleCoord);","lastModifiedDate":"2023-10-19"},{"lineNumber":65,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":68,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":69,"author":{"gitId":"antrikshdhand"},"content":" return flattenedCoordinates.toArray(new Coordinate[0]);","lastModifiedDate":"2023-10-19"},{"lineNumber":70,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":71,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":72,"author":{"gitId":"onx001"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"onx001"},"content":" * Returns the validity of the move to the destination coordinate.","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"onx001"},"content":" * @param destination","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"onx001"},"content":" * @param board","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"onx001"},"content":" * @return","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"onx001"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"ken-ruster"},"content":" public boolean isMoveValid(Coordinate destination, ChessBoard board){","lastModifiedDate":"2023-10-20"},{"lineNumber":79,"author":{"gitId":"onx001"},"content":" Coordinate[][] availableCoordinates \u003d getAvailableCoordinates(board);","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"onx001"},"content":" for (Coordinate[] direction : availableCoordinates) {","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"onx001"},"content":" for (Coordinate possibleCoord : direction) {","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"onx001"},"content":" if (possibleCoord.equals(destination)) {","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"ken-ruster"},"content":" ChessPiece destPiece \u003d board.getPieceAtCoor(destination);","lastModifiedDate":"2023-10-20"},{"lineNumber":84,"author":{"gitId":"TongZhengHong"},"content":" if (destPiece.isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"onx001"},"content":" return true;","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"onx001"},"content":" } else if (destPiece.getColour() !\u003d this.color) {","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"onx001"},"content":" return true;","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"onx001"},"content":" return false;","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"ken-ruster"},"content":" public void displayAvailableCoordinates(ChessBoard board) {","lastModifiedDate":"2023-10-20"},{"lineNumber":96,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"onx001"},"content":" System.out.println(\"Available coordinates for \" + this.getClass().getSimpleName() + \" at \" + position + \":\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"onx001"},"content":" Coordinate[][] availableCoordinates \u003d getAvailableCoordinates(board);","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"onx001"},"content":" for (Coordinate[] direction : availableCoordinates) {","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"onx001"},"content":" for (Coordinate possibleCoord : direction) {","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"onx001"},"content":" if (this.isMoveValid(possibleCoord, board)){","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"onx001"},"content":" System.out.print(possibleCoord + \" \");","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"onx001"},"content":" System.out.println();","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":110,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":111,"author":{"gitId":"onx001"},"content":" public int getColour() {","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"onx001"},"content":" return color \u003d\u003d BLACK ? ChessPiece.BLACK : ChessPiece.WHITE;","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"ken-ruster"},"content":" public Coordinate getPosition() {","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"ken-ruster"},"content":" return this.position;","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"TriciaBK"},"content":" public void updatePosition(Coordinate newCoordinate){","lastModifiedDate":"2023-10-18"},{"lineNumber":120,"author":{"gitId":"TriciaBK"},"content":" this.position \u003d newCoordinate;","lastModifiedDate":"2023-10-18"},{"lineNumber":121,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":123,"author":{"gitId":"TongZhengHong"},"content":" public void setHasMoved() {","lastModifiedDate":"2023-10-22"},{"lineNumber":124,"author":{"gitId":"TongZhengHong"},"content":" this.hasMoved \u003d true;","lastModifiedDate":"2023-10-22"},{"lineNumber":125,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":126,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":127,"author":{"gitId":"onx001"},"content":" public boolean getHasMoved() {","lastModifiedDate":"2023-10-19"},{"lineNumber":128,"author":{"gitId":"onx001"},"content":" return this.hasMoved;","lastModifiedDate":"2023-10-19"},{"lineNumber":129,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":130,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":131,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-22"},{"lineNumber":132,"author":{"gitId":"TongZhengHong"},"content":" public String toString() {","lastModifiedDate":"2023-10-22"},{"lineNumber":133,"author":{"gitId":"TongZhengHong"},"content":" return \"ChessPiece [color\u003d\" + color + \", position\u003d\" + position + \"]\";","lastModifiedDate":"2023-10-22"},{"lineNumber":134,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":135,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":136,"author":{"gitId":"TongZhengHong"},"content":" protected int getColor(){","lastModifiedDate":"2023-10-22"},{"lineNumber":137,"author":{"gitId":"TongZhengHong"},"content":" return color;","lastModifiedDate":"2023-10-22"},{"lineNumber":138,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":139,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":140,"author":{"gitId":"TongZhengHong"},"content":" public boolean getIsCaptured() {","lastModifiedDate":"2023-10-22"},{"lineNumber":141,"author":{"gitId":"TongZhengHong"},"content":" return this.isCaptured;","lastModifiedDate":"2023-10-22"},{"lineNumber":142,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":143,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":144,"author":{"gitId":"TongZhengHong"},"content":" public void setIsCaptured() {","lastModifiedDate":"2023-10-22"},{"lineNumber":145,"author":{"gitId":"TongZhengHong"},"content":" this.isCaptured \u003d true;","lastModifiedDate":"2023-10-22"},{"lineNumber":146,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":147,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":148,"author":{"gitId":"TongZhengHong"},"content":" public static int getOppositeColour(int playerColour) {","lastModifiedDate":"2023-10-22"},{"lineNumber":149,"author":{"gitId":"TongZhengHong"},"content":" if (playerColour \u003d\u003d ChessPiece.WHITE) {","lastModifiedDate":"2023-10-22"},{"lineNumber":150,"author":{"gitId":"TongZhengHong"},"content":" return ChessPiece.BLACK;","lastModifiedDate":"2023-10-22"},{"lineNumber":151,"author":{"gitId":"TongZhengHong"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":152,"author":{"gitId":"TongZhengHong"},"content":" return ChessPiece.WHITE;","lastModifiedDate":"2023-10-22"},{"lineNumber":153,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":154,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":155,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":156,"author":{"gitId":"TongZhengHong"},"content":" public boolean isSameColorAs(int color) {","lastModifiedDate":"2023-10-22"},{"lineNumber":157,"author":{"gitId":"TongZhengHong"},"content":" if (isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":158,"author":{"gitId":"TongZhengHong"},"content":" return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":159,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":160,"author":{"gitId":"TongZhengHong"},"content":" return this.color \u003d\u003d color;","lastModifiedDate":"2023-10-22"},{"lineNumber":161,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":162,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":163,"author":{"gitId":"TongZhengHong"},"content":" public boolean isWhite() {","lastModifiedDate":"2023-10-22"},{"lineNumber":164,"author":{"gitId":"TongZhengHong"},"content":" if (isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":165,"author":{"gitId":"TongZhengHong"},"content":" return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":166,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":167,"author":{"gitId":"TongZhengHong"},"content":" return this.color \u003d\u003d ChessPiece.WHITE;","lastModifiedDate":"2023-10-22"},{"lineNumber":168,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":169,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":170,"author":{"gitId":"TongZhengHong"},"content":" public boolean isBlack() {","lastModifiedDate":"2023-10-22"},{"lineNumber":171,"author":{"gitId":"TongZhengHong"},"content":" if (isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":172,"author":{"gitId":"TongZhengHong"},"content":" return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":173,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":174,"author":{"gitId":"TongZhengHong"},"content":" return this.color \u003d\u003d ChessPiece.BLACK;","lastModifiedDate":"2023-10-22"},{"lineNumber":175,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":176,"author":{"gitId":"antrikshdhand"},"content":" ","lastModifiedDate":"2023-10-19"},{"lineNumber":177,"author":{"gitId":"TongZhengHong"},"content":" public boolean isFriendly(ChessPiece chessPiece) {","lastModifiedDate":"2023-10-22"},{"lineNumber":178,"author":{"gitId":"TongZhengHong"},"content":" if (isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":179,"author":{"gitId":"TongZhengHong"},"content":" return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":180,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":181,"author":{"gitId":"TongZhengHong"},"content":" return chessPiece.color \u003d\u003d this.color;","lastModifiedDate":"2023-10-22"},{"lineNumber":182,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":183,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":184,"author":{"gitId":"TongZhengHong"},"content":" public boolean isOpponent(ChessPiece chessPiece) {","lastModifiedDate":"2023-10-22"},{"lineNumber":185,"author":{"gitId":"TongZhengHong"},"content":" if (isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":186,"author":{"gitId":"TongZhengHong"},"content":" return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":187,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":188,"author":{"gitId":"TongZhengHong"},"content":" return chessPiece.color !\u003d this.color;","lastModifiedDate":"2023-10-22"},{"lineNumber":189,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":190,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":191,"author":{"gitId":"TongZhengHong"},"content":" public boolean isEmptyPiece() {","lastModifiedDate":"2023-10-22"},{"lineNumber":192,"author":{"gitId":"TongZhengHong"},"content":" return this instanceof EmptyPiece;","lastModifiedDate":"2023-10-22"},{"lineNumber":193,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":194,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":195,"author":{"gitId":"TongZhengHong"},"content":" public boolean isPromotionPiece() {","lastModifiedDate":"2023-10-22"},{"lineNumber":196,"author":{"gitId":"TongZhengHong"},"content":" return this instanceof Queen || this instanceof Rook ","lastModifiedDate":"2023-10-22"},{"lineNumber":197,"author":{"gitId":"TongZhengHong"},"content":" || this instanceof Bishop || this instanceof Knight;","lastModifiedDate":"2023-10-22"},{"lineNumber":198,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":199,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":11,"antrikshdhand":16,"TriciaBK":4,"onx001":62,"TongZhengHong":106}},{"path":"src/main/java/chessmaster/pieces/EmptyPiece.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ken-ruster"},"content":"package chessmaster.pieces;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"ken-ruster"},"content":"public class EmptyPiece extends ChessPiece{","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" public static final String EMPTY_PIECE \u003d \".\";","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":10,"author":{"gitId":"ken-ruster"},"content":" public EmptyPiece(int row, int col, int color){","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"ken-ruster"},"content":" super(row, col, color);","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"ken-ruster"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"ken-ruster"},"content":" public Coordinate[][] getAvailableCoordinates(ChessBoard board) {","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"ken-ruster"},"content":" return new Coordinate[0][];","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"ken-ruster"},"content":" ","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"ken-ruster"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"ken-ruster":18,"TongZhengHong":1}},{"path":"src/main/java/chessmaster/pieces/King.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.pieces;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"public class King extends ChessPiece {","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":" public static final String KING_WHITE \u003d \"k\"; // ♔","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" public static final String KING_BLACK \u003d \"K\"; // ♚","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" public static final int[][] DIRECTIONS \u003d {","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"onx001"},"content":" UP, DOWN, LEFT, RIGHT, UP_LEFT, UP_RIGHT, DOWN_LEFT, DOWN_RIGHT, CASTLE_LEFT, CASTLE_RIGHT","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" };","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" public King(int row, int col, int color) {","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" super(row, col, color);","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"ken-ruster"},"content":" public Coordinate[][] getAvailableCoordinates(ChessBoard board) {","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" Coordinate[][] result \u003d new Coordinate[DIRECTIONS.length][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" for (int dir \u003d 0; dir \u003c DIRECTIONS.length; dir++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" int offsetX \u003d DIRECTIONS[dir][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" int offsetY \u003d DIRECTIONS[dir][1];","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":" if (!position.isOffsetWithinBoard(offsetX, offsetY)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" continue; // Possible coordinate out of board","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" Coordinate newCoor \u003d position.addOffsetToCoordinate(offsetX, offsetY);","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" ChessPiece destPiece \u003d board.getPieceAtCoor(newCoor);","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" if (DIRECTIONS[dir] \u003d\u003d CASTLE_LEFT) {","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"ken-ruster"},"content":" Coordinate pos1 \u003d position.addOffsetToCoordinate(-1, 0);","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"ken-ruster"},"content":" Coordinate pos2 \u003d position.addOffsetToCoordinate(-2, 0);","lastModifiedDate":"2023-10-20"},{"lineNumber":36,"author":{"gitId":"ken-ruster"},"content":" Coordinate pos3 \u003d position.addOffsetToCoordinate(-3, 0);","lastModifiedDate":"2023-10-20"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" Coordinate rookPos \u003d position.addOffsetToCoordinate(-4, 0);","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":" boolean hasRookMoved \u003d board.getPieceAtCoor(rookPos).hasMoved;","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":" boolean isSidesEmpty \u003d board.getPieceAtCoor(pos1).isEmptyPiece() ","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" \u0026\u0026 board.getPieceAtCoor(pos2).isEmptyPiece() ","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" \u0026\u0026 board.getPieceAtCoor(pos3).isEmptyPiece();","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" if (isSidesEmpty \u0026\u0026 !hasRookMoved \u0026\u0026 !hasMoved) {","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d new Coordinate[]{ newCoor };","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" } else if (DIRECTIONS[dir] \u003d\u003d CASTLE_RIGHT) {","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"ken-ruster"},"content":" Coordinate pos1 \u003d position.addOffsetToCoordinate(+1, 0);","lastModifiedDate":"2023-10-20"},{"lineNumber":50,"author":{"gitId":"ken-ruster"},"content":" Coordinate pos2 \u003d position.addOffsetToCoordinate(+2, 0);","lastModifiedDate":"2023-10-20"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" Coordinate rookPos \u003d position.addOffsetToCoordinate(+3, 0);","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":" boolean hasRookMoved \u003d board.getPieceAtCoor(rookPos).hasMoved;","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" boolean isSidesEmpty \u003d board.getPieceAtCoor(pos1).isEmptyPiece() ","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" \u0026\u0026 board.getPieceAtCoor(pos2).isEmptyPiece();","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" if (isSidesEmpty \u0026\u0026 !hasRookMoved \u0026\u0026 !hasMoved) {","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d new Coordinate[]{ newCoor };","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"TongZhengHong"},"content":" } else { // Normal or capture move","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"TongZhengHong"},"content":" if (destPiece.isEmptyPiece() || isOpponent(destPiece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d new Coordinate[] { position.addOffsetToCoordinate(offsetX, offsetY) };","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":66,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"TongZhengHong"},"content":" return result;","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"TongZhengHong"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"TongZhengHong"},"content":" return color \u003d\u003d ChessPiece.BLACK ? KING_BLACK : KING_WHITE;","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":12,"onx001":5,"TongZhengHong":59}},{"path":"src/main/java/chessmaster/pieces/Knight.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.pieces;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"public class Knight extends ChessPiece {","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":" public static final String KNIGHT_WHITE \u003d \"n\"; // ♘","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" public static final String KNIGHT_BLACK \u003d \"N\"; // ♞","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" public static final int[][] DIRECTIONS \u003d {","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" UP_UP_LEFT, UP_UP_RIGHT, DOWN_DOWN_LEFT, DOWN_DOWN_RIGHT,","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" LEFT_UP_LEFT, LEFT_DOWN_LEFT, RIGHT_UP_RIGHT, RIGHT_DOWN_RIGHT,","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" };","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" public Knight(int row, int col, int color) {","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" super(row, col, color);","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"onx001"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"onx001"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"onx001"},"content":" return color \u003d\u003d ChessPiece.BLACK ? KNIGHT_BLACK : KNIGHT_WHITE;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"ken-ruster"},"content":" public Coordinate[][] getAvailableCoordinates(ChessBoard board) {","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" Coordinate[][] result \u003d new Coordinate[DIRECTIONS.length][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" for (int dir \u003d 0; dir \u003c DIRECTIONS.length; dir++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" int offsetX \u003d DIRECTIONS[dir][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" int offsetY \u003d DIRECTIONS[dir][1];","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" if (!position.isOffsetWithinBoard(offsetX, offsetY)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" continue; // Possible coordinate out of board","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" Coordinate newCoor \u003d position.addOffsetToCoordinate(offsetX, offsetY);","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" ChessPiece destPiece \u003d board.getPieceAtCoor(newCoor);","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":" if (destPiece.isEmptyPiece() || isOpponent(destPiece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d new Coordinate[]{ newCoor };","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" return result;","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"ken-ruster"},"content":" ","lastModifiedDate":"2023-10-20"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":4,"onx001":7,"TongZhengHong":37}},{"path":"src/main/java/chessmaster/pieces/Pawn.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.pieces;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Game;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"public class Pawn extends ChessPiece {","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" public static final String PAWN_WHITE \u003d \"p\"; // ♙","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" public static final String PAWN_BLACK \u003d \"P\"; // ♟","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" public static final int[][] DIRECTIONS_UP \u003d {","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" UP_LEFT, UP_RIGHT, UP, UP_UP,","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" };","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" public static final int[][] DIRECTIONS_DOWN \u003d {","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"onx001"},"content":" DOWN_LEFT, DOWN_RIGHT, DOWN, DOWN_DOWN,","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"onx001"},"content":" };","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" protected boolean enPassed \u003d false;","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" public Pawn(int row, int col, int color) {","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" super(row, col, color);","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"ken-ruster"},"content":" public Coordinate[][] getAvailableCoordinates(ChessBoard board) {","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":" Coordinate[][] result \u003d new Coordinate[DIRECTIONS_UP.length][0];","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" int[][] directions \u003d Game.isPieceFriendly(this) ? DIRECTIONS_UP : DIRECTIONS_DOWN;","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" for (int dir \u003d 0; dir \u003c DIRECTIONS_UP.length; dir++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"ken-ruster"},"content":" int offsetX \u003d directions[dir][0];","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"ken-ruster"},"content":" int offsetY \u003d directions[dir][1];","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" if (!position.isOffsetWithinBoard(offsetX, offsetY)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" continue; // Possible coordinate out of board","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" Coordinate newCoor \u003d position.addOffsetToCoordinate(offsetX, offsetY);","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" ChessPiece destPiece \u003d board.getPieceAtCoor(newCoor);","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":" if (directions[dir] \u003d\u003d UP_LEFT || directions[dir] \u003d\u003d UP_RIGHT || ","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" directions[dir] \u003d\u003d DOWN_LEFT || directions[dir] \u003d\u003d DOWN_RIGHT) {","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" // Diagonal move: Destination tile has opponent piece","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" if (!destPiece.isEmptyPiece() \u0026\u0026 isOpponent(destPiece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d new Coordinate[]{ newCoor };","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" } else if (directions[dir] \u003d\u003d UP || directions[dir] \u003d\u003d DOWN) {","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" // Normal move: when destination tile is empty","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" if (destPiece.isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d new Coordinate[]{ newCoor };","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":" } else if (directions[dir] \u003d\u003d UP_UP || directions[dir] \u003d\u003d DOWN_DOWN) {","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" // Double move: first move AND when destination empty AND no blocking piece","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" Coordinate blockPos \u003d Game.isPieceFriendly(this) ","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" ? position.addOffsetToCoordinate(UP[0], UP[1])","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" : position.addOffsetToCoordinate(DOWN[0], DOWN[1]); ","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"ken-ruster"},"content":" ChessPiece blockPiece \u003d board.getPieceAtCoor(blockPos);","lastModifiedDate":"2023-10-20"},{"lineNumber":59,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"TongZhengHong"},"content":" if (!hasMoved \u0026\u0026 blockPiece.isEmptyPiece() \u0026\u0026 destPiece.isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d new Coordinate[]{ newCoor };","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":64,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"onx001"},"content":" return result;","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"TongZhengHong"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"TongZhengHong"},"content":" return color \u003d\u003d ChessPiece.BLACK ? PAWN_BLACK : PAWN_WHITE;","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":74,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":7,"onx001":14,"TongZhengHong":53}},{"path":"src/main/java/chessmaster/pieces/Queen.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.pieces;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"public class Queen extends ChessPiece {","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" public static final String QUEEN_WHITE \u003d \"q\"; // ♕","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" public static final String QUEEN_BLACK \u003d \"Q\"; // ♛","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" public static final int[][] DIRECTIONS \u003d {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" UP, DOWN, LEFT, RIGHT, UP_LEFT, UP_RIGHT, DOWN_LEFT, DOWN_RIGHT,","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" };","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" public Queen(int row, int col, int color) {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" super(row, col, color);","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"ken-ruster"},"content":" public Coordinate[][] getAvailableCoordinates(ChessBoard board) {","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" Coordinate[][] result \u003d new Coordinate[DIRECTIONS.length][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" for (int dir \u003d 0; dir \u003c DIRECTIONS.length; dir++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" int offsetX \u003d DIRECTIONS[dir][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":" int offsetY \u003d DIRECTIONS[dir][1];","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" int multiplier \u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" boolean isBlocked \u003d false;","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" ArrayList\u003cCoordinate\u003e possibleCoordInDirection \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" while (!isBlocked \u0026\u0026 multiplier \u003c ChessBoard.SIZE \u0026\u0026 position.isOffsetWithinBoard(offsetX, offsetY)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" Coordinate possibleCoord \u003d position.addOffsetToCoordinate(offsetX, offsetY);","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"ken-ruster"},"content":" ChessPiece destPiece \u003d board.getPieceAtCoor(possibleCoord);","lastModifiedDate":"2023-10-20"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" isBlocked \u003d !destPiece.isEmptyPiece();","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" if (destPiece.isEmptyPiece() || isOpponent(destPiece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"onx001"},"content":" possibleCoordInDirection.add(possibleCoord);","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"onx001"},"content":" } ","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" multiplier++;","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" offsetX \u003d DIRECTIONS[dir][0] * multiplier;","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" offsetY \u003d DIRECTIONS[dir][1] * multiplier;","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" // Convert arraylist to array","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d possibleCoordInDirection.toArray(new Coordinate[0]);","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" return result;","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" return color \u003d\u003d ChessPiece.BLACK ? QUEEN_BLACK : QUEEN_WHITE;","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":2,"onx001":2,"TongZhengHong":54}},{"path":"src/main/java/chessmaster/pieces/Rook.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.pieces;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"public class Rook extends ChessPiece {","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" public static final String ROOK_WHITE \u003d \"r\"; // ♖","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" public static final String ROOK_BLACK \u003d \"R\"; // ♜","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" public static final int[][] DIRECTIONS \u003d {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" UP, DOWN, LEFT, RIGHT,","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" };","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" public Rook(int row, int col, int color) {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" super(row, col, color);","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"ken-ruster"},"content":" public Coordinate[][] getAvailableCoordinates(ChessBoard board) {","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" Coordinate[][] result \u003d new Coordinate[DIRECTIONS.length][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" for (int dir \u003d 0; dir \u003c DIRECTIONS.length; dir++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" int offsetX \u003d DIRECTIONS[dir][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":" int offsetY \u003d DIRECTIONS[dir][1];","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" int multiplier \u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"onx001"},"content":" boolean isBlocked \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" ArrayList\u003cCoordinate\u003e possibleCoordInDirection \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" while (!isBlocked \u0026\u0026 multiplier \u003c ChessBoard.SIZE \u0026\u0026 position.isOffsetWithinBoard(offsetX, offsetY)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" Coordinate possibleCoord \u003d position.addOffsetToCoordinate(offsetX, offsetY);","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"ken-ruster"},"content":" ChessPiece destPiece \u003d board.getPieceAtCoor(possibleCoord);","lastModifiedDate":"2023-10-20"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" isBlocked \u003d !destPiece.isEmptyPiece();","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" if (destPiece.isEmptyPiece() || isOpponent(destPiece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"onx001"},"content":" possibleCoordInDirection.add(possibleCoord);","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"onx001"},"content":" } ","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" multiplier++;","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" offsetX \u003d DIRECTIONS[dir][0] * multiplier;","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" offsetY \u003d DIRECTIONS[dir][1] * multiplier;","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" // Convert arraylist to array","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d possibleCoordInDirection.toArray(new Coordinate[0]);","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" return result;","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" return color \u003d\u003d ChessPiece.BLACK ? ROOK_BLACK : ROOK_WHITE;","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":2,"onx001":3,"TongZhengHong":53}},{"path":"src/main/java/chessmaster/storage/Storage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TriciaBK"},"content":"package chessmaster.storage;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"TriciaBK"},"content":"import chessmaster.exceptions.LoadBoardException;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"TriciaBK"},"content":"import chessmaster.exceptions.SaveBoardException;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"TriciaBK"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"TriciaBK"},"content":"import chessmaster.game.ChessTile;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"TriciaBK"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.parser.Parser;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"TriciaBK"},"content":"import java.io.File;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"TriciaBK"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"TriciaBK"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"TriciaBK"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"TriciaBK"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"TriciaBK"},"content":"public class Storage {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"TriciaBK"},"content":" private static String filePath;","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"TriciaBK"},"content":" public Storage(String filePath){","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"TriciaBK"},"content":" Storage.filePath \u003d filePath;","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"TriciaBK"},"content":" assert filePath !\u003d null : \"File path cannot be null\";","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"TriciaBK"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"TriciaBK"},"content":" * Method to save board to file","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"TriciaBK"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"TriciaBK"},"content":" * @param board takes in current board that is in play","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"TriciaBK"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"TriciaBK"},"content":" public static void saveBoard(ChessBoard board) throws SaveBoardException {","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"TriciaBK"},"content":" try (FileWriter fileWriter \u003d new FileWriter(filePath)){","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"TriciaBK"},"content":" for (int row \u003d 0; row \u003c 8; row++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"TriciaBK"},"content":" for (int col \u003d 0; col \u003c 8; col++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" try {","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"TriciaBK"},"content":" ChessPiece piece \u003d board.getPieceAtCoor(new Coordinate(col, row));","lastModifiedDate":"2023-10-20"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" fileWriter.write(piece.toString());","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" fileWriter.write(\" \");","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"TriciaBK"},"content":" fileWriter.write(\"\\n\");","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"TriciaBK"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"TriciaBK"},"content":" throw new SaveBoardException();","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"TriciaBK"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":49,"author":{"gitId":"TriciaBK"},"content":" * Method to load board from file","lastModifiedDate":"2023-10-20"},{"lineNumber":50,"author":{"gitId":"TriciaBK"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":51,"author":{"gitId":"TriciaBK"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":52,"author":{"gitId":"TriciaBK"},"content":" public static ChessBoard loadBoard() throws LoadBoardException {","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"TriciaBK"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" ChessBoard chessBoard \u003d new ChessBoard(ChessPiece.WHITE);","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"TriciaBK"},"content":" ChessTile[][] boardTiles;","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"TriciaBK"},"content":" assert filePath !\u003d null : \"File path cannot be null\";","lastModifiedDate":"2023-10-20"},{"lineNumber":57,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"TriciaBK"},"content":" if (!file.exists()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"TriciaBK"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"TriciaBK"},"content":" File directory \u003d file.getParentFile();","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"TriciaBK"},"content":" if (!directory.exists() \u0026\u0026 !directory.mkdirs()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"TriciaBK"},"content":" throw new LoadBoardException(\"Failed to create directory structure.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"TriciaBK"},"content":" if (!file.exists() \u0026\u0026 !file.createNewFile()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"TriciaBK"},"content":" throw new LoadBoardException(\"Failed to create the file.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"TriciaBK"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"TriciaBK"},"content":" throw new LoadBoardException();","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"TriciaBK"},"content":" return chessBoard;","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"TriciaBK"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"TriciaBK"},"content":" Scanner fileScanner \u003d new Scanner(file);","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"TriciaBK"},"content":" boardTiles \u003d new ChessTile[ChessBoard.SIZE][ChessBoard.SIZE];","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"TriciaBK"},"content":" while (fileScanner.hasNext()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"TriciaBK"},"content":" for (int row \u003d 0; row \u003c ChessBoard.SIZE; row++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"TriciaBK"},"content":" String tileRow \u003d fileScanner.nextLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"TriciaBK"},"content":" for (int col \u003d 0; col \u003c ChessBoard.SIZE; col++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"TongZhengHong"},"content":" String pieceString \u003d tileRow.substring(col, col + 1);","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"TongZhengHong"},"content":" if (pieceString.equals(\" \")) {","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"ken-ruster"},"content":" boardTiles[row][col] \u003d new ChessTile(new Coordinate(col, row));","lastModifiedDate":"2023-10-20"},{"lineNumber":84,"author":{"gitId":"TriciaBK"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"TongZhengHong"},"content":" ChessPiece piece \u003d Parser.parseChessPiece(pieceString, row + 1, col + 1);","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"TongZhengHong"},"content":" boardTiles[row][col] \u003d new ChessTile(piece);","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"TongZhengHong"},"content":" fileScanner.close();","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"TongZhengHong"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"TriciaBK"},"content":" throw new LoadBoardException();","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"TriciaBK"},"content":" for (int row \u003d 0; row \u003c ChessBoard.SIZE; row++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"TriciaBK"},"content":" for (int col \u003d 0; col \u003c ChessBoard.SIZE; col++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"TriciaBK"},"content":" chessBoard.setTile(row, col, boardTiles[row][col]);","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"TriciaBK"},"content":" return chessBoard;","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"TriciaBK"},"content":"}","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"ken-ruster":1,"TriciaBK":88,"TongZhengHong":15}},{"path":"src/main/java/chessmaster/ui/TextUI.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.commands.CommandResult;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.ChessTile;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"antrikshdhand"},"content":"public final class TextUI {","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" public static final String CHESS_BOARD_DIVIDER \u003d \"_\".repeat(4 * ChessBoard.SIZE + 1);","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" private static final String COLUMN_HEADER \u003d \"abcdefgh\";","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" * Format of a comment input line. Comment lines are silently consumed when","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" * reading user input.","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" private static final String COMMENT_LINE_FORMAT_REGEX \u003d \"#.*\";","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"antrikshdhand"},"content":" private static final Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"antrikshdhand"},"content":" private static final PrintStream out \u003d System.out;","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" * Prompts for the command and reads the text entered by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" * Ignores empty, pure whitespace, and comment lines.","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" * ","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" * @return user input string in LOWER case","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"antrikshdhand"},"content":" public static String getUserInput() {","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" String fullInputLine \u003d scanner.nextLine().trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" // silently consume all ignored lines","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" while (shouldIgnore(fullInputLine)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" fullInputLine \u003d scanner.nextLine();","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" return fullInputLine.toLowerCase();","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" * Returns true if the user input line should be ignored.","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" * Input should be ignored if it is parsed as a comment, is only whitespace, or","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" * is empty.","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" * @param rawInputLine full raw user input line.","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" * @return true if the entire user input line should be ignored.","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"antrikshdhand"},"content":" private static boolean shouldIgnore(String rawInputLine) {","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":" boolean isCommentLine \u003d rawInputLine.trim().matches(COMMENT_LINE_FORMAT_REGEX);","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" return rawInputLine.trim().isEmpty() || isCommentLine;","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"ken-ruster"},"content":" public static void printPromotePrompt(Coordinate coord){","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"ken-ruster"},"content":" String message \u003d String.format(UiMessages.PROMPT_PROMOTE_MESSAGE, coord.toString());","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"ken-ruster"},"content":" out.println(message);","lastModifiedDate":"2023-10-19"},{"lineNumber":60,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"ken-ruster"},"content":" public static void printPromoteInvalidMessage(){","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"ken-ruster"},"content":" out.println(UiMessages.PROMPT_PROMOTE_INVALID_MESSAGE);","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":65,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"antrikshdhand"},"content":" public static void printChessBoardDivider() {","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"TongZhengHong"},"content":" out.println(CHESS_BOARD_DIVIDER);","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"antrikshdhand"},"content":" public static void printChessBoardHeader() {","lastModifiedDate":"2023-10-19"},{"lineNumber":71,"author":{"gitId":"TongZhengHong"},"content":" for (int i \u003d 0; i \u003c COLUMN_HEADER.length(); i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"TongZhengHong"},"content":" char col \u003d COLUMN_HEADER.charAt(i);","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"antrikshdhand"},"content":" out.printf(\" (%s)\", col);","lastModifiedDate":"2023-10-19"},{"lineNumber":74,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"TongZhengHong"},"content":" out.println(\"\");","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"antrikshdhand"},"content":" public static void printChessBoardRow(int rowNum, String chessBoardRow) {","lastModifiedDate":"2023-10-19"},{"lineNumber":79,"author":{"gitId":"TongZhengHong"},"content":" out.print(chessBoardRow);","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"TongZhengHong"},"content":" out.print(ChessTile.TILE_DIVIDER);","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"TongZhengHong"},"content":" out.print(String.format(\" (%d)\", rowNum));","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"TongZhengHong"},"content":" out.print(System.lineSeparator() + CHESS_BOARD_DIVIDER);","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"TongZhengHong"},"content":" out.println(\"\");","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"TongZhengHong"},"content":" public static void printCommandResult(CommandResult result) {","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"TongZhengHong"},"content":" String[] messages \u003d result.getMessageStrings();","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"TongZhengHong"},"content":" for (String message : messages) {","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"TongZhengHong"},"content":" out.println(message);","lastModifiedDate":"2023-10-22"},{"lineNumber":90,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"antrikshdhand"},"content":" public static void printErrorMessage(Exception e) {","lastModifiedDate":"2023-10-19"},{"lineNumber":94,"author":{"gitId":"TongZhengHong"},"content":" out.println(e.getMessage());","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"TriciaBK"},"content":" public static void printWinnerMessage(int colour){","lastModifiedDate":"2023-10-20"},{"lineNumber":98,"author":{"gitId":"TongZhengHong"},"content":" if (colour \u003d\u003d ChessPiece.BLACK) {","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"TongZhengHong"},"content":" out.println(\"BLACK Wins!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"TriciaBK"},"content":" } else {","lastModifiedDate":"2023-10-20"},{"lineNumber":101,"author":{"gitId":"TongZhengHong"},"content":" out.println(\"WHITE Wins!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":103,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":104,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":105,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":10,"antrikshdhand":10,"TriciaBK":5,"TongZhengHong":80}},{"path":"src/main/java/chessmaster/ui/UiMessages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ken-ruster"},"content":"package chessmaster.ui;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"ken-ruster"},"content":"public class UiMessages {","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"ken-ruster"},"content":" public static final String PROMPT_PROMOTE_MESSAGE \u003d \"You can promote the pawn at %s! \\n\" +","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"ken-ruster"},"content":" \"Please choose what to promote it to:\";","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"ken-ruster"},"content":" public static final String PROMPT_PROMOTE_INVALID_MESSAGE \u003d \"Oops, we couldn\u0027t promote your piece!\";","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"ken-ruster"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"ken-ruster":7}},{"path":"src/main/java/chessmaster/user/CPU.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"antrikshdhand"},"content":"package chessmaster.user;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.game.Move;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"antrikshdhand"},"content":"import java.util.Random;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"antrikshdhand"},"content":"public class CPU extends Player {","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" private static final int MAX_LOOP_ITERATIONS \u003d 16;","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" private static final int RANDOM_SEED \u003d 100;","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" private final Random rand \u003d new Random(RANDOM_SEED);","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" public CPU(int colour, ChessBoard board) {","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" super(colour, board);","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"antrikshdhand"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"antrikshdhand"},"content":" * The main function behind the CPU\u0027s logic, this function randomly selects an active (non-captured) piece","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"antrikshdhand"},"content":" * from the CPU\u0027s pieces which has possible valid moves.","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"antrikshdhand"},"content":" * @param board The board to extract the random move from.","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"antrikshdhand"},"content":" * @return A random move","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"antrikshdhand"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"antrikshdhand"},"content":" public Move getRandomMove(ChessBoard board) {","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"antrikshdhand"},"content":" // 1. Get a random piece that","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"antrikshdhand"},"content":" // - isn\u0027t captured","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"antrikshdhand"},"content":" // - has possible legal moves","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"antrikshdhand"},"content":" ChessPiece randomPiece \u003d getRandomPiece();","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"antrikshdhand"},"content":" // Need a cap on the number of pieces it checks to prevent an infinite loop when no moves are possible","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"antrikshdhand"},"content":" // on the CPUs side.","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"antrikshdhand"},"content":" int iter \u003d 0;","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"antrikshdhand"},"content":" while (iter \u003c MAX_LOOP_ITERATIONS","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" \u0026\u0026 (randomPiece.getIsCaptured()","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"ken-ruster"},"content":" || randomPiece.getFlattenedCoordinates(board).length \u003d\u003d 0)) {","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"antrikshdhand"},"content":" randomPiece \u003d getRandomPiece();","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"antrikshdhand"},"content":" iter++;","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"antrikshdhand"},"content":" return getRandomMoveFromPiece(randomPiece, board);","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"antrikshdhand"},"content":" private ChessPiece getRandomPiece() {","lastModifiedDate":"2023-10-19"},{"lineNumber":47,"author":{"gitId":"antrikshdhand"},"content":" return this.pieces.get(rand.nextInt(pieces.size()));","lastModifiedDate":"2023-10-19"},{"lineNumber":48,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":49,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"antrikshdhand"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"antrikshdhand"},"content":" * This function returns any random valid move that a given piece can make on a given board.","lastModifiedDate":"2023-10-19"},{"lineNumber":52,"author":{"gitId":"antrikshdhand"},"content":" * @param piece The piece to extract a random move from.","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"antrikshdhand"},"content":" * @param board The board the piece is currently on.","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"antrikshdhand"},"content":" * @return A random move the given piece can make on the given board.","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"antrikshdhand"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"antrikshdhand"},"content":" private Move getRandomMoveFromPiece(ChessPiece piece, ChessBoard board) {","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"ken-ruster"},"content":" Coordinate[] allPossibleMoves \u003d piece.getFlattenedCoordinates(board);","lastModifiedDate":"2023-10-20"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":" int randIndex \u003d rand.nextInt(allPossibleMoves.length);","lastModifiedDate":"2023-10-20"},{"lineNumber":59,"author":{"gitId":"TongZhengHong"},"content":" Coordinate randomDestination \u003d allPossibleMoves[randIndex];","lastModifiedDate":"2023-10-20"},{"lineNumber":60,"author":{"gitId":"antrikshdhand"},"content":" return new Move(piece.getPosition(), randomDestination, piece);","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"antrikshdhand"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"ken-ruster":2,"antrikshdhand":52,"TongZhengHong":9}},{"path":"src/main/java/chessmaster/user/Human.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"antrikshdhand"},"content":"package chessmaster.user;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Move;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.Pawn;","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.ui.TextUI;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"antrikshdhand"},"content":"public class Human extends Player {","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" public Human(int colour, ChessBoard board) {","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" super(colour, board);","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" * Prompts the user to enter a type of piece to promote a pawn to. If the","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" * promotion is not successful,","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" * the user is prompted again. If successful, the pawn is replaced with the new","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" * piece.","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" * @param board Chessboard that the game is being played on.","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" * @param promoteMove The piece being promoted.","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":" public void handlePromote(ChessBoard board, Move promoteMove) {","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" ChessPiece pawnPiece \u003d promoteMove.getPiece();","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" if (!(pawnPiece instanceof Pawn)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" board.showChessBoard();","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" Coordinate coord \u003d pawnPiece.getPosition();","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" boolean promoteFailure \u003d true;","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" do {","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" TextUI.printPromotePrompt(coord);","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" String in \u003d TextUI.getUserInput();","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":" ChessPiece promotedPiece \u003d Parser.parsePromote(pawnPiece, in);","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" promoteFailure \u003d promotedPiece instanceof Pawn;","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" if (promoteFailure) {","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" TextUI.printPromoteInvalidMessage();","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" promotedPiece.setHasMoved();","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" this.pieces.add(promotedPiece);","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" this.pieces.remove(pawnPiece);","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" board.setPromotionPiece(coord, promotedPiece);","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" } while (promoteFailure);","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"antrikshdhand"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"antrikshdhand":7,"TongZhengHong":47}},{"path":"src/main/java/chessmaster/user/Player.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"antrikshdhand"},"content":"package chessmaster.user;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.game.Move;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"antrikshdhand"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"antrikshdhand"},"content":"public abstract class Player {","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"antrikshdhand"},"content":" protected ArrayList\u003cMove\u003e moves;","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"antrikshdhand"},"content":" protected ArrayList\u003cChessPiece\u003e pieces;","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"antrikshdhand"},"content":" protected int colour;","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"antrikshdhand"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" * A player is a dependency of the Game class. This class stores all move","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" * history, all current pieces, and colour of each player. ","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" * It also contains functions to request input from the user for the next ","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" * move and to execute that move.","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" * ","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"antrikshdhand"},"content":" * @param colour The ChessPiece.Colour desired for this player.","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"antrikshdhand"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" public Player(int colour, ChessBoard board) {","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" this.moves \u003d new ArrayList\u003cMove\u003e();","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":" this.pieces \u003d new ArrayList\u003cChessPiece\u003e();","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"antrikshdhand"},"content":" this.colour \u003d colour;","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" initialisePieces(board);","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"antrikshdhand"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"antrikshdhand"},"content":" * Adds a given move into the Player\u0027s move history.","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" * ","lastModifiedDate":"2023-10-20"},{"lineNumber":34,"author":{"gitId":"antrikshdhand"},"content":" * @param move The given move to be added to history.","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"antrikshdhand"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"antrikshdhand"},"content":" public void addMove(Move move) {","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"antrikshdhand"},"content":" this.moves.add(move);","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":" public int getColour() {","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" return this.colour;","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"antrikshdhand"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" * Adds all the player\u0027s pieces to their ChessPiece array ","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" * when Player is initialised.","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" * ","lastModifiedDate":"2023-10-20"},{"lineNumber":48,"author":{"gitId":"antrikshdhand"},"content":" * @param board The new ChessBoard containing all 32 chess pieces.","lastModifiedDate":"2023-10-19"},{"lineNumber":49,"author":{"gitId":"antrikshdhand"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" private void initialisePieces(ChessBoard board) {","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" for (int row \u003d 0; row \u003c ChessBoard.SIZE; row++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" for (int col \u003d 0; col \u003c ChessBoard.SIZE; col++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"antrikshdhand"},"content":" ChessPiece piece \u003d board.getPieceAtCoor(new Coordinate(col, row));","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" if (piece.isSameColorAs(this.colour)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"antrikshdhand"},"content":" this.pieces.add(piece);","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":60,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"antrikshdhand"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"TongZhengHong"},"content":" * Prints out all the player\u0027s pieces including whether it has been captured or","lastModifiedDate":"2023-10-20"},{"lineNumber":63,"author":{"gitId":"TongZhengHong"},"content":" * not.","lastModifiedDate":"2023-10-20"},{"lineNumber":64,"author":{"gitId":"antrikshdhand"},"content":" * Used for debugging purposes only.","lastModifiedDate":"2023-10-19"},{"lineNumber":65,"author":{"gitId":"antrikshdhand"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"antrikshdhand"},"content":" public void printAllPieces() {","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"antrikshdhand"},"content":" for (ChessPiece p : pieces) {","lastModifiedDate":"2023-10-19"},{"lineNumber":68,"author":{"gitId":"antrikshdhand"},"content":" System.out.println(\"Piece: \" + p);","lastModifiedDate":"2023-10-19"},{"lineNumber":69,"author":{"gitId":"antrikshdhand"},"content":" System.out.println(\"Colour: \" + p.getColour());","lastModifiedDate":"2023-10-19"},{"lineNumber":70,"author":{"gitId":"TongZhengHong"},"content":" System.out.println(\"Is captured: \" + p.getIsCaptured());","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"TongZhengHong"},"content":" // /**","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"TongZhengHong"},"content":" // * High-level function which calls necessary APIs to request user input and","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"TongZhengHong"},"content":" // * parse it into a Move object.","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"TongZhengHong"},"content":" // * ","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"TongZhengHong"},"content":" // * @param board The board which to make the move on.","lastModifiedDate":"2023-10-22"},{"lineNumber":79,"author":{"gitId":"TongZhengHong"},"content":" // * @return null if the user inputs \"abort\", an empty Move if an error occurred","lastModifiedDate":"2023-10-22"},{"lineNumber":80,"author":{"gitId":"TongZhengHong"},"content":" // * during parsing, otherwise return the requested Move object.","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"TongZhengHong"},"content":" // */","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"TongZhengHong"},"content":" // public Move getNextMove(ChessBoard board) {","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"TongZhengHong"},"content":" // String input \u003d TextUI.getUserInput(); // Get user input","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"TongZhengHong"},"content":" // try {","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"TongZhengHong"},"content":" // Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"TongZhengHong"},"content":" // Command command \u003d parser.parseCommand(input, board);","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"TongZhengHong"},"content":" // if (command instanceof AbortCommand) {","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"TongZhengHong"},"content":" // return null;","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"TongZhengHong"},"content":" // }","lastModifiedDate":"2023-10-22"},{"lineNumber":90,"author":{"gitId":"TongZhengHong"},"content":" // return command.getMove();","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"TongZhengHong"},"content":" // } catch (ParseCoordinateException | NullPieceException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"TongZhengHong"},"content":" // TextUI.printErrorMessage(e);","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"TongZhengHong"},"content":" // }","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"TongZhengHong"},"content":" // return new Move();","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"TongZhengHong"},"content":" // }","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"TongZhengHong"},"content":" // /**","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"TongZhengHong"},"content":" // * Allows a player to execute a move and add it to their history.","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"TongZhengHong"},"content":" // * ","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"TongZhengHong"},"content":" // * @param move The move to be executed.","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"TongZhengHong"},"content":" // * @param board The board the move is to be executed on.","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"TongZhengHong"},"content":" // * @return true on success, false on InvalidMoveException","lastModifiedDate":"2023-10-22"},{"lineNumber":104,"author":{"gitId":"TongZhengHong"},"content":" // */","lastModifiedDate":"2023-10-22"},{"lineNumber":105,"author":{"gitId":"TongZhengHong"},"content":" // public boolean move(Move move, ChessBoard board) {","lastModifiedDate":"2023-10-22"},{"lineNumber":106,"author":{"gitId":"TongZhengHong"},"content":" // try {","lastModifiedDate":"2023-10-22"},{"lineNumber":107,"author":{"gitId":"TongZhengHong"},"content":" // board.executeMove(move);","lastModifiedDate":"2023-10-22"},{"lineNumber":108,"author":{"gitId":"TongZhengHong"},"content":" // this.addMove(move);","lastModifiedDate":"2023-10-22"},{"lineNumber":109,"author":{"gitId":"TongZhengHong"},"content":" // if (board.canPromote(move)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":110,"author":{"gitId":"TongZhengHong"},"content":" // promote(board, board.getPieceAtCoor(move.getTo()));","lastModifiedDate":"2023-10-22"},{"lineNumber":111,"author":{"gitId":"TongZhengHong"},"content":" // }","lastModifiedDate":"2023-10-22"},{"lineNumber":112,"author":{"gitId":"TongZhengHong"},"content":" // } catch (InvalidMoveException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":113,"author":{"gitId":"TongZhengHong"},"content":" // e.printStackTrace();","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"TongZhengHong"},"content":" // return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"TongZhengHong"},"content":" // } catch (NullPieceException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":116,"author":{"gitId":"TongZhengHong"},"content":" // return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":117,"author":{"gitId":"TongZhengHong"},"content":" // }","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"TongZhengHong"},"content":" // return true;","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"TongZhengHong"},"content":" // }","lastModifiedDate":"2023-10-22"},{"lineNumber":121,"author":{"gitId":"antrikshdhand"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"antrikshdhand":47,"TongZhengHong":74}},{"path":"src/test/java/chessmaster/ChessMasterTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"onx001"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"class ChessMasterTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":" public void sampleTest() {","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":" assertTrue(true);","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"onx001"},"content":" assertFalse(false);","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"onx001":2,"TongZhengHong":2,"-":10}},{"path":"src/test/java/chessmaster/parser/ParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ken-ruster"},"content":"package chessmaster.parser;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.pieces.Pawn;","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.pieces.Queen;","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"ken-ruster"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"ken-ruster"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":10,"author":{"gitId":"ken-ruster"},"content":"public class ParserTest {","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"ken-ruster"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"ken-ruster"},"content":" public void promoteTest(){","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"ken-ruster"},"content":" ChessPiece promoted \u003d Parser.parsePromote(new Pawn(0, 0, ChessPiece.WHITE), \"q\");","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"ken-ruster"},"content":" assertEquals(promoted.toString(), Queen.QUEEN_WHITE);","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"ken-ruster"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"ken-ruster":18}}] +[{"path":"README.md","fileType":"docs","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":"onx001"},"content":"This is a project template for a greenfield Java project. It\u0027s named after Chess and Master. Given below are instructions on how to use it.","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11 (use the exact version), update Intellij to the most recent version.","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. **Ensure Intellij JDK 11 is defined as an SDK**, as described [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk) -- this step is not needed if you have used JDK 11 in a previous Intellij project.","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. **Import the project _as a Gradle project_**, as described [here](https://se-education.org/guides/tutorials/intellijImportGradleProject.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"1. **Verify the set up**: After the importing is complete, locate the `src/main/java/seedu/duke/Duke.java` file, right-click it, and choose `Run Duke.main()`. If the setup is correct, you should see something like the below:","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003e Task :compileJava","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003e Task :processResources NO-SOURCE","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003e Task :classes","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003e Task :Duke.main()","lastModifiedDate":"2020-05-24"},{"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-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":" What is your name?","lastModifiedDate":"2020-05-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" Type some word and press enter to let the execution proceed to the end.","lastModifiedDate":"2020-05-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":"## Build automation using Gradle","lastModifiedDate":"2020-05-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":"* This project uses Gradle for build automation and dependency management. It includes a basic build script as well (i.e. the `build.gradle` file).","lastModifiedDate":"2020-05-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":"* If you are new to Gradle, refer to the [Gradle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/gradle.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":"## Testing","lastModifiedDate":"2020-05-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":"### I/O redirection tests","lastModifiedDate":"2020-05-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"* To run _I/O redirection_ tests (aka _Text UI tests_), navigate to the `text-ui-test` and run the `runtest(.bat/.sh)` script.","lastModifiedDate":"2020-05-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":"### JUnit tests","lastModifiedDate":"2020-05-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":42,"author":{"gitId":"-"},"content":"* A skeleton JUnit test (`src/test/java/seedu/duke/DukeTest.java`) is provided with this project template. ","lastModifiedDate":"2020-05-24"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* If you are new to JUnit, refer to the [JUnit Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/junit.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":"## Checkstyle","lastModifiedDate":"2020-05-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* A sample CheckStyle rule configuration is provided in this project.","lastModifiedDate":"2020-05-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* If you are new to Checkstyle, refer to the [Checkstyle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/checkstyle.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":"## CI using GitHub Actions","lastModifiedDate":"2020-05-24"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":52,"author":{"gitId":"-"},"content":"The project uses [GitHub actions](https://github.com/features/actions) for CI. When you push a commit to this repo or PR against it, GitHub actions will run automatically to build and verify the code as updated by the commit/PR.","lastModifiedDate":"2020-05-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":"## Documentation","lastModifiedDate":"2020-05-24"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":56,"author":{"gitId":"-"},"content":"`/docs` folder contains a skeleton version of the project documentation.","lastModifiedDate":"2020-05-24"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":58,"author":{"gitId":"-"},"content":"Steps for publishing documentation to the public: ","lastModifiedDate":"2020-05-24"},{"lineNumber":59,"author":{"gitId":"-"},"content":"1. If you are using this project template for an individual project, go your fork on GitHub.\u003cbr\u003e","lastModifiedDate":"2020-05-24"},{"lineNumber":60,"author":{"gitId":"-"},"content":" If you are using this project template for a team project, go to the team fork on GitHub.","lastModifiedDate":"2020-05-24"},{"lineNumber":61,"author":{"gitId":"-"},"content":"1. Click on the `settings` tab.","lastModifiedDate":"2020-05-24"},{"lineNumber":62,"author":{"gitId":"-"},"content":"1. Scroll down to the `GitHub Pages` section.","lastModifiedDate":"2020-05-24"},{"lineNumber":63,"author":{"gitId":"-"},"content":"1. Set the `source` as `master branch /docs folder`.","lastModifiedDate":"2020-05-24"},{"lineNumber":64,"author":{"gitId":"-"},"content":"1. Optionally, use the `choose a theme` button to choose a theme for your documentation.","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"onx001":1,"-":63}},{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" mainClass.set(\"chessmaster.ChessMaster\")","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" archiveBaseName.set(\"chessmaster\")","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":"compileJava.options.encoding \u003d \u0027UTF-8\u0027","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":"tasks.withType(JavaCompile) {","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" options.encoding \u003d \u0027UTF-8\u0027","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"TongZhengHong":8,"-":44}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"antrikshdhand"},"content":"| Name | ID | Github |","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"antrikshdhand"},"content":"|-----------------|-----------|---------------|","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"antrikshdhand"},"content":"| Antriksh Dhand | A0278458J | antrikshdhand |","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"antrikshdhand"},"content":"| Oh Ken Wei | A0251850J | ken-ruster |","lastModifiedDate":"2023-10-05"},{"lineNumber":7,"author":{"gitId":"antrikshdhand"},"content":"| Ou Ningxiang | A0249445W | onx001 |","lastModifiedDate":"2023-10-05"},{"lineNumber":8,"author":{"gitId":"antrikshdhand"},"content":"| Tong Zheng Hong | A0251819Y | TongZhengHong |","lastModifiedDate":"2023-10-05"},{"lineNumber":9,"author":{"gitId":"antrikshdhand"},"content":"| Tricia Boo Koh | A0264665U | TriciaBK |","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"antrikshdhand":7,"-":2}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"ken-ruster"},"content":"# ChessMaster","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"-"},"content":"{Give product intro here}","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"Useful links:","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"* [User Guide](UserGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"* [Developer Guide](DeveloperGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"* [About Us](AboutUs.md)","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"ken-ruster":1,"-":7}},{"path":"src/main/java/chessmaster/ChessMaster.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.exceptions.ChessMasterException;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"TriciaBK"},"content":"import chessmaster.game.*;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.storage.Storage;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.ui.TextUI;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"/**","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" * Main entry-point for ChessMaster application.","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"public class ChessMaster {","lastModifiedDate":"2023-10-14"},{"lineNumber":12,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" private static final String FILE_PATH_STRING \u003d \"data/ChessMaster.txt\";","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" private ChessBoard board;","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" private Storage storage;","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" private Color playerColor;","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"TriciaBK"},"content":" private Game game;","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" private ChessMaster() {","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" TextUI.printWelcomeMessage();","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" storage \u003d new Storage(FILE_PATH_STRING);","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" playerColor \u003d storage.loadPlayerColor();","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":" ChessTile[][] existingBoard \u003d storage.loadBoard();","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" board \u003d new ChessBoard(existingBoard);","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" if (shouldStartNewGame()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" loadNewGame();","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" } catch (ChessMasterException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" TextUI.printErrorMessage(e);","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":" loadNewGame();","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":" private boolean shouldStartNewGame() {","lastModifiedDate":"2023-10-23"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":" String input \u003d \"\";","lastModifiedDate":"2023-10-23"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" do {","lastModifiedDate":"2023-10-23"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" TextUI.promptPrevGame();","lastModifiedDate":"2023-10-23"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" input \u003d TextUI.getUserInput();","lastModifiedDate":"2023-10-23"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" } while (!input.equals(\"y\") \u0026\u0026 !input.equals(\"n\"));","lastModifiedDate":"2023-10-23"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" if (input.equals(\"y\")) {","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" return false;","lastModifiedDate":"2023-10-23"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" return true;","lastModifiedDate":"2023-10-23"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" private void loadNewGame() {","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" String input \u003d \"\";","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" do {","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" TextUI.promptStartingColor();","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":" input \u003d TextUI.getUserInput();","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"TongZhengHong"},"content":" } while (!input.equals(\"b\") \u0026\u0026 !input.equals(\"w\"));","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"TongZhengHong"},"content":" playerColor \u003d input.equals(\"b\") ? Color.BLACK : Color.WHITE;","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"TongZhengHong"},"content":" board \u003d new ChessBoard(playerColor);","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"TriciaBK"},"content":" game \u003d new Game(playerColor, board, storage);","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"TriciaBK"},"content":" if (playerColor.isBlack()){","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"TriciaBK"},"content":" game.CPUFirstMove();","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"TongZhengHong"},"content":" private void run() { ","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"TongZhengHong"},"content":" new Game(playerColor, board, storage).run();","lastModifiedDate":"2023-10-23"},{"lineNumber":73,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":74,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":76,"author":{"gitId":"TongZhengHong"},"content":" new ChessMaster().run();","lastModifiedDate":"2023-10-23"},{"lineNumber":77,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":78,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"TriciaBK":8,"TongZhengHong":63,"-":7}},{"path":"src/main/java/chessmaster/commands/AbortCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"onx001"},"content":"package chessmaster.commands;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"onx001"},"content":"public class AbortCommand extends Command {","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" public static final String ABORT_COMAMND_STRING \u003d \"abort\";","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":" private static final String ABORT_MESSAGE \u003d \"Exiting program... Thanks for playing!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"onx001"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" return new CommandResult(ABORT_MESSAGE);","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" public static boolean isAbortCommand(Command command) {","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" return command instanceof AbortCommand;","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"onx001"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"onx001":11,"TongZhengHong":7}},{"path":"src/main/java/chessmaster/commands/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"onx001"},"content":"package chessmaster.commands;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.exceptions.ChessMasterException;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"onx001"},"content":"public abstract class Command {","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":" public abstract CommandResult execute() throws ChessMasterException;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"onx001"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"onx001":5,"TongZhengHong":2}},{"path":"src/main/java/chessmaster/commands/CommandResult.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.commands;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"/**","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":" * Represents the result of a command execution.","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"public class CommandResult {","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" * The feedback message to be shown to the user. Contains a description of the","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" * execution result","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" private final String[] message;","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" public CommandResult(String... message) {","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" this.message \u003d message;","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" public String[] getMessageStrings() {","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" return this.message;","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"TongZhengHong":22}},{"path":"src/main/java/chessmaster/commands/HelpCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"onx001"},"content":"package chessmaster.commands;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"onx001"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" public static final String HELP_COMAMND_STRING \u003d \"help\";","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":" private static final String[] HELP_STRINGS \u003d { ","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"TriciaBK"},"content":" \"Seems like you need some help, here are the following commands to play: \\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"TriciaBK"},"content":" \"Move piece - Input coordinate of piece, followed by coordinate to move to \\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"TriciaBK"},"content":" \" Format: [column][row] [column][row] \\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"TriciaBK"},"content":" \" E.g. a2 a3 \\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"TriciaBK"},"content":" \"Abort game - Exit programme \\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"TriciaBK"},"content":" \" Format: abort \\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"TriciaBK"},"content":" \"Obtain rules - Obtain a quick refresher on the rules of chess \\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"TriciaBK"},"content":" \" Format: rules \\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" };","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"onx001"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" return new CommandResult(HELP_STRINGS);","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"onx001"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"TriciaBK":8,"onx001":10,"TongZhengHong":5}},{"path":"src/main/java/chessmaster/commands/MoveCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"onx001"},"content":"package chessmaster.commands;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.exceptions.ParseCoordinateException;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"onx001"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"onx001"},"content":"public class MoveCommand extends Command {","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" public static final String MOVE_COMAMND_STRING \u003d \"move\";","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" private static final String MOVE_PIECE_MESSAGE \u003d \"Moving %s to %s\";","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" private String userInput;","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" public MoveCommand(String inputString) {","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" this.userInput \u003d inputString;","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" * Executes the command based on user input, which is expected to consist of two algebraic ","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" * coordinate strings separated by whitespace.","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" * @return A CommandResult object containing the result of the command.","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" * @throws ParseCoordinateException If the user input cannot be parsed into two coordinate objects.","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"onx001"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" public CommandResult execute() throws ParseCoordinateException {","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" String[] coordinateStrings \u003d userInput.split(\"\\\\s+\", 2);","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" if (coordinateStrings.length !\u003d 2) {","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" throw new ParseCoordinateException();","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" String fromString \u003d coordinateStrings[0];","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" String toString \u003d coordinateStrings[1];","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":" Coordinate from \u003d Coordinate.parseAlgebraicCoor(fromString);","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" Coordinate to \u003d Coordinate.parseAlgebraicCoor(toString);","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" return new CommandResult(String.format(MOVE_PIECE_MESSAGE, from, to));","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"onx001"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"onx001":15,"TongZhengHong":26}},{"path":"src/main/java/chessmaster/commands/RulesCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TriciaBK"},"content":"package chessmaster.commands;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"TriciaBK"},"content":"public class RulesCommand extends Command {","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"TriciaBK"},"content":" public static final String RULES_COMAMND_STRING \u003d \"rules\";","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"TriciaBK"},"content":" private static final String[] RULES_STRINGS \u003d {","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"TriciaBK"},"content":" \"Here are some simple rules to get you started with chess: \\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"TriciaBK"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"TriciaBK"},"content":" \"Movement:\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"TriciaBK"},"content":" \" Pawns move forward one square but capture diagonally.\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"TriciaBK"},"content":" \" Rooks move horizontally and vertically any number of squares.\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"TriciaBK"},"content":" \" Knights move in an L-shape: two squares in one direction and one square perpendicular to that.\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"TriciaBK"},"content":" \" Bishops move diagonally any number of squares.\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"TriciaBK"},"content":" \" Queens move horizontally, vertically, and diagonally any number of squares.\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"TriciaBK"},"content":" \" Kings move one square in any direction.\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"TriciaBK"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"TriciaBK"},"content":" \"Special Rules:\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"TriciaBK"},"content":" \" Castling - Under certain conditions, the king and one of the rooks can move simultaneously. Castling is a way to safeguard the king and connect the rooks.\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"TriciaBK"},"content":" \" En Passant - If a pawn moves two squares forward from its starting position and lands beside an opponent\u0027s pawn, the opponent has the option to capture the first pawn as if it had moved only one square forward.\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"TriciaBK"},"content":" \" Pawn Promotion - When a pawn reaches the opponent\u0027s back rank, it can be promoted to any other piece (except a king), typically a queen.\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"TriciaBK"},"content":" \"\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"TriciaBK"},"content":" \"Objective:\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"TriciaBK"},"content":" \"The game ends when one player\u0027s king is in checkmate, meaning it is under attack and cannot escape capture.\\n\" +","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"TriciaBK"},"content":" \"The player delivering checkmate wins the game.\\n\"","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"TriciaBK"},"content":" };","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"TriciaBK"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"TriciaBK"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"TriciaBK"},"content":" return new CommandResult(RULES_STRINGS);","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"TriciaBK"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"TriciaBK":33}},{"path":"src/main/java/chessmaster/exceptions/ChessMasterException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class ChessMasterException extends Exception {","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":" public ChessMasterException(String message) {","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" super(message);","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"TongZhengHong":7}},{"path":"src/main/java/chessmaster/exceptions/ExceptionMessages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class ExceptionMessages {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":" public static final String MESSAGE_PARSE_CHESS_PIECE_EXCEPTION \u003d \"Unable to parse chess piece!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" public static final String MESSAGE_PARSE_COORDINATE_EXCEPTION \u003d \"Unable to parse coordinate!\";","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TriciaBK"},"content":" public static final String MESSAGE_SAVE_BOARD_EXCEPTION \u003d \"Unable to save board!\";","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"TriciaBK"},"content":" public static final String MESSAGE_LOAD_BOARD_EXCEPTION \u003d \"Unable to load board!\";","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ken-ruster"},"content":" public static final String MESSAGE_INVALID_MOVE_EXCEPTION \u003d \"Oops, that move isn\u0027t valid!\";","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" public static final String MESSAGE_NULL_PIECE_EXCEPTION \u003d \"No piece found at coordinate!\";","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" public static final String MESSAGE_MOVE_OPPONENT_EXCEPTION \u003d \"You are moving an opponent piece!\"","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" + \"Please choose your color!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" public static final String MESSAGE_PARSE_COLOR_EXCEPTION \u003d \"Unable to parse color!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":1,"TriciaBK":2,"TongZhengHong":10}},{"path":"src/main/java/chessmaster/exceptions/InvalidMoveException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ken-ruster"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class InvalidMoveException extends ChessMasterException {","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"ken-ruster"},"content":" public InvalidMoveException() {","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ken-ruster"},"content":" super(ExceptionMessages.MESSAGE_INVALID_MOVE_EXCEPTION);","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ken-ruster"},"content":" public InvalidMoveException(String message) {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ken-ruster"},"content":" super(message);","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"ken-ruster"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"ken-ruster":10,"TongZhengHong":1}},{"path":"src/main/java/chessmaster/exceptions/LoadBoardException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TriciaBK"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class LoadBoardException extends ChessMasterException {","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"TriciaBK"},"content":" public LoadBoardException() {","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"TriciaBK"},"content":" super(ExceptionMessages.MESSAGE_LOAD_BOARD_EXCEPTION);","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"TriciaBK"},"content":" public LoadBoardException(String message) {","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"TriciaBK"},"content":" super(message);","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"TriciaBK"},"content":"}","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"TriciaBK":13,"TongZhengHong":1}},{"path":"src/main/java/chessmaster/exceptions/MoveOpponentPieceException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class MoveOpponentPieceException extends ChessMasterException {","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":" public MoveOpponentPieceException() {","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" super(ExceptionMessages.MESSAGE_MOVE_OPPONENT_EXCEPTION);","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" public MoveOpponentPieceException(String message) {","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" super(message);","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"TongZhengHong":11}},{"path":"src/main/java/chessmaster/exceptions/NullPieceException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class NullPieceException extends ChessMasterException {","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":" public NullPieceException() {","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" super(ExceptionMessages.MESSAGE_NULL_PIECE_EXCEPTION);","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" public NullPieceException(String message) {","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" super(message);","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"TongZhengHong":11}},{"path":"src/main/java/chessmaster/exceptions/ParseChessPieceException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class ParseChessPieceException extends ChessMasterException {","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" public ParseChessPieceException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":" super(ExceptionMessages.MESSAGE_PARSE_CHESS_PIECE_EXCEPTION);","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" public ParseChessPieceException(String message) {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" super(message);","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"TongZhengHong":13}},{"path":"src/main/java/chessmaster/exceptions/ParseColorException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class ParseColorException extends ChessMasterException {","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":" public ParseColorException() {","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" super(ExceptionMessages.MESSAGE_PARSE_COLOR_EXCEPTION);","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" public ParseColorException(String message) {","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" super(message);","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"TongZhengHong":11}},{"path":"src/main/java/chessmaster/exceptions/ParseCoordinateException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class ParseCoordinateException extends ChessMasterException {","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" public ParseCoordinateException() {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":" super(ExceptionMessages.MESSAGE_PARSE_COORDINATE_EXCEPTION);","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" public ParseCoordinateException(String message) {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" super(message);","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"TongZhengHong":13}},{"path":"src/main/java/chessmaster/exceptions/SaveBoardException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TriciaBK"},"content":"package chessmaster.exceptions;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public class SaveBoardException extends ChessMasterException {","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"TriciaBK"},"content":" public SaveBoardException() {","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"TriciaBK"},"content":" super(ExceptionMessages.MESSAGE_SAVE_BOARD_EXCEPTION);","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"TriciaBK"},"content":" public SaveBoardException(String message) {","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"TriciaBK"},"content":" super(message);","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"TriciaBK"},"content":"}","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"TriciaBK":13,"TongZhengHong":1}},{"path":"src/main/java/chessmaster/game/ChessBoard.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.game;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.exceptions.InvalidMoveException;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.parser.Parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TriciaBK"},"content":"import chessmaster.pieces.King;","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.pieces.Pawn;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.ui.TextUI;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":"public class ChessBoard {","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" public static final int SIZE \u003d 8;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" public static final int TOP_ROW_INDEX \u003d 0;","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" public static final int BOTTOM_ROW_INDEX \u003d 7;","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" private static final String[][] STARTING_CHESSBOARD_BLACK \u003d { ","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" { \"r\", \"n\", \"b\", \"q\", \"k\", \"b\", \"n\", \"r\" }, ","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" { \"p\", \"p\", \"p\", \"p\", \"p\", \"p\", \"p\", \"p\" }, ","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" { \".\", \".\", \".\", \".\", \".\", \".\", \".\", \".\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" { \".\", \".\", \".\", \".\", \".\", \".\", \".\", \".\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" { \".\", \".\", \".\", \".\", \".\", \".\", \".\", \".\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" { \".\", \".\", \".\", \".\", \".\", \".\", \".\", \".\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" { \"P\", \"P\", \"P\", \"P\", \"P\", \"P\", \"P\", \"P\" }, ","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" { \"R\", \"N\", \"B\", \"Q\", \"K\", \"B\", \"N\", \"R\" }, ","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" };","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" private static final String[][] STARTING_CHESSBOARD_WHITE \u003d { ","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" { \"R\", \"N\", \"B\", \"Q\", \"K\", \"B\", \"N\", \"R\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" { \"P\", \"P\", \"P\", \"P\", \"P\", \"P\", \"P\", \"P\" },","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" { \".\", \".\", \".\", \".\", \".\", \".\", \".\", \".\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" { \".\", \".\", \".\", \".\", \".\", \".\", \".\", \".\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" { \".\", \".\", \".\", \".\", \".\", \".\", \".\", \".\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" { \".\", \".\", \".\", \".\", \".\", \".\", \".\", \".\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" { \"p\", \"p\", \"p\", \"p\", \"p\", \"p\", \"p\", \"p\" },","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":" { \"r\", \"n\", \"b\", \"q\", \"k\", \"b\", \"n\", \"r\" }, ","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" };","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" private boolean isWhiteKingAlive \u003d true;","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":" private boolean isBlackKingAlive \u003d true;","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":41,"author":{"gitId":"antrikshdhand"},"content":" private final ChessTile[][] board \u003d new ChessTile[SIZE][SIZE];","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" public ChessBoard(Color playerColor) {","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" for (int row \u003d 0; row \u003c SIZE; row++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" for (int col \u003d 0; col \u003c SIZE; col++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" String chessPieceString \u003d playerColor.isBlack()","lastModifiedDate":"2023-10-23"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" ? STARTING_CHESSBOARD_BLACK[row][col]","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" : STARTING_CHESSBOARD_WHITE[row][col];","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" ChessPiece initialPiece \u003d Parser.parseChessPiece(chessPieceString, row, col);","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" board[row][col] \u003d new ChessTile(initialPiece);","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"ken-ruster"},"content":" assert (board[row][col] !\u003d null);","lastModifiedDate":"2023-10-20"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" public ChessBoard(ChessTile[][] boardTiles) {","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" for (int row \u003d 0; row \u003c SIZE; row++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":" for (int col \u003d 0; col \u003c SIZE; col++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"TongZhengHong"},"content":" board[row][col] \u003d boardTiles[row][col];","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"onx001"},"content":" public void displayAvailableMoves() {","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"onx001"},"content":" for (int i \u003d 0; i \u003c board.length; i++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"onx001"},"content":" for (int j \u003d 0; j \u003c board.length; j++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"onx001"},"content":" ChessPiece piece \u003d board[i][j].getChessPiece();","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"TongZhengHong"},"content":" if (piece.isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"ken-ruster"},"content":" piece.displayAvailableCoordinates(this);","lastModifiedDate":"2023-10-20"},{"lineNumber":70,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"antrikshdhand"},"content":" public void showChessBoard() {","lastModifiedDate":"2023-10-19"},{"lineNumber":76,"author":{"gitId":"antrikshdhand"},"content":" System.out.println();","lastModifiedDate":"2023-10-19"},{"lineNumber":77,"author":{"gitId":"antrikshdhand"},"content":" TextUI.printChessBoardHeader();","lastModifiedDate":"2023-10-19"},{"lineNumber":78,"author":{"gitId":"antrikshdhand"},"content":" TextUI.printChessBoardDivider();","lastModifiedDate":"2023-10-19"},{"lineNumber":79,"author":{"gitId":"TongZhengHong"},"content":" for (int i \u003d 0; i \u003c board.length; i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"TongZhengHong"},"content":" ChessTile[] row \u003d board[i];","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"TongZhengHong"},"content":" StringBuilder rowString \u003d new StringBuilder();","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"TongZhengHong"},"content":" for (ChessTile tile : row) {","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"TongZhengHong"},"content":" rowString.append(tile.toString());","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"TongZhengHong"},"content":" int rowNum \u003d (i - 8) * -1;","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"antrikshdhand"},"content":" TextUI.printChessBoardRow(rowNum, rowString.toString());","lastModifiedDate":"2023-10-19"},{"lineNumber":89,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"antrikshdhand"},"content":" System.out.println();","lastModifiedDate":"2023-10-19"},{"lineNumber":91,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"TongZhengHong"},"content":" public void setPromotionPiece(Coordinate coord, ChessPiece promotedPiece) {","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"TongZhengHong"},"content":" getTileAtCoor(coord).updateTileChessPiece(promotedPiece);","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"TongZhengHong"},"content":" public void setTile(int row, int col, ChessTile tile) {","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"TongZhengHong"},"content":" board[row][col] \u003d tile;","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"TongZhengHong"},"content":" * Gets the ChessTile object located at the specified coordinate on the","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"TongZhengHong"},"content":" * chessboard.","lastModifiedDate":"2023-10-22"},{"lineNumber":104,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":105,"author":{"gitId":"TongZhengHong"},"content":" * @param coor The coordinate of the position to retrieve the tile for.","lastModifiedDate":"2023-10-22"},{"lineNumber":106,"author":{"gitId":"TongZhengHong"},"content":" * @return The ChessTile object at the specified coordinate.","lastModifiedDate":"2023-10-22"},{"lineNumber":107,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":108,"author":{"gitId":"TongZhengHong"},"content":" private ChessTile getTileAtCoor(Coordinate coor) {","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"TongZhengHong"},"content":" return board[coor.getY()][coor.getX()];","lastModifiedDate":"2023-10-18"},{"lineNumber":110,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":111,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":113,"author":{"gitId":"TongZhengHong"},"content":" * Gets the chess piece located at the specified coordinate on the chessboard.","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"TongZhengHong"},"content":" * @param coor The coordinate of the position to check.","lastModifiedDate":"2023-10-22"},{"lineNumber":116,"author":{"gitId":"TongZhengHong"},"content":" * @return The ChessPiece object at the specified coordinate. If empty piece at","lastModifiedDate":"2023-10-22"},{"lineNumber":117,"author":{"gitId":"TongZhengHong"},"content":" * coordinate, returns EmptyPiece object","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"TongZhengHong"},"content":" public ChessPiece getPieceAtCoor(Coordinate coor) {","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"TongZhengHong"},"content":" ChessTile tile \u003d getTileAtCoor(coor);","lastModifiedDate":"2023-10-18"},{"lineNumber":121,"author":{"gitId":"ken-ruster"},"content":" return tile.getChessPiece();","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":124,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":125,"author":{"gitId":"TongZhengHong"},"content":" * Executes a chess move on the chessboard.","lastModifiedDate":"2023-10-18"},{"lineNumber":126,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":127,"author":{"gitId":"TongZhengHong"},"content":" * @param move The Move object representing the move to be executed.","lastModifiedDate":"2023-10-18"},{"lineNumber":128,"author":{"gitId":"TongZhengHong"},"content":" * @throws InvalidMoveException If the move is not valid according to the game","lastModifiedDate":"2023-10-22"},{"lineNumber":129,"author":{"gitId":"TongZhengHong"},"content":" * rules.","lastModifiedDate":"2023-10-22"},{"lineNumber":130,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":131,"author":{"gitId":"TongZhengHong"},"content":" public void executeMove(Move move) throws InvalidMoveException {","lastModifiedDate":"2023-10-18"},{"lineNumber":132,"author":{"gitId":"TongZhengHong"},"content":" Coordinate startCoor \u003d move.getFrom();","lastModifiedDate":"2023-10-18"},{"lineNumber":133,"author":{"gitId":"TongZhengHong"},"content":" Coordinate destCoor \u003d move.getTo();","lastModifiedDate":"2023-10-18"},{"lineNumber":134,"author":{"gitId":"TongZhengHong"},"content":" ChessPiece chessPiece \u003d move.getPiece();","lastModifiedDate":"2023-10-18"},{"lineNumber":135,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":136,"author":{"gitId":"ken-ruster"},"content":" Coordinate[][] possibleCoordinates \u003d chessPiece.getAvailableCoordinates(this);","lastModifiedDate":"2023-10-20"},{"lineNumber":137,"author":{"gitId":"TongZhengHong"},"content":" if (!move.isValid(possibleCoordinates)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":138,"author":{"gitId":"TongZhengHong"},"content":" throw new InvalidMoveException();","lastModifiedDate":"2023-10-18"},{"lineNumber":139,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":140,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":141,"author":{"gitId":"TongZhengHong"},"content":" chessPiece.setHasMoved();","lastModifiedDate":"2023-10-22"},{"lineNumber":142,"author":{"gitId":"TongZhengHong"},"content":" chessPiece.updatePosition(destCoor);","lastModifiedDate":"2023-10-19"},{"lineNumber":143,"author":{"gitId":"ken-ruster"},"content":" getTileAtCoor(startCoor).setTileEmpty(startCoor);","lastModifiedDate":"2023-10-20"},{"lineNumber":144,"author":{"gitId":"TongZhengHong"},"content":" getTileAtCoor(destCoor).updateTileChessPiece(chessPiece);","lastModifiedDate":"2023-10-18"},{"lineNumber":145,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":146,"author":{"gitId":"onx001"},"content":" if (move.isLeftCastling()) {","lastModifiedDate":"2023-10-19"},{"lineNumber":147,"author":{"gitId":"onx001"},"content":" Coordinate rookStartCoor \u003d new Coordinate(startCoor.getX() - 4, startCoor.getY());","lastModifiedDate":"2023-10-19"},{"lineNumber":148,"author":{"gitId":"onx001"},"content":" Coordinate rookDestCoor \u003d new Coordinate(startCoor.getX() - 1, startCoor.getY());","lastModifiedDate":"2023-10-19"},{"lineNumber":149,"author":{"gitId":"onx001"},"content":" ChessPiece rook \u003d getTileAtCoor(rookStartCoor).getChessPiece();","lastModifiedDate":"2023-10-19"},{"lineNumber":150,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":151,"author":{"gitId":"TongZhengHong"},"content":" rook.setHasMoved();","lastModifiedDate":"2023-10-22"},{"lineNumber":152,"author":{"gitId":"onx001"},"content":" rook.updatePosition(rookDestCoor);","lastModifiedDate":"2023-10-19"},{"lineNumber":153,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":154,"author":{"gitId":"ken-ruster"},"content":" getTileAtCoor(rookStartCoor).setTileEmpty(rookStartCoor);","lastModifiedDate":"2023-10-20"},{"lineNumber":155,"author":{"gitId":"onx001"},"content":" getTileAtCoor(rookDestCoor).updateTileChessPiece(rook);","lastModifiedDate":"2023-10-19"},{"lineNumber":156,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":157,"author":{"gitId":"onx001"},"content":" } else if (move.isRightCastling()) {","lastModifiedDate":"2023-10-19"},{"lineNumber":158,"author":{"gitId":"onx001"},"content":" Coordinate rookStartCoor \u003d new Coordinate(startCoor.getX() + 3, startCoor.getY());","lastModifiedDate":"2023-10-19"},{"lineNumber":159,"author":{"gitId":"onx001"},"content":" Coordinate rookDestCoor \u003d new Coordinate(startCoor.getX() + 1, startCoor.getY());","lastModifiedDate":"2023-10-19"},{"lineNumber":160,"author":{"gitId":"onx001"},"content":" ChessPiece rook \u003d getTileAtCoor(rookStartCoor).getChessPiece();","lastModifiedDate":"2023-10-19"},{"lineNumber":161,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":162,"author":{"gitId":"TongZhengHong"},"content":" rook.setHasMoved();","lastModifiedDate":"2023-10-22"},{"lineNumber":163,"author":{"gitId":"onx001"},"content":" rook.updatePosition(rookDestCoor);","lastModifiedDate":"2023-10-19"},{"lineNumber":164,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":165,"author":{"gitId":"ken-ruster"},"content":" getTileAtCoor(rookStartCoor).setTileEmpty(rookStartCoor);","lastModifiedDate":"2023-10-20"},{"lineNumber":166,"author":{"gitId":"onx001"},"content":" getTileAtCoor(rookDestCoor).updateTileChessPiece(rook);","lastModifiedDate":"2023-10-19"},{"lineNumber":167,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":168,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":169,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":170,"author":{"gitId":"ken-ruster"},"content":" public boolean canPromote(Move move) {","lastModifiedDate":"2023-10-19"},{"lineNumber":171,"author":{"gitId":"ken-ruster"},"content":" ChessPiece piece \u003d move.getPiece();","lastModifiedDate":"2023-10-19"},{"lineNumber":172,"author":{"gitId":"ken-ruster"},"content":" Coordinate endCoord \u003d move.getTo();","lastModifiedDate":"2023-10-19"},{"lineNumber":173,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":174,"author":{"gitId":"TongZhengHong"},"content":" if (!(piece instanceof Pawn)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":175,"author":{"gitId":"ken-ruster"},"content":" return false;","lastModifiedDate":"2023-10-19"},{"lineNumber":176,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":177,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":178,"author":{"gitId":"TongZhengHong"},"content":" if (Game.isPieceFriendly(piece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":179,"author":{"gitId":"TongZhengHong"},"content":" return endCoord.getY() \u003d\u003d TOP_ROW_INDEX;","lastModifiedDate":"2023-10-22"},{"lineNumber":180,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":181,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":182,"author":{"gitId":"TongZhengHong"},"content":" if (Game.isPieceOpponent(piece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":183,"author":{"gitId":"TongZhengHong"},"content":" return endCoord.getY() \u003d\u003d BOTTOM_ROW_INDEX;","lastModifiedDate":"2023-10-22"},{"lineNumber":184,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":185,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":186,"author":{"gitId":"ken-ruster"},"content":" return false;","lastModifiedDate":"2023-10-19"},{"lineNumber":187,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":188,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":189,"author":{"gitId":"antrikshdhand"},"content":" public ChessTile[][] getBoard() {","lastModifiedDate":"2023-10-19"},{"lineNumber":190,"author":{"gitId":"antrikshdhand"},"content":" return this.board;","lastModifiedDate":"2023-10-19"},{"lineNumber":191,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":192,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":193,"author":{"gitId":"TriciaBK"},"content":" public boolean isEndGame() {","lastModifiedDate":"2023-10-20"},{"lineNumber":194,"author":{"gitId":"TongZhengHong"},"content":" isWhiteKingAlive \u003d false; ","lastModifiedDate":"2023-10-22"},{"lineNumber":195,"author":{"gitId":"TongZhengHong"},"content":" isBlackKingAlive \u003d false;","lastModifiedDate":"2023-10-22"},{"lineNumber":196,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":197,"author":{"gitId":"TriciaBK"},"content":" for (int row \u003d 0; row \u003c ChessBoard.SIZE; row++) {","lastModifiedDate":"2023-10-20"},{"lineNumber":198,"author":{"gitId":"TriciaBK"},"content":" for (int col \u003d 0; col \u003c ChessBoard.SIZE; col++) {","lastModifiedDate":"2023-10-20"},{"lineNumber":199,"author":{"gitId":"TriciaBK"},"content":" Coordinate coor \u003d new Coordinate(col, row);","lastModifiedDate":"2023-10-20"},{"lineNumber":200,"author":{"gitId":"TriciaBK"},"content":" ChessPiece piece \u003d getPieceAtCoor(coor);","lastModifiedDate":"2023-10-20"},{"lineNumber":201,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":202,"author":{"gitId":"TongZhengHong"},"content":" if (piece instanceof King) {","lastModifiedDate":"2023-10-22"},{"lineNumber":203,"author":{"gitId":"TongZhengHong"},"content":" if (piece.isWhite()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":204,"author":{"gitId":"TongZhengHong"},"content":" isWhiteKingAlive \u003d true;","lastModifiedDate":"2023-10-22"},{"lineNumber":205,"author":{"gitId":"TongZhengHong"},"content":" } else if (piece.isBlack()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":206,"author":{"gitId":"TongZhengHong"},"content":" isBlackKingAlive \u003d true;","lastModifiedDate":"2023-10-22"},{"lineNumber":207,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":208,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":209,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":210,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":211,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":212,"author":{"gitId":"TongZhengHong"},"content":" return !isBlackKingAlive || !isWhiteKingAlive;","lastModifiedDate":"2023-10-22"},{"lineNumber":213,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":214,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":215,"author":{"gitId":"TongZhengHong"},"content":" public Color getWinningColor() {","lastModifiedDate":"2023-10-22"},{"lineNumber":216,"author":{"gitId":"TongZhengHong"},"content":" boolean whiteWin \u003d isWhiteKingAlive \u0026\u0026 !isBlackKingAlive;","lastModifiedDate":"2023-10-22"},{"lineNumber":217,"author":{"gitId":"TongZhengHong"},"content":" boolean blackWin \u003d isBlackKingAlive \u0026\u0026 !isWhiteKingAlive;","lastModifiedDate":"2023-10-22"},{"lineNumber":218,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":219,"author":{"gitId":"TongZhengHong"},"content":" if (whiteWin) {","lastModifiedDate":"2023-10-22"},{"lineNumber":220,"author":{"gitId":"TongZhengHong"},"content":" return Color.WHITE;","lastModifiedDate":"2023-10-22"},{"lineNumber":221,"author":{"gitId":"TongZhengHong"},"content":" } else if (blackWin) {","lastModifiedDate":"2023-10-22"},{"lineNumber":222,"author":{"gitId":"TongZhengHong"},"content":" return Color.BLACK;","lastModifiedDate":"2023-10-22"},{"lineNumber":223,"author":{"gitId":"TriciaBK"},"content":" } else {","lastModifiedDate":"2023-10-20"},{"lineNumber":224,"author":{"gitId":"TongZhengHong"},"content":" return Color.EMPTY;","lastModifiedDate":"2023-10-22"},{"lineNumber":225,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":226,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":227,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":26,"antrikshdhand":11,"TriciaBK":20,"onx001":23,"TongZhengHong":147}},{"path":"src/main/java/chessmaster/game/ChessTile.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.game;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.pieces.EmptyPiece;","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.Pawn;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"public class ChessTile {","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" public static final String TILE_DIVIDER \u003d \"|\";","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" private static final String EMPTY_TILE_STRING \u003d \" \";","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" /** Nullable ChessPiece object. Null signifies that this tile is empty */","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" private ChessPiece chessPiece;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"ken-ruster"},"content":" public ChessTile(Coordinate coor) {","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" chessPiece \u003d new EmptyPiece(coor.getX(),coor.getY());","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" public ChessTile(ChessPiece piece) {","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" chessPiece \u003d piece;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" public boolean isEmpty() {","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" return chessPiece.isEmptyPiece();","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"ken-ruster"},"content":" public void setTileEmpty(Coordinate coor) {","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" chessPiece \u003d new EmptyPiece(coor.getX(),coor.getY());","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" * Updates the ChessTile with a new ChessPiece, considering piece interactions. \u003cBR\u003e","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" * 1. Replace the new piece on an EMPTY tile. \u003cBR\u003e","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" * 2. Cannot capture a friendly piece; no change is made UNLESS it is for promotion. \u003cBR\u003e","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" * 3. If new piece captures the opponent piece, mark the opponent piece as captured and replace it. \u003cBR\u003e","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" * @param newPiece The new ChessPiece to place on the tile.","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" public void updateTileChessPiece(ChessPiece newPiece) {","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":" if (chessPiece.isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":" // Move newPiece to empty tile","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" chessPiece \u003d newPiece;","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" } ","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" if (newPiece.isFriendly(chessPiece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" // Only update if friendly pawn piece is promoting","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" if (chessPiece instanceof Pawn \u0026\u0026 newPiece.isPromotionPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" chessPiece \u003d newPiece;","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" return; // Cannot capture friendly piece","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" } ","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":" if (newPiece.isOpponent(chessPiece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" // Mark opponent piece as captured","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" chessPiece.setIsCaptured();","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" chessPiece \u003d newPiece;","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"TongZhengHong"},"content":" public ChessPiece getChessPiece() {","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"TongZhengHong"},"content":" return chessPiece;","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"TongZhengHong"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"TongZhengHong"},"content":" String tileContent \u003d isEmpty() ? EMPTY_TILE_STRING : chessPiece.toString();","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"TongZhengHong"},"content":" return String.format(\"%s %s \", TILE_DIVIDER, tileContent);","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":3,"TongZhengHong":66}},{"path":"src/main/java/chessmaster/game/Color.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.game;","lastModifiedDate":"2023-10-23"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"public enum Color {","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":" WHITE, BLACK, EMPTY;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":" * Get the opposite color given the player\u0027s color.","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" * Used to identify the color for CPU player.","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" * @return The opposite color.","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" public Color getOppositeColour() {","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" if (this \u003d\u003d Color.WHITE) {","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" return Color.BLACK;","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" } else {","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" return Color.WHITE;","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" * Checks if a given color is white. ","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" * @return true if the color is white; false otherwise.","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" public boolean isWhite() {","lastModifiedDate":"2023-10-23"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":" return this \u003d\u003d Color.WHITE;","lastModifiedDate":"2023-10-23"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" * Checks if a given color is black. ","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" * @return true if the color is black; false otherwise.","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" public boolean isBlack() {","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":" return this \u003d\u003d Color.BLACK;","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-23"}],"authorContributionMap":{"TongZhengHong":37}},{"path":"src/main/java/chessmaster/game/Coordinate.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.game;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.exceptions.ParseCoordinateException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"public class Coordinate {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":" private static final String BOARD_COLUMNS \u003d \"abcdefgh\";","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" private int x;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" private int y;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" public Coordinate(int x, int y) {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" if (isCoorOutofBoard(x, y)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" this.x \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" this.y \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" return;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" this.x \u003d x;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" this.y \u003d y;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" public int getX() {","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" return x;","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" public int getY() {","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" return y;","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" public static boolean isCoorOutofBoard(int x, int y) {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" return (x \u003c 0 || x \u003e\u003d ChessBoard.SIZE) || (y \u003c 0 || y \u003e\u003d ChessBoard.SIZE);","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" * Checks if applying a given offset from the current position stays within the","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" * bounds of the chessboard.","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":" * @param offsetX The horizontal offset to apply.","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":" * @param offsetY The vertical offset to apply.","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" * @return true if the resulting position is within the board boundaries;","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" * otherwise, false.","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" public boolean isOffsetWithinBoard(int offsetX, int offsetY) {","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" int newX \u003d x + offsetX;","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" int newY \u003d y + offsetY;","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" return (newX \u003e\u003d 0 \u0026\u0026 newX \u003c ChessBoard.SIZE) \u0026\u0026","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" (newY \u003e\u003d 0 \u0026\u0026 newY \u003c ChessBoard.SIZE);","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":" * Adds the given offsets to the current coordinate and returns the new","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" * coordinate.","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" * @param offsetX The horizontal offset to apply.","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" * @param offsetY The vertical offset to apply.","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":" * @return A new coordinate after applying the offsets, or the current","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"TongZhengHong"},"content":" * coordinate","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"TongZhengHong"},"content":" * if the new position is out of the board boundaries.","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"TongZhengHong"},"content":" public Coordinate addOffsetToCoordinate(int offsetX, int offsetY) {","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"TongZhengHong"},"content":" int newX \u003d x + offsetX;","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"TongZhengHong"},"content":" int newY \u003d y + offsetY;","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"TongZhengHong"},"content":" if (isCoorOutofBoard(newX, newY)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"TongZhengHong"},"content":" return new Coordinate(x, y);","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"TongZhengHong"},"content":" return new Coordinate(newX, newY);","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"TongZhengHong"},"content":" * Parses an algebraic chess coordinate notation (e.g., \"a1\") and returns a","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"TongZhengHong"},"content":" * Coordinate object.","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"TongZhengHong"},"content":" * @param notation The algebraic coordinate notation to parse.","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"TongZhengHong"},"content":" * @return A Coordinate object representing the parsed chess coordinate.","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"TongZhengHong"},"content":" * @throws ParseCoordinateException If the input notation is invalid or out of","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"TongZhengHong"},"content":" * bounds.","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"TongZhengHong"},"content":" public static Coordinate parseAlgebraicCoor(String notation) throws ParseCoordinateException {","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"TongZhengHong"},"content":" notation \u003d notation.toLowerCase();","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"TongZhengHong"},"content":" if (notation.length() !\u003d 2) {","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"TongZhengHong"},"content":" throw new ParseCoordinateException();","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"TongZhengHong"},"content":" String colString \u003d Character.toString(notation.charAt(0));","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"TongZhengHong"},"content":" boolean isColValid \u003d BOARD_COLUMNS.contains(colString);","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"TongZhengHong"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"TongZhengHong"},"content":" String rowString \u003d String.valueOf(notation.charAt(1));","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"TongZhengHong"},"content":" int rowInt \u003d Integer.parseInt(String.valueOf(rowString));","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"TongZhengHong"},"content":" if (rowInt \u003c 1 || rowInt \u003e ChessBoard.SIZE || !isColValid) {","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"TongZhengHong"},"content":" throw new ParseCoordinateException();","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"TongZhengHong"},"content":" int indexX \u003d BOARD_COLUMNS.indexOf(colString); ","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"TongZhengHong"},"content":" int indexY \u003d (rowInt - 8) * -1;","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"TongZhengHong"},"content":" return new Coordinate(indexX, indexY);","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"TongZhengHong"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"TongZhengHong"},"content":" throw new ParseCoordinateException();","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"TongZhengHong"},"content":" public int[] calculateOffsetFrom(Coordinate otherCoordinate) {","lastModifiedDate":"2023-10-22"},{"lineNumber":110,"author":{"gitId":"TongZhengHong"},"content":" int offsetX \u003d this.x - otherCoordinate.getX();","lastModifiedDate":"2023-10-22"},{"lineNumber":111,"author":{"gitId":"TongZhengHong"},"content":" int offsetY \u003d this.y - otherCoordinate.getY();","lastModifiedDate":"2023-10-22"},{"lineNumber":112,"author":{"gitId":"TongZhengHong"},"content":" return new int[]{ offsetX, offsetY };","lastModifiedDate":"2023-10-22"},{"lineNumber":113,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"onx001"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"onx001"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"onx001"},"content":" return String.format(\"%s%d\", BOARD_COLUMNS.charAt(x), (ChessBoard.SIZE - y));","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":119,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":120,"author":{"gitId":"onx001"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"onx001"},"content":" public boolean equals(Object obj) {","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"onx001"},"content":" if (obj instanceof Coordinate) {","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"onx001"},"content":" Coordinate other \u003d (Coordinate) obj;","lastModifiedDate":"2023-10-16"},{"lineNumber":124,"author":{"gitId":"onx001"},"content":" return x \u003d\u003d other.x \u0026\u0026 y \u003d\u003d other.y;","lastModifiedDate":"2023-10-16"},{"lineNumber":125,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":126,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":127,"author":{"gitId":"onx001"},"content":" return false;","lastModifiedDate":"2023-10-16"},{"lineNumber":128,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":129,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":130,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"onx001":15,"TongZhengHong":115}},{"path":"src/main/java/chessmaster/game/Game.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"antrikshdhand"},"content":"package chessmaster.game;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.commands.AbortCommand;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.commands.Command;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.commands.CommandResult;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.commands.MoveCommand;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.exceptions.ChessMasterException;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.storage.Storage;","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.ui.TextUI;","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.user.CPU;","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.user.Human;","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.user.Player;","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":16,"author":{"gitId":"antrikshdhand"},"content":"public class Game {","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" private static Color playerColor; ","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"antrikshdhand"},"content":" private Human human;","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"antrikshdhand"},"content":" private CPU cpu;","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"antrikshdhand"},"content":" private ChessBoard board;","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" private Storage storage;","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":" private Command command;","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" private boolean hasEnded;","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" public Game(Color playerColour, ChessBoard board, Storage storage) {","lastModifiedDate":"2023-10-23"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" this.board \u003d board;","lastModifiedDate":"2023-10-23"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" Game.playerColor \u003d playerColour;","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" this.human \u003d new Human(playerColour, board);","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":" Color cpuColor \u003d playerColour.getOppositeColour();","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" this.cpu \u003d new CPU(cpuColor, board);","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"antrikshdhand"},"content":" public void run() {","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":" board.showChessBoard();","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" while (!hasEnded \u0026\u0026 !AbortCommand.isAbortCommand(command)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" String userInputString \u003d TextUI.getUserInput();","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" command \u003d Parser.parseCommand(userInputString);","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" CommandResult result \u003d command.execute();","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" TextUI.printCommandResult(result);","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" if (!(command instanceof MoveCommand)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" continue; // Take new user command","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" // Input string contains 2 valid coordinates","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" Move humanMove \u003d Parser.parseMove(userInputString, board);","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" hasEnded \u003d processMove(humanMove, human);","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":" if (!hasEnded) {","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"TongZhengHong"},"content":" if (board.canPromote(humanMove)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"TongZhengHong"},"content":" human.handlePromote(board, humanMove);","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"TongZhengHong"},"content":" Move cpuMove \u003d cpu.getRandomMove(board);","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"TongZhengHong"},"content":" processMove(cpuMove, cpu);","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"antrikshdhand"},"content":" board.showChessBoard();","lastModifiedDate":"2023-10-19"},{"lineNumber":68,"author":{"gitId":"TongZhengHong"},"content":" } catch (ChessMasterException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"TongZhengHong"},"content":" TextUI.printErrorMessage(e);","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"antrikshdhand"},"content":" ","lastModifiedDate":"2023-10-19"},{"lineNumber":72,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":73,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"TongZhengHong"},"content":" private boolean processMove(Move move, Player player) throws ChessMasterException {","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"TongZhengHong"},"content":" board.executeMove(move);","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"TongZhengHong"},"content":" player.addMove(move);","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"TongZhengHong"},"content":" storage.saveBoard(board, playerColor);","lastModifiedDate":"2023-10-23"},{"lineNumber":79,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":80,"author":{"gitId":"TongZhengHong"},"content":" boolean end \u003d board.isEndGame();","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"TongZhengHong"},"content":" if (end) {","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"TongZhengHong"},"content":" Color winningColor \u003d board.getWinningColor();","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"TongZhengHong"},"content":" TextUI.printWinnerMessage(winningColor);","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":85,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":86,"author":{"gitId":"TongZhengHong"},"content":" return end;","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":88,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"TriciaBK"},"content":" public void CPUFirstMove(){","lastModifiedDate":"2023-10-23"},{"lineNumber":90,"author":{"gitId":"TriciaBK"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":91,"author":{"gitId":"TriciaBK"},"content":" Move cpuMove \u003d cpu.getRandomMove(board);","lastModifiedDate":"2023-10-23"},{"lineNumber":92,"author":{"gitId":"TriciaBK"},"content":" processMove(cpuMove, cpu);","lastModifiedDate":"2023-10-23"},{"lineNumber":93,"author":{"gitId":"TriciaBK"},"content":" } catch (ChessMasterException e){","lastModifiedDate":"2023-10-23"},{"lineNumber":94,"author":{"gitId":"TriciaBK"},"content":" TextUI.printErrorMessage(e);","lastModifiedDate":"2023-10-23"},{"lineNumber":95,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":96,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":97,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":98,"author":{"gitId":"TongZhengHong"},"content":" public static boolean isPieceFriendly(ChessPiece otherPiece) {","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"TongZhengHong"},"content":" return Game.playerColor \u003d\u003d otherPiece.getColor();","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":101,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"TongZhengHong"},"content":" public static boolean isPieceOpponent(ChessPiece otherPiece) {","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"TongZhengHong"},"content":" return Game.playerColor !\u003d otherPiece.getColor();","lastModifiedDate":"2023-10-22"},{"lineNumber":104,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":105,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":106,"author":{"gitId":"antrikshdhand"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"antrikshdhand":26,"TriciaBK":10,"TongZhengHong":70}},{"path":"src/main/java/chessmaster/game/Move.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ken-ruster"},"content":"package chessmaster.game;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.King;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ken-ruster"},"content":"public class Move {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ken-ruster"},"content":" private Coordinate from;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"ken-ruster"},"content":" private Coordinate to;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"ken-ruster"},"content":" private ChessPiece piece;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ken-ruster"},"content":" public Move(Coordinate from, Coordinate to, ChessPiece piece) {","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"ken-ruster"},"content":" this.from \u003d from;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"ken-ruster"},"content":" this.to \u003d to;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ken-ruster"},"content":" this.piece \u003d piece;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ken-ruster"},"content":" public Coordinate getFrom() {","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"ken-ruster"},"content":" return from;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"ken-ruster"},"content":" public Coordinate getTo() {","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"ken-ruster"},"content":" return to;","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ken-ruster"},"content":" public ChessPiece getPiece() {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ken-ruster"},"content":" return piece;","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"antrikshdhand"},"content":" public void setFrom(Coordinate from) {","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"antrikshdhand"},"content":" this.from \u003d from;","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"antrikshdhand"},"content":" public void setTo(Coordinate to) {","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"antrikshdhand"},"content":" this.to \u003d to;","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"antrikshdhand"},"content":" public void setPiece(ChessPiece piece) {","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"antrikshdhand"},"content":" this.piece \u003d piece;","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" public boolean isValid(Coordinate[][] possibleCoordinates) {","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" for (Coordinate[] direction : possibleCoordinates) {","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" for (Coordinate coor : direction) {","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" if (coor.equals(to)) {","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" return true;","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" return false;","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"onx001"},"content":" public boolean isLeftCastling() {","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" if (!(piece instanceof King)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"TongZhengHong"},"content":" int[] offset \u003d to.calculateOffsetFrom(from);","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"TongZhengHong"},"content":" return Arrays.equals(offset, ChessPiece.CASTLE_LEFT);","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"onx001"},"content":" public boolean isRightCastling() {","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"TongZhengHong"},"content":" if (!(piece instanceof King)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"TongZhengHong"},"content":" return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"TongZhengHong"},"content":" int[] offset \u003d to.calculateOffsetFrom(from);","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"TongZhengHong"},"content":" return Arrays.equals(offset, ChessPiece.CASTLE_RIGHT);","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":71,"author":{"gitId":"ken-ruster"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"ken-ruster":27,"antrikshdhand":12,"onx001":6,"TongZhengHong":26}},{"path":"src/main/java/chessmaster/parser/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TriciaBK"},"content":"import chessmaster.commands.*;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.exceptions.MoveOpponentPieceException;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.exceptions.NullPieceException;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.exceptions.ParseColorException;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.exceptions.ParseCoordinateException;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Color;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Game;","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.Move;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.Bishop;","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.EmptyPiece;","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.King;","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.Knight;","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.Pawn;","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.Queen;","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.Rook;","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":"public class Parser {","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" private static final String ABORT_COMMAND \u003d \"abort\";","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"onx001"},"content":" public Parser() {","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" public static boolean isUserInputAbort(String userInput) {","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" return userInput.trim().toLowerCase().equals(ABORT_COMMAND);","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"ken-ruster"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" * Parses a string telling which chess piece the user wants to promote his piece","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":" * to, and promotes the relevant piece","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"ken-ruster"},"content":" *","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"ken-ruster"},"content":" * @param promoteFrom Chess piece to be promoted.","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"ken-ruster"},"content":" * @param promoteTo String representing the type of piece to be promoted to.","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"ken-ruster"},"content":" * @return Promoted chess piece.","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"ken-ruster"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"ken-ruster"},"content":" public static ChessPiece parsePromote(ChessPiece promoteFrom, String promoteTo) {","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" Color color \u003d promoteFrom.getColor();","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"ken-ruster"},"content":" Coordinate position \u003d promoteFrom.getPosition();","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" switch (promoteTo) {","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"ken-ruster"},"content":" case Bishop.BISHOP_WHITE:","lastModifiedDate":"2023-10-19"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" return new Bishop(position.getY(), position.getX(), color);","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"ken-ruster"},"content":" case Queen.QUEEN_WHITE:","lastModifiedDate":"2023-10-19"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" return new Queen(position.getY(), position.getX(), color);","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"ken-ruster"},"content":" case Knight.KNIGHT_WHITE:","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" return new Knight(position.getY(), position.getX(), color);","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"ken-ruster"},"content":" case Rook.ROOK_WHITE:","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":" return new Rook(position.getY(), position.getX(), color);","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"ken-ruster"},"content":" default:","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"ken-ruster"},"content":" return promoteFrom;","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"ken-ruster"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"TongZhengHong"},"content":" * Parses a chess move from user input and creates a Move object. Used to read","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"TongZhengHong"},"content":" * user inputs during the chess game.","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"ken-ruster"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"TongZhengHong"},"content":" * @param in The user input string with 2 algebraic coordinate notations","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"TongZhengHong"},"content":" * (e.g., \"e2 e4\").","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"TongZhengHong"},"content":" * @param board The ChessBoard where the move is taking place.","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"TongZhengHong"},"content":" * @return Move object containing information about the move to be made.","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"ken-ruster"},"content":" * ","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"TongZhengHong"},"content":" * @throws ParseCoordinateException If the string entered is not in the","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"TongZhengHong"},"content":" * algebraic coordinate notation.","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"TongZhengHong"},"content":" * @throws NullPieceException If there is no piece at the \u0027from\u0027","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"TongZhengHong"},"content":" * coordinate.","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"TongZhengHong"},"content":" * @throws MoveOpponentPieceException","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"ken-ruster"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"TongZhengHong"},"content":" public static Move parseMove(String in, ChessBoard board) throws ParseCoordinateException, ","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"TongZhengHong"},"content":" NullPieceException, MoveOpponentPieceException {","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"TongZhengHong"},"content":" String[] parseArray \u003d in.split(\"\\\\s+\", 2);","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"TongZhengHong"},"content":" if (parseArray.length \u003c 2) {","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"TongZhengHong"},"content":" throw new ParseCoordinateException();","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"TongZhengHong"},"content":" Coordinate from \u003d Coordinate.parseAlgebraicCoor(parseArray[0]);","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"TongZhengHong"},"content":" Coordinate to \u003d Coordinate.parseAlgebraicCoor(parseArray[1]);","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"ken-ruster"},"content":" ChessPiece relevantPiece \u003d board.getPieceAtCoor(from);","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"TongZhengHong"},"content":" if (Game.isPieceOpponent(relevantPiece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"TongZhengHong"},"content":" throw new MoveOpponentPieceException();","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"ken-ruster"},"content":" return new Move(from, to, relevantPiece);","lastModifiedDate":"2023-10-18"},{"lineNumber":91,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"TongZhengHong"},"content":" * Parses an input string and creates a ChessPiece object at the specified row","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"TongZhengHong"},"content":" * and column. Used for loading ChessPiece(s) from storage file or loading","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"TongZhengHong"},"content":" * starting ChessBoard. Returns null for recognised input string to signify that","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"TongZhengHong"},"content":" * piece is empty (for ChessTile)","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"TongZhengHong"},"content":" * @param pieceString The string representation of the chess piece, e.g., \"bB\"","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"TongZhengHong"},"content":" * for black bishop.","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"TongZhengHong"},"content":" * @param row The row where the piece is located.","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"TongZhengHong"},"content":" * @param col The column where the piece is located.","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"TongZhengHong"},"content":" * @return A ChessPiece object representing the parsed chess piece, or null if","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"TongZhengHong"},"content":" * the pieceString is not recognized.","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"TongZhengHong"},"content":" public static ChessPiece parseChessPiece(String pieceString, int row, int col) {","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"TongZhengHong"},"content":" switch (pieceString) {","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"TongZhengHong"},"content":" case Bishop.BISHOP_BLACK:","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"TongZhengHong"},"content":" return new Bishop(row, col, Color.BLACK);","lastModifiedDate":"2023-10-22"},{"lineNumber":110,"author":{"gitId":"TongZhengHong"},"content":" case Bishop.BISHOP_WHITE:","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"TongZhengHong"},"content":" return new Bishop(row, col, Color.WHITE);","lastModifiedDate":"2023-10-22"},{"lineNumber":112,"author":{"gitId":"TongZhengHong"},"content":" case King.KING_BLACK:","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"TongZhengHong"},"content":" return new King(row, col, Color.BLACK);","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"TongZhengHong"},"content":" case King.KING_WHITE:","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"TongZhengHong"},"content":" return new King(row, col, Color.WHITE);","lastModifiedDate":"2023-10-22"},{"lineNumber":116,"author":{"gitId":"TongZhengHong"},"content":" case Queen.QUEEN_BLACK:","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"TongZhengHong"},"content":" return new Queen(row, col, Color.BLACK);","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"TongZhengHong"},"content":" case Queen.QUEEN_WHITE:","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"TongZhengHong"},"content":" return new Queen(row, col, Color.WHITE);","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"TongZhengHong"},"content":" case Knight.KNIGHT_BLACK:","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"TongZhengHong"},"content":" return new Knight(row, col, Color.BLACK);","lastModifiedDate":"2023-10-22"},{"lineNumber":122,"author":{"gitId":"TongZhengHong"},"content":" case Knight.KNIGHT_WHITE:","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"TongZhengHong"},"content":" return new Knight(row, col, Color.WHITE);","lastModifiedDate":"2023-10-22"},{"lineNumber":124,"author":{"gitId":"TongZhengHong"},"content":" case Pawn.PAWN_BLACK:","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"TongZhengHong"},"content":" return new Pawn(row, col, Color.BLACK);","lastModifiedDate":"2023-10-22"},{"lineNumber":126,"author":{"gitId":"TongZhengHong"},"content":" case Pawn.PAWN_WHITE:","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"TongZhengHong"},"content":" return new Pawn(row, col, Color.WHITE);","lastModifiedDate":"2023-10-22"},{"lineNumber":128,"author":{"gitId":"TongZhengHong"},"content":" case Rook.ROOK_BLACK:","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"TongZhengHong"},"content":" return new Rook(row, col, Color.BLACK);","lastModifiedDate":"2023-10-22"},{"lineNumber":130,"author":{"gitId":"TongZhengHong"},"content":" case Rook.ROOK_WHITE:","lastModifiedDate":"2023-10-15"},{"lineNumber":131,"author":{"gitId":"TongZhengHong"},"content":" return new Rook(row, col, Color.WHITE);","lastModifiedDate":"2023-10-22"},{"lineNumber":132,"author":{"gitId":"TongZhengHong"},"content":" default:","lastModifiedDate":"2023-10-15"},{"lineNumber":133,"author":{"gitId":"TongZhengHong"},"content":" return new EmptyPiece(row, col);","lastModifiedDate":"2023-10-22"},{"lineNumber":134,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":135,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":136,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":137,"author":{"gitId":"TongZhengHong"},"content":" public static Command parseCommand(String in) {","lastModifiedDate":"2023-10-22"},{"lineNumber":138,"author":{"gitId":"TongZhengHong"},"content":" String[] splitInputStrings \u003d in.split(\"\\\\s+\", 2);","lastModifiedDate":"2023-10-22"},{"lineNumber":139,"author":{"gitId":"TongZhengHong"},"content":" String commandString \u003d splitInputStrings[0];","lastModifiedDate":"2023-10-22"},{"lineNumber":140,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":141,"author":{"gitId":"TongZhengHong"},"content":" switch (commandString) {","lastModifiedDate":"2023-10-22"},{"lineNumber":142,"author":{"gitId":"TongZhengHong"},"content":" case HelpCommand.HELP_COMAMND_STRING:","lastModifiedDate":"2023-10-22"},{"lineNumber":143,"author":{"gitId":"onx001"},"content":" return new HelpCommand();","lastModifiedDate":"2023-10-19"},{"lineNumber":144,"author":{"gitId":"TriciaBK"},"content":" case RulesCommand.RULES_COMAMND_STRING:","lastModifiedDate":"2023-10-23"},{"lineNumber":145,"author":{"gitId":"TriciaBK"},"content":" return new RulesCommand();","lastModifiedDate":"2023-10-23"},{"lineNumber":146,"author":{"gitId":"TongZhengHong"},"content":" case AbortCommand.ABORT_COMAMND_STRING:","lastModifiedDate":"2023-10-22"},{"lineNumber":147,"author":{"gitId":"onx001"},"content":" return new AbortCommand();","lastModifiedDate":"2023-10-19"},{"lineNumber":148,"author":{"gitId":"onx001"},"content":" default:","lastModifiedDate":"2023-10-19"},{"lineNumber":149,"author":{"gitId":"TongZhengHong"},"content":" return new MoveCommand(in);","lastModifiedDate":"2023-10-22"},{"lineNumber":150,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":151,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":152,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":153,"author":{"gitId":"TongZhengHong"},"content":" public static Color parsePlayerColor(String inputColorString) throws ParseColorException {","lastModifiedDate":"2023-10-23"},{"lineNumber":154,"author":{"gitId":"TongZhengHong"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":155,"author":{"gitId":"TongZhengHong"},"content":" return Color.valueOf(inputColorString);","lastModifiedDate":"2023-10-23"},{"lineNumber":156,"author":{"gitId":"TongZhengHong"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":157,"author":{"gitId":"TongZhengHong"},"content":" throw new ParseColorException();","lastModifiedDate":"2023-10-22"},{"lineNumber":158,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":159,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":160,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":32,"antrikshdhand":1,"TriciaBK":3,"onx001":11,"TongZhengHong":113}},{"path":"src/main/java/chessmaster/pieces/Bishop.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.pieces;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Color;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":"public class Bishop extends ChessPiece {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" public static final String BISHOP_WHITE \u003d \"b\"; // ♗","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" public static final String BISHOP_BLACK \u003d \"B\"; // ♝","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" public static final int[][] DIRECTIONS \u003d {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" UP_LEFT, UP_RIGHT, DOWN_LEFT, DOWN_RIGHT,","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" };","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" public Bishop(int row, int col, Color color) {","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" super(row, col, color);","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"ken-ruster"},"content":" public Coordinate[][] getAvailableCoordinates(ChessBoard board) {","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" Coordinate[][] result \u003d new Coordinate[DIRECTIONS.length][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" for (int dir \u003d 0; dir \u003c DIRECTIONS.length; dir++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":" int offsetX \u003d DIRECTIONS[dir][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" int offsetY \u003d DIRECTIONS[dir][1];","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" int multiplier \u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"onx001"},"content":" boolean isBlocked \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" ArrayList\u003cCoordinate\u003e possibleCoordInDirection \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" while (!isBlocked \u0026\u0026 multiplier \u003c ChessBoard.SIZE \u0026\u0026 position.isOffsetWithinBoard(offsetX, offsetY)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" Coordinate possibleCoord \u003d position.addOffsetToCoordinate(offsetX, offsetY);","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"ken-ruster"},"content":" ChessPiece destPiece \u003d board.getPieceAtCoor(possibleCoord);","lastModifiedDate":"2023-10-20"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" isBlocked \u003d !destPiece.isEmptyPiece();","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" if (destPiece.isEmptyPiece() || isOpponent(destPiece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"onx001"},"content":" possibleCoordInDirection.add(possibleCoord);","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"onx001"},"content":" } ","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" multiplier++;","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" offsetX \u003d DIRECTIONS[dir][0] * multiplier;","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" offsetY \u003d DIRECTIONS[dir][1] * multiplier;","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" // Convert arraylist to array","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d possibleCoordInDirection.toArray(new Coordinate[0]);","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" return result;","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" return color \u003d\u003d Color.BLACK ? BISHOP_BLACK : BISHOP_WHITE;","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":2,"onx001":3,"TongZhengHong":53}},{"path":"src/main/java/chessmaster/pieces/ChessPiece.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.pieces;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Color;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"onx001"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":"public abstract class ChessPiece {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" public static final int[] CASTLE_LEFT \u003d {-2, 0};","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" public static final int[] CASTLE_RIGHT \u003d {2, 0};","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] UP_UP_LEFT \u003d {1, -2}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] UP_UP_RIGHT \u003d {-1, -2}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] DOWN_DOWN_LEFT \u003d {1, 2}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] DOWN_DOWN_RIGHT \u003d {-1, 2}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] LEFT_UP_LEFT \u003d {2, -1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] LEFT_DOWN_LEFT \u003d {2, 1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] RIGHT_UP_RIGHT \u003d {-2, -1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] RIGHT_DOWN_RIGHT \u003d {-2, 1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] UP_UP \u003d {0, -2}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"onx001"},"content":" protected static final int[] DOWN_DOWN \u003d {0, 2};","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] UP \u003d {0, -1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] DOWN \u003d {0, 1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] LEFT \u003d {1, 0};","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] RIGHT \u003d {-1, 0};","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] UP_LEFT \u003d {1, -1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] UP_RIGHT \u003d {-1, -1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] DOWN_LEFT \u003d {1, 1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" protected static final int[] DOWN_RIGHT \u003d {-1, 1}; ","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":" protected Color color;","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" protected Coordinate position;","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"onx001"},"content":" protected Coordinate[][] availableCoordinates;","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"onx001"},"content":" protected boolean hasMoved \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":" protected boolean isCaptured \u003d false;","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" public ChessPiece(int row, int col, Color color) {","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" this.position \u003d new Coordinate(col, row);","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" this.color \u003d color;","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" * Returns available coordinates in multiple directions from the current position. ","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" * The directions are dependent on the chess piece type. Each inner array stores the coordinates that is","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" * in the direction the current chess piece can move to.","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" * @return A 2D array of Coordinate arrays representing available coordinates in different directions.","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"ken-ruster"},"content":" public abstract Coordinate[][] getAvailableCoordinates(ChessBoard board);","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" * Get a flattened array of valid coordinates for the chess piece\u0027s moves based on its available coordinates ","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" * and the current state of the ChessBoard.","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"TongZhengHong"},"content":" * @param board The ChessBoard representing the current game state.","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"TongZhengHong"},"content":" * @return A 1D array of valid coordinates for the piece\u0027s legal moves.","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"ken-ruster"},"content":" public Coordinate[] getFlattenedCoordinates(ChessBoard board) {","lastModifiedDate":"2023-10-20"},{"lineNumber":63,"author":{"gitId":"antrikshdhand"},"content":" Coordinate[][] availableCoordinates \u003d getAvailableCoordinates(board);","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"antrikshdhand"},"content":" ArrayList\u003cCoordinate\u003e flattenedCoordinates \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-19"},{"lineNumber":65,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"antrikshdhand"},"content":" for (Coordinate[] direction : availableCoordinates) {","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"antrikshdhand"},"content":" for (Coordinate possibleCoord : direction) {","lastModifiedDate":"2023-10-19"},{"lineNumber":68,"author":{"gitId":"antrikshdhand"},"content":" if (this.isMoveValid(possibleCoord, board)) {","lastModifiedDate":"2023-10-19"},{"lineNumber":69,"author":{"gitId":"antrikshdhand"},"content":" flattenedCoordinates.add(possibleCoord);","lastModifiedDate":"2023-10-19"},{"lineNumber":70,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":71,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":72,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":73,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":74,"author":{"gitId":"antrikshdhand"},"content":" return flattenedCoordinates.toArray(new Coordinate[0]);","lastModifiedDate":"2023-10-19"},{"lineNumber":75,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":76,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":77,"author":{"gitId":"onx001"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"onx001"},"content":" * Returns the validity of the move to the destination coordinate.","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"onx001"},"content":" * @param destination","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"onx001"},"content":" * @param board","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"onx001"},"content":" * @return","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"onx001"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"ken-ruster"},"content":" public boolean isMoveValid(Coordinate destination, ChessBoard board) {","lastModifiedDate":"2023-10-20"},{"lineNumber":84,"author":{"gitId":"onx001"},"content":" Coordinate[][] availableCoordinates \u003d getAvailableCoordinates(board);","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"onx001"},"content":" for (Coordinate[] direction : availableCoordinates) {","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"onx001"},"content":" for (Coordinate possibleCoord : direction) {","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"onx001"},"content":" if (possibleCoord.equals(destination)) {","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"ken-ruster"},"content":" ChessPiece destPiece \u003d board.getPieceAtCoor(destination);","lastModifiedDate":"2023-10-20"},{"lineNumber":89,"author":{"gitId":"TongZhengHong"},"content":" if (destPiece.isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":90,"author":{"gitId":"onx001"},"content":" return true;","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"TongZhengHong"},"content":" } else if (destPiece.isSameColorAs(this.color)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"onx001"},"content":" return true;","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"onx001"},"content":" return false;","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"ken-ruster"},"content":" public void displayAvailableCoordinates(ChessBoard board) {","lastModifiedDate":"2023-10-20"},{"lineNumber":101,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"onx001"},"content":" System.out.println(\"Available coordinates for \" + this.getClass().getSimpleName() + \" at \" + position + \":\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"onx001"},"content":" Coordinate[][] availableCoordinates \u003d getAvailableCoordinates(board);","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"onx001"},"content":" for (Coordinate[] direction : availableCoordinates) {","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"onx001"},"content":" for (Coordinate possibleCoord : direction) {","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"onx001"},"content":" if (this.isMoveValid(possibleCoord, board)){","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"onx001"},"content":" System.out.print(possibleCoord + \" \");","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":110,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":111,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"onx001"},"content":" System.out.println();","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"ken-ruster"},"content":" public Coordinate getPosition() {","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"ken-ruster"},"content":" return this.position;","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"TriciaBK"},"content":" public void updatePosition(Coordinate newCoordinate) {","lastModifiedDate":"2023-10-18"},{"lineNumber":120,"author":{"gitId":"TriciaBK"},"content":" this.position \u003d newCoordinate;","lastModifiedDate":"2023-10-18"},{"lineNumber":121,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":123,"author":{"gitId":"TongZhengHong"},"content":" public void setHasMoved() {","lastModifiedDate":"2023-10-22"},{"lineNumber":124,"author":{"gitId":"TongZhengHong"},"content":" this.hasMoved \u003d true;","lastModifiedDate":"2023-10-22"},{"lineNumber":125,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":126,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":127,"author":{"gitId":"onx001"},"content":" public boolean getHasMoved() {","lastModifiedDate":"2023-10-19"},{"lineNumber":128,"author":{"gitId":"onx001"},"content":" return this.hasMoved;","lastModifiedDate":"2023-10-19"},{"lineNumber":129,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":130,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":131,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-22"},{"lineNumber":132,"author":{"gitId":"TongZhengHong"},"content":" public String toString() {","lastModifiedDate":"2023-10-22"},{"lineNumber":133,"author":{"gitId":"TongZhengHong"},"content":" return \"ChessPiece [color\u003d\" + color + \", position\u003d\" + position + \"]\";","lastModifiedDate":"2023-10-22"},{"lineNumber":134,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":135,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":136,"author":{"gitId":"TongZhengHong"},"content":" public Color getColor() {","lastModifiedDate":"2023-10-22"},{"lineNumber":137,"author":{"gitId":"TongZhengHong"},"content":" return color;","lastModifiedDate":"2023-10-22"},{"lineNumber":138,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":139,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":140,"author":{"gitId":"TongZhengHong"},"content":" public boolean getIsCaptured() {","lastModifiedDate":"2023-10-22"},{"lineNumber":141,"author":{"gitId":"TongZhengHong"},"content":" return this.isCaptured;","lastModifiedDate":"2023-10-22"},{"lineNumber":142,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":143,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":144,"author":{"gitId":"TongZhengHong"},"content":" public void setIsCaptured() {","lastModifiedDate":"2023-10-22"},{"lineNumber":145,"author":{"gitId":"TongZhengHong"},"content":" this.isCaptured \u003d true;","lastModifiedDate":"2023-10-22"},{"lineNumber":146,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":147,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":148,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":149,"author":{"gitId":"TongZhengHong"},"content":" * Checks if the ChessPiece object has the same color as a given color.","lastModifiedDate":"2023-10-22"},{"lineNumber":150,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":151,"author":{"gitId":"TongZhengHong"},"content":" * @param color The color to compare with the ChessPiece\u0027s color.","lastModifiedDate":"2023-10-22"},{"lineNumber":152,"author":{"gitId":"TongZhengHong"},"content":" * @return true if the ChessPiece has the same color as the provided color; false otherwise.","lastModifiedDate":"2023-10-22"},{"lineNumber":153,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":154,"author":{"gitId":"TongZhengHong"},"content":" public boolean isSameColorAs(Color color) {","lastModifiedDate":"2023-10-22"},{"lineNumber":155,"author":{"gitId":"TongZhengHong"},"content":" if (isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":156,"author":{"gitId":"TongZhengHong"},"content":" return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":157,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":158,"author":{"gitId":"TongZhengHong"},"content":" return this.color \u003d\u003d color;","lastModifiedDate":"2023-10-22"},{"lineNumber":159,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":160,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":161,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":162,"author":{"gitId":"TongZhengHong"},"content":" * Checks if the ChessPiece object is WHTIE.","lastModifiedDate":"2023-10-22"},{"lineNumber":163,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":164,"author":{"gitId":"TongZhengHong"},"content":" * @return true if the ChessPiece is white; false otherwise.","lastModifiedDate":"2023-10-22"},{"lineNumber":165,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":166,"author":{"gitId":"TongZhengHong"},"content":" public boolean isWhite() {","lastModifiedDate":"2023-10-22"},{"lineNumber":167,"author":{"gitId":"TongZhengHong"},"content":" if (isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":168,"author":{"gitId":"TongZhengHong"},"content":" return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":169,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":170,"author":{"gitId":"TongZhengHong"},"content":" return this.color \u003d\u003d Color.WHITE;","lastModifiedDate":"2023-10-22"},{"lineNumber":171,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":172,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":173,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":174,"author":{"gitId":"TongZhengHong"},"content":" * Checks if the ChessPiece object is BLACK.","lastModifiedDate":"2023-10-22"},{"lineNumber":175,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":176,"author":{"gitId":"TongZhengHong"},"content":" * @return true if the ChessPiece is white; false otherwise.","lastModifiedDate":"2023-10-22"},{"lineNumber":177,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":178,"author":{"gitId":"TongZhengHong"},"content":" public boolean isBlack() {","lastModifiedDate":"2023-10-22"},{"lineNumber":179,"author":{"gitId":"TongZhengHong"},"content":" if (isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":180,"author":{"gitId":"TongZhengHong"},"content":" return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":181,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":182,"author":{"gitId":"TongZhengHong"},"content":" return this.color \u003d\u003d Color.BLACK;","lastModifiedDate":"2023-10-22"},{"lineNumber":183,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":184,"author":{"gitId":"antrikshdhand"},"content":" ","lastModifiedDate":"2023-10-19"},{"lineNumber":185,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":186,"author":{"gitId":"TongZhengHong"},"content":" * Checks if the provided ChessPiece object is friendly (has the same color) as the current ChessPiece.","lastModifiedDate":"2023-10-22"},{"lineNumber":187,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":188,"author":{"gitId":"TongZhengHong"},"content":" * @param chessPiece The ChessPiece to compare with.","lastModifiedDate":"2023-10-22"},{"lineNumber":189,"author":{"gitId":"TongZhengHong"},"content":" * @return true if the provided ChessPiece is friendly; false otherwise.","lastModifiedDate":"2023-10-22"},{"lineNumber":190,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":191,"author":{"gitId":"TongZhengHong"},"content":" public boolean isFriendly(ChessPiece chessPiece) {","lastModifiedDate":"2023-10-22"},{"lineNumber":192,"author":{"gitId":"TongZhengHong"},"content":" if (isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":193,"author":{"gitId":"TongZhengHong"},"content":" return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":194,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":195,"author":{"gitId":"TongZhengHong"},"content":" return chessPiece.color \u003d\u003d this.color;","lastModifiedDate":"2023-10-22"},{"lineNumber":196,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":197,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":198,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":199,"author":{"gitId":"TongZhengHong"},"content":" * Checks if the provided ChessPiece is an opponent (has a different color) compared to the current ChessPiece.","lastModifiedDate":"2023-10-22"},{"lineNumber":200,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":201,"author":{"gitId":"TongZhengHong"},"content":" * @param chessPiece The ChessPiece to compare with.","lastModifiedDate":"2023-10-22"},{"lineNumber":202,"author":{"gitId":"TongZhengHong"},"content":" * @return true if the provided ChessPiece is an opponent; false otherwise.","lastModifiedDate":"2023-10-22"},{"lineNumber":203,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":204,"author":{"gitId":"TongZhengHong"},"content":" public boolean isOpponent(ChessPiece chessPiece) {","lastModifiedDate":"2023-10-22"},{"lineNumber":205,"author":{"gitId":"TongZhengHong"},"content":" if (isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":206,"author":{"gitId":"TongZhengHong"},"content":" return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":207,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":208,"author":{"gitId":"TongZhengHong"},"content":" return chessPiece.color !\u003d this.color;","lastModifiedDate":"2023-10-22"},{"lineNumber":209,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":210,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":211,"author":{"gitId":"TongZhengHong"},"content":" public boolean isEmptyPiece() {","lastModifiedDate":"2023-10-22"},{"lineNumber":212,"author":{"gitId":"TongZhengHong"},"content":" return this instanceof EmptyPiece;","lastModifiedDate":"2023-10-22"},{"lineNumber":213,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":214,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":215,"author":{"gitId":"TongZhengHong"},"content":" public boolean isPromotionPiece() {","lastModifiedDate":"2023-10-22"},{"lineNumber":216,"author":{"gitId":"TongZhengHong"},"content":" return this instanceof Queen || this instanceof Rook ","lastModifiedDate":"2023-10-22"},{"lineNumber":217,"author":{"gitId":"TongZhengHong"},"content":" || this instanceof Bishop || this instanceof Knight;","lastModifiedDate":"2023-10-22"},{"lineNumber":218,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":219,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":11,"antrikshdhand":16,"TriciaBK":4,"onx001":54,"TongZhengHong":134}},{"path":"src/main/java/chessmaster/pieces/EmptyPiece.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ken-ruster"},"content":"package chessmaster.pieces;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Color;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"ken-ruster"},"content":"public class EmptyPiece extends ChessPiece{","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" public static final String EMPTY_PIECE \u003d \".\";","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" public EmptyPiece(int row, int col){","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" super(row, col, Color.EMPTY);","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"ken-ruster"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"ken-ruster"},"content":" public Coordinate[][] getAvailableCoordinates(ChessBoard board) {","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"ken-ruster"},"content":" return new Coordinate[0][];","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-23"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" public String toString() {","lastModifiedDate":"2023-10-23"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" return EMPTY_PIECE;","lastModifiedDate":"2023-10-23"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-23"},{"lineNumber":25,"author":{"gitId":"ken-ruster"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"ken-ruster":16,"TongZhengHong":9}},{"path":"src/main/java/chessmaster/pieces/King.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.pieces;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Color;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"public class King extends ChessPiece {","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" public static final String KING_WHITE \u003d \"k\"; // ♔","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" public static final String KING_BLACK \u003d \"K\"; // ♚","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" public static final int[][] DIRECTIONS \u003d {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"onx001"},"content":" UP, DOWN, LEFT, RIGHT, UP_LEFT, UP_RIGHT, DOWN_LEFT, DOWN_RIGHT, CASTLE_LEFT, CASTLE_RIGHT","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" };","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" public King(int row, int col, Color color) {","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" super(row, col, color);","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"ken-ruster"},"content":" public Coordinate[][] getAvailableCoordinates(ChessBoard board) {","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" Coordinate[][] result \u003d new Coordinate[DIRECTIONS.length][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" for (int dir \u003d 0; dir \u003c DIRECTIONS.length; dir++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" int offsetX \u003d DIRECTIONS[dir][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" int offsetY \u003d DIRECTIONS[dir][1];","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" if (!position.isOffsetWithinBoard(offsetX, offsetY)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" continue; // Possible coordinate out of board","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" Coordinate newCoor \u003d position.addOffsetToCoordinate(offsetX, offsetY);","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" ChessPiece destPiece \u003d board.getPieceAtCoor(newCoor);","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" if (DIRECTIONS[dir] \u003d\u003d CASTLE_LEFT) {","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"ken-ruster"},"content":" Coordinate pos1 \u003d position.addOffsetToCoordinate(-1, 0);","lastModifiedDate":"2023-10-20"},{"lineNumber":36,"author":{"gitId":"ken-ruster"},"content":" Coordinate pos2 \u003d position.addOffsetToCoordinate(-2, 0);","lastModifiedDate":"2023-10-20"},{"lineNumber":37,"author":{"gitId":"ken-ruster"},"content":" Coordinate pos3 \u003d position.addOffsetToCoordinate(-3, 0);","lastModifiedDate":"2023-10-20"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" Coordinate rookPos \u003d position.addOffsetToCoordinate(-4, 0);","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":" boolean hasRookMoved \u003d board.getPieceAtCoor(rookPos).hasMoved;","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" boolean isSidesEmpty \u003d board.getPieceAtCoor(pos1).isEmptyPiece() ","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" \u0026\u0026 board.getPieceAtCoor(pos2).isEmptyPiece() ","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" \u0026\u0026 board.getPieceAtCoor(pos3).isEmptyPiece();","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" if (isSidesEmpty \u0026\u0026 !hasRookMoved \u0026\u0026 !hasMoved) {","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d new Coordinate[]{ newCoor };","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" } else if (DIRECTIONS[dir] \u003d\u003d CASTLE_RIGHT) {","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"ken-ruster"},"content":" Coordinate pos1 \u003d position.addOffsetToCoordinate(+1, 0);","lastModifiedDate":"2023-10-20"},{"lineNumber":51,"author":{"gitId":"ken-ruster"},"content":" Coordinate pos2 \u003d position.addOffsetToCoordinate(+2, 0);","lastModifiedDate":"2023-10-20"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" Coordinate rookPos \u003d position.addOffsetToCoordinate(+3, 0);","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" boolean hasRookMoved \u003d board.getPieceAtCoor(rookPos).hasMoved;","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" boolean isSidesEmpty \u003d board.getPieceAtCoor(pos1).isEmptyPiece() ","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" \u0026\u0026 board.getPieceAtCoor(pos2).isEmptyPiece();","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":" if (isSidesEmpty \u0026\u0026 !hasRookMoved \u0026\u0026 !hasMoved) {","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d new Coordinate[]{ newCoor };","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"TongZhengHong"},"content":" } else { // Normal or capture move","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"TongZhengHong"},"content":" if (destPiece.isEmptyPiece() || isOpponent(destPiece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d new Coordinate[] { position.addOffsetToCoordinate(offsetX, offsetY) };","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":67,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"TongZhengHong"},"content":" return result;","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"TongZhengHong"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"TongZhengHong"},"content":" return color \u003d\u003d Color.BLACK ? KING_BLACK : KING_WHITE;","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":12,"onx001":5,"TongZhengHong":60}},{"path":"src/main/java/chessmaster/pieces/Knight.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.pieces;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Color;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"public class Knight extends ChessPiece {","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" public static final String KNIGHT_WHITE \u003d \"n\"; // ♘","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" public static final String KNIGHT_BLACK \u003d \"N\"; // ♞","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" public static final int[][] DIRECTIONS \u003d {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" UP_UP_LEFT, UP_UP_RIGHT, DOWN_DOWN_LEFT, DOWN_DOWN_RIGHT,","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" LEFT_UP_LEFT, LEFT_DOWN_LEFT, RIGHT_UP_RIGHT, RIGHT_DOWN_RIGHT,","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" };","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" public Knight(int row, int col, Color color) {","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" super(row, col, color);","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"onx001"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"onx001"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" return color \u003d\u003d Color.BLACK ? KNIGHT_BLACK : KNIGHT_WHITE;","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"ken-ruster"},"content":" public Coordinate[][] getAvailableCoordinates(ChessBoard board) {","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" Coordinate[][] result \u003d new Coordinate[DIRECTIONS.length][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" for (int dir \u003d 0; dir \u003c DIRECTIONS.length; dir++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" int offsetX \u003d DIRECTIONS[dir][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" int offsetY \u003d DIRECTIONS[dir][1];","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" if (!position.isOffsetWithinBoard(offsetX, offsetY)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" continue; // Possible coordinate out of board","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" Coordinate newCoor \u003d position.addOffsetToCoordinate(offsetX, offsetY);","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" ChessPiece destPiece \u003d board.getPieceAtCoor(newCoor);","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":" if (destPiece.isEmptyPiece() || isOpponent(destPiece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d new Coordinate[]{ newCoor };","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" return result;","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"ken-ruster"},"content":" ","lastModifiedDate":"2023-10-20"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":4,"onx001":5,"TongZhengHong":39}},{"path":"src/main/java/chessmaster/pieces/Pawn.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.pieces;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Color;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Game;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"public class Pawn extends ChessPiece {","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" public static final String PAWN_WHITE \u003d \"p\"; // ♙","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" public static final String PAWN_BLACK \u003d \"P\"; // ♟","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" public static final int[][] DIRECTIONS_UP \u003d {","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" UP_LEFT, UP_RIGHT, UP, UP_UP,","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" };","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" public static final int[][] DIRECTIONS_DOWN \u003d {","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"onx001"},"content":" DOWN_LEFT, DOWN_RIGHT, DOWN, DOWN_DOWN,","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"onx001"},"content":" };","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" protected boolean enPassed \u003d false;","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" public Pawn(int row, int col, Color color) {","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" super(row, col, color);","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"ken-ruster"},"content":" public Coordinate[][] getAvailableCoordinates(ChessBoard board) {","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" Coordinate[][] result \u003d new Coordinate[DIRECTIONS_UP.length][0];","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" int[][] directions \u003d Game.isPieceFriendly(this) ? DIRECTIONS_UP : DIRECTIONS_DOWN;","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" for (int dir \u003d 0; dir \u003c DIRECTIONS_UP.length; dir++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"ken-ruster"},"content":" int offsetX \u003d directions[dir][0];","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"ken-ruster"},"content":" int offsetY \u003d directions[dir][1];","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" if (!position.isOffsetWithinBoard(offsetX, offsetY)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":" continue; // Possible coordinate out of board","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" Coordinate newCoor \u003d position.addOffsetToCoordinate(offsetX, offsetY);","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":" ChessPiece destPiece \u003d board.getPieceAtCoor(newCoor);","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" if (directions[dir] \u003d\u003d UP_LEFT || directions[dir] \u003d\u003d UP_RIGHT || ","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" directions[dir] \u003d\u003d DOWN_LEFT || directions[dir] \u003d\u003d DOWN_RIGHT) {","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" // Diagonal move: Destination tile has opponent piece","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" if (!destPiece.isEmptyPiece() \u0026\u0026 isOpponent(destPiece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d new Coordinate[]{ newCoor };","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" } else if (directions[dir] \u003d\u003d UP || directions[dir] \u003d\u003d DOWN) {","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" // Normal move: when destination tile is empty","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" if (destPiece.isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d new Coordinate[]{ newCoor };","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" } else if (directions[dir] \u003d\u003d UP_UP || directions[dir] \u003d\u003d DOWN_DOWN) {","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" // Double move: first move AND when destination empty AND no blocking piece","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" Coordinate blockPos \u003d Game.isPieceFriendly(this) ","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" ? position.addOffsetToCoordinate(UP[0], UP[1])","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":" : position.addOffsetToCoordinate(DOWN[0], DOWN[1]); ","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"ken-ruster"},"content":" ChessPiece blockPiece \u003d board.getPieceAtCoor(blockPos);","lastModifiedDate":"2023-10-20"},{"lineNumber":60,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"TongZhengHong"},"content":" if (!hasMoved \u0026\u0026 blockPiece.isEmptyPiece() \u0026\u0026 destPiece.isEmptyPiece()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d new Coordinate[]{ newCoor };","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":65,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"onx001"},"content":" return result;","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"onx001"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"onx001"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"TongZhengHong"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"TongZhengHong"},"content":" return color \u003d\u003d Color.BLACK ? PAWN_BLACK : PAWN_WHITE;","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":75,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":7,"onx001":14,"TongZhengHong":54}},{"path":"src/main/java/chessmaster/pieces/Queen.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.pieces;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Color;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":"public class Queen extends ChessPiece {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" public static final String QUEEN_WHITE \u003d \"q\"; // ♕","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" public static final String QUEEN_BLACK \u003d \"Q\"; // ♛","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" public static final int[][] DIRECTIONS \u003d {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" UP, DOWN, LEFT, RIGHT, UP_LEFT, UP_RIGHT, DOWN_LEFT, DOWN_RIGHT,","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" };","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" public Queen(int row, int col, Color color) {","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" super(row, col, color);","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"ken-ruster"},"content":" public Coordinate[][] getAvailableCoordinates(ChessBoard board) {","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" Coordinate[][] result \u003d new Coordinate[DIRECTIONS.length][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" for (int dir \u003d 0; dir \u003c DIRECTIONS.length; dir++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":" int offsetX \u003d DIRECTIONS[dir][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" int offsetY \u003d DIRECTIONS[dir][1];","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" int multiplier \u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" boolean isBlocked \u003d false;","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" ArrayList\u003cCoordinate\u003e possibleCoordInDirection \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" while (!isBlocked \u0026\u0026 multiplier \u003c ChessBoard.SIZE \u0026\u0026 position.isOffsetWithinBoard(offsetX, offsetY)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":" Coordinate possibleCoord \u003d position.addOffsetToCoordinate(offsetX, offsetY);","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"ken-ruster"},"content":" ChessPiece destPiece \u003d board.getPieceAtCoor(possibleCoord);","lastModifiedDate":"2023-10-20"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" isBlocked \u003d !destPiece.isEmptyPiece();","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":" if (destPiece.isEmptyPiece() || isOpponent(destPiece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"onx001"},"content":" possibleCoordInDirection.add(possibleCoord);","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"onx001"},"content":" } ","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" multiplier++;","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" offsetX \u003d DIRECTIONS[dir][0] * multiplier;","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" offsetY \u003d DIRECTIONS[dir][1] * multiplier;","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" // Convert arraylist to array","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d possibleCoordInDirection.toArray(new Coordinate[0]);","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" return result;","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" return color \u003d\u003d Color.BLACK ? QUEEN_BLACK : QUEEN_WHITE;","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":2,"onx001":2,"TongZhengHong":55}},{"path":"src/main/java/chessmaster/pieces/Rook.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.pieces;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Color;","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":"public class Rook extends ChessPiece {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" public static final String ROOK_WHITE \u003d \"r\"; // ♖","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" public static final String ROOK_BLACK \u003d \"R\"; // ♜","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" public static final int[][] DIRECTIONS \u003d {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" UP, DOWN, LEFT, RIGHT,","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" };","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":" public Rook(int row, int col, Color color) {","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" super(row, col, color);","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"ken-ruster"},"content":" public Coordinate[][] getAvailableCoordinates(ChessBoard board) {","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" Coordinate[][] result \u003d new Coordinate[DIRECTIONS.length][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" for (int dir \u003d 0; dir \u003c DIRECTIONS.length; dir++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":" int offsetX \u003d DIRECTIONS[dir][0];","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" int offsetY \u003d DIRECTIONS[dir][1];","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" int multiplier \u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"onx001"},"content":" boolean isBlocked \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" ArrayList\u003cCoordinate\u003e possibleCoordInDirection \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" while (!isBlocked \u0026\u0026 multiplier \u003c ChessBoard.SIZE \u0026\u0026 position.isOffsetWithinBoard(offsetX, offsetY)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":" Coordinate possibleCoord \u003d position.addOffsetToCoordinate(offsetX, offsetY);","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"ken-ruster"},"content":" ChessPiece destPiece \u003d board.getPieceAtCoor(possibleCoord);","lastModifiedDate":"2023-10-20"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" isBlocked \u003d !destPiece.isEmptyPiece();","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":" if (destPiece.isEmptyPiece() || isOpponent(destPiece)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"onx001"},"content":" possibleCoordInDirection.add(possibleCoord);","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"onx001"},"content":" } ","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" multiplier++;","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" offsetX \u003d DIRECTIONS[dir][0] * multiplier;","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" offsetY \u003d DIRECTIONS[dir][1] * multiplier;","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" // Convert arraylist to array","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" result[dir] \u003d possibleCoordInDirection.toArray(new Coordinate[0]);","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" return result;","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" return color \u003d\u003d Color.BLACK ? ROOK_BLACK : ROOK_WHITE;","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":2,"onx001":3,"TongZhengHong":54}},{"path":"src/main/java/chessmaster/storage/Storage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TriciaBK"},"content":"package chessmaster.storage;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.exceptions.ChessMasterException;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"TriciaBK"},"content":"import chessmaster.exceptions.LoadBoardException;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.exceptions.ParseColorException;","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"TriciaBK"},"content":"import chessmaster.exceptions.SaveBoardException;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"TriciaBK"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"TriciaBK"},"content":"import chessmaster.game.ChessTile;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Color;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"TriciaBK"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.parser.Parser;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"TriciaBK"},"content":"import java.io.File;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"TriciaBK"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"TriciaBK"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"TriciaBK"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"TriciaBK"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"TriciaBK"},"content":"public class Storage {","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" private String filePathString;","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" private File storageFile;","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"TriciaBK"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":" filePathString \u003d filePath;","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" storageFile \u003d new File(filePath);","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" assert !filePathString.isEmpty() \u0026\u0026 filePath !\u003d null : \"File path cannot be empty or null\";","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" * Creates a ChessMaster program file to store game state, including necessary parent directories.","lastModifiedDate":"2023-10-23"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" * @throws ChessMasterException If there is an error creating the file or parent directories.","lastModifiedDate":"2023-10-23"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" private void createChessMasterFile() throws ChessMasterException {","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" // Create the necessary parent directories for new file","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" if (!storageFile.exists()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":" storageFile.getParentFile().mkdirs();","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" // Create file if it does not exist","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" storageFile.createNewFile();","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" throw new ChessMasterException(\"Fatal: Error creating file: \" + filePathString + \" Exiting ChessMaster\");","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"TriciaBK"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" * Saves the state of the ChessBoard to a file. Writes the player\u0027s color to the first line ","lastModifiedDate":"2023-10-23"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" * and subsequently chess pieces in a 8 x 8 format.","lastModifiedDate":"2023-10-23"},{"lineNumber":53,"author":{"gitId":"TriciaBK"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" * @param board The ChessBoard to save.","lastModifiedDate":"2023-10-23"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" * @param playerColor The color of the current player.","lastModifiedDate":"2023-10-23"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":" * @throws ChessMasterException If there is an error saving the board to a file.","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"TriciaBK"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":" public void saveBoard(ChessBoard board, Color playerColor) throws ChessMasterException {","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"TongZhengHong"},"content":" createChessMasterFile();","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":61,"author":{"gitId":"TongZhengHong"},"content":" try {","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"TongZhengHong"},"content":" FileWriter fileWriter \u003d new FileWriter(storageFile);","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"TongZhengHong"},"content":" fileWriter.write(playerColor.name());","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"TongZhengHong"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"TongZhengHong"},"content":" for (int row \u003d 0; row \u003c ChessBoard.SIZE; row++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"TongZhengHong"},"content":" for (int col \u003d 0; col \u003c ChessBoard.SIZE; col++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"TriciaBK"},"content":" ChessPiece piece \u003d board.getPieceAtCoor(new Coordinate(col, row));","lastModifiedDate":"2023-10-20"},{"lineNumber":69,"author":{"gitId":"TongZhengHong"},"content":" fileWriter.write(piece.toString());","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"TongZhengHong"},"content":" fileWriter.write(System.lineSeparator());","lastModifiedDate":"2023-10-23"},{"lineNumber":72,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"TongZhengHong"},"content":" fileWriter.close();","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"TriciaBK"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"TriciaBK"},"content":" throw new SaveBoardException();","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"TriciaBK"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":81,"author":{"gitId":"TongZhengHong"},"content":" * Loads the state of the chessboard from a file. ","lastModifiedDate":"2023-10-23"},{"lineNumber":82,"author":{"gitId":"TongZhengHong"},"content":" * Ignores the first line player color information as it can be retrieved with loadPlayerColor() method","lastModifiedDate":"2023-10-23"},{"lineNumber":83,"author":{"gitId":"TriciaBK"},"content":" *","lastModifiedDate":"2023-10-20"},{"lineNumber":84,"author":{"gitId":"TongZhengHong"},"content":" * @return A 2D array of ChessTile objects representing the loaded chessboard.","lastModifiedDate":"2023-10-23"},{"lineNumber":85,"author":{"gitId":"TongZhengHong"},"content":" * @throws ChessMasterException If there is an error loading the board from the file.","lastModifiedDate":"2023-10-23"},{"lineNumber":86,"author":{"gitId":"TriciaBK"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":87,"author":{"gitId":"TongZhengHong"},"content":" public ChessTile[][] loadBoard() throws ChessMasterException {","lastModifiedDate":"2023-10-23"},{"lineNumber":88,"author":{"gitId":"TongZhengHong"},"content":" createChessMasterFile();","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"TongZhengHong"},"content":" Scanner fileScanner;","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"TriciaBK"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"TongZhengHong"},"content":" fileScanner \u003d new Scanner(storageFile);","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"TongZhengHong"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"TongZhengHong"},"content":" throw new LoadBoardException(\"Invalid file path: \" + filePathString);","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"TongZhengHong"},"content":" // Skip player color on first line","lastModifiedDate":"2023-10-23"},{"lineNumber":98,"author":{"gitId":"TongZhengHong"},"content":" if (fileScanner.hasNext()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"TongZhengHong"},"content":" fileScanner.nextLine();","lastModifiedDate":"2023-10-23"},{"lineNumber":100,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"TongZhengHong"},"content":" int rowIndex \u003d 0;","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"TongZhengHong"},"content":" ChessTile[][] boardTiles \u003d new ChessTile[ChessBoard.SIZE][ChessBoard.SIZE];","lastModifiedDate":"2023-10-22"},{"lineNumber":104,"author":{"gitId":"TongZhengHong"},"content":" while (rowIndex \u003c ChessBoard.SIZE \u0026\u0026 fileScanner.hasNext()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":105,"author":{"gitId":"TongZhengHong"},"content":" String chessRowLine \u003d fileScanner.nextLine();","lastModifiedDate":"2023-10-22"},{"lineNumber":106,"author":{"gitId":"TongZhengHong"},"content":" if (chessRowLine.length() !\u003d ChessBoard.SIZE) {","lastModifiedDate":"2023-10-22"},{"lineNumber":107,"author":{"gitId":"TongZhengHong"},"content":" fileScanner.close();","lastModifiedDate":"2023-10-22"},{"lineNumber":108,"author":{"gitId":"TriciaBK"},"content":" throw new LoadBoardException();","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"TriciaBK"},"content":" for (int col \u003d 0; col \u003c ChessBoard.SIZE; col++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"TongZhengHong"},"content":" String chessPieceString \u003d String.valueOf(chessRowLine.charAt(col));","lastModifiedDate":"2023-10-22"},{"lineNumber":113,"author":{"gitId":"TongZhengHong"},"content":" ChessPiece initialPiece \u003d Parser.parseChessPiece(chessPieceString, rowIndex, col);","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"TongZhengHong"},"content":" boardTiles[rowIndex][col] \u003d new ChessTile(initialPiece);","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"TongZhengHong"},"content":" rowIndex++;","lastModifiedDate":"2023-10-22"},{"lineNumber":117,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":119,"author":{"gitId":"TongZhengHong"},"content":" fileScanner.close();","lastModifiedDate":"2023-10-18"},{"lineNumber":120,"author":{"gitId":"TongZhengHong"},"content":" return boardTiles;","lastModifiedDate":"2023-10-23"},{"lineNumber":121,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":122,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":123,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-23"},{"lineNumber":124,"author":{"gitId":"TongZhengHong"},"content":" * Loads the player\u0027s color from a file. ","lastModifiedDate":"2023-10-23"},{"lineNumber":125,"author":{"gitId":"TongZhengHong"},"content":" * Expects the player color information on the first line of text file.","lastModifiedDate":"2023-10-23"},{"lineNumber":126,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-23"},{"lineNumber":127,"author":{"gitId":"TongZhengHong"},"content":" * @return The player\u0027s color as a Color enumeration.","lastModifiedDate":"2023-10-23"},{"lineNumber":128,"author":{"gitId":"TongZhengHong"},"content":" * @throws ChessMasterException If there is an error loading the player\u0027s color from the file.","lastModifiedDate":"2023-10-23"},{"lineNumber":129,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-23"},{"lineNumber":130,"author":{"gitId":"TongZhengHong"},"content":" public Color loadPlayerColor() throws ChessMasterException {","lastModifiedDate":"2023-10-23"},{"lineNumber":131,"author":{"gitId":"TongZhengHong"},"content":" createChessMasterFile();","lastModifiedDate":"2023-10-23"},{"lineNumber":132,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":133,"author":{"gitId":"TongZhengHong"},"content":" Scanner fileScanner;","lastModifiedDate":"2023-10-23"},{"lineNumber":134,"author":{"gitId":"TongZhengHong"},"content":" try {","lastModifiedDate":"2023-10-23"},{"lineNumber":135,"author":{"gitId":"TongZhengHong"},"content":" fileScanner \u003d new Scanner(storageFile);","lastModifiedDate":"2023-10-23"},{"lineNumber":136,"author":{"gitId":"TongZhengHong"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-10-23"},{"lineNumber":137,"author":{"gitId":"TongZhengHong"},"content":" throw new LoadBoardException(\"Invalid file path: \" + filePathString);","lastModifiedDate":"2023-10-23"},{"lineNumber":138,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":139,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":140,"author":{"gitId":"TongZhengHong"},"content":" if (fileScanner.hasNext()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":141,"author":{"gitId":"TongZhengHong"},"content":" String colorLine \u003d fileScanner.nextLine();","lastModifiedDate":"2023-10-23"},{"lineNumber":142,"author":{"gitId":"TongZhengHong"},"content":" Color playerColor \u003d Parser.parsePlayerColor(colorLine);","lastModifiedDate":"2023-10-23"},{"lineNumber":143,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":144,"author":{"gitId":"TongZhengHong"},"content":" fileScanner.close();","lastModifiedDate":"2023-10-23"},{"lineNumber":145,"author":{"gitId":"TongZhengHong"},"content":" return playerColor;","lastModifiedDate":"2023-10-23"},{"lineNumber":146,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":147,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":148,"author":{"gitId":"TongZhengHong"},"content":" fileScanner.close();","lastModifiedDate":"2023-10-23"},{"lineNumber":149,"author":{"gitId":"TongZhengHong"},"content":" throw new ParseColorException();","lastModifiedDate":"2023-10-23"},{"lineNumber":150,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":151,"author":{"gitId":"TriciaBK"},"content":"}","lastModifiedDate":"2023-10-17"},{"lineNumber":152,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"TriciaBK":46,"TongZhengHong":106}},{"path":"src/main/java/chessmaster/ui/TextUI.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster.ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.commands.CommandResult;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.ChessTile;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Color;","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"antrikshdhand"},"content":"public final class TextUI {","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" public static final String CHESS_BOARD_DIVIDER \u003d \"_\".repeat(4 * ChessBoard.SIZE + 1);","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" private static final String COLUMN_HEADER \u003d \"abcdefgh\";","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" * Format of a comment input line. Comment lines are silently consumed when","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" * reading user input.","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" private static final String COMMENT_LINE_FORMAT_REGEX \u003d \"#.*\";","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"antrikshdhand"},"content":" private static final Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"antrikshdhand"},"content":" private static final PrintStream out \u003d System.out;","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" * Prompts for the command and reads the text entered by the user.","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" * Ignores empty, pure whitespace, and comment lines.","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" * ","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" * @return user input string in LOWER case","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"antrikshdhand"},"content":" public static String getUserInput() {","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" String fullInputLine \u003d scanner.nextLine().trim();","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":" // silently consume all ignored lines","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" while (shouldIgnore(fullInputLine)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" fullInputLine \u003d scanner.nextLine();","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" return fullInputLine.toLowerCase();","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" * Returns true if the user input line should be ignored.","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" * Input should be ignored if it is parsed as a comment, is only whitespace, or","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" * is empty.","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" * @param rawInputLine full raw user input line.","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" * @return true if the entire user input line should be ignored.","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"antrikshdhand"},"content":" private static boolean shouldIgnore(String rawInputLine) {","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":" boolean isCommentLine \u003d rawInputLine.trim().matches(COMMENT_LINE_FORMAT_REGEX);","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"TongZhengHong"},"content":" return rawInputLine.trim().isEmpty() || isCommentLine;","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"TongZhengHong"},"content":" public static void printWelcomeMessage() {","lastModifiedDate":"2023-10-23"},{"lineNumber":58,"author":{"gitId":"TongZhengHong"},"content":" for (String line : UiMessages.WELCOME_MESSAGE) {","lastModifiedDate":"2023-10-23"},{"lineNumber":59,"author":{"gitId":"TongZhengHong"},"content":" out.println(line);","lastModifiedDate":"2023-10-23"},{"lineNumber":60,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":61,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":62,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":63,"author":{"gitId":"TongZhengHong"},"content":" public static void promptPrevGame() {","lastModifiedDate":"2023-10-23"},{"lineNumber":64,"author":{"gitId":"TongZhengHong"},"content":" out.print(UiMessages.EXIST_PREV_GAME_MESSAGE);","lastModifiedDate":"2023-10-23"},{"lineNumber":65,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":67,"author":{"gitId":"TongZhengHong"},"content":" public static void promptStartingColor() {","lastModifiedDate":"2023-10-23"},{"lineNumber":68,"author":{"gitId":"TongZhengHong"},"content":" out.print(UiMessages.CHOOSE_PLAYER_COLOR_MESSAGE);","lastModifiedDate":"2023-10-23"},{"lineNumber":69,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-23"},{"lineNumber":70,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":71,"author":{"gitId":"ken-ruster"},"content":" public static void printPromotePrompt(Coordinate coord){","lastModifiedDate":"2023-10-19"},{"lineNumber":72,"author":{"gitId":"ken-ruster"},"content":" String message \u003d String.format(UiMessages.PROMPT_PROMOTE_MESSAGE, coord.toString());","lastModifiedDate":"2023-10-19"},{"lineNumber":73,"author":{"gitId":"ken-ruster"},"content":" out.println(message);","lastModifiedDate":"2023-10-19"},{"lineNumber":74,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":75,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":76,"author":{"gitId":"ken-ruster"},"content":" public static void printPromoteInvalidMessage(){","lastModifiedDate":"2023-10-19"},{"lineNumber":77,"author":{"gitId":"ken-ruster"},"content":" out.println(UiMessages.PROMPT_PROMOTE_INVALID_MESSAGE);","lastModifiedDate":"2023-10-19"},{"lineNumber":78,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":79,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":80,"author":{"gitId":"antrikshdhand"},"content":" public static void printChessBoardDivider() {","lastModifiedDate":"2023-10-19"},{"lineNumber":81,"author":{"gitId":"TongZhengHong"},"content":" out.println(CHESS_BOARD_DIVIDER);","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"antrikshdhand"},"content":" public static void printChessBoardHeader() {","lastModifiedDate":"2023-10-19"},{"lineNumber":85,"author":{"gitId":"TongZhengHong"},"content":" for (int i \u003d 0; i \u003c COLUMN_HEADER.length(); i++) {","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"TongZhengHong"},"content":" char col \u003d COLUMN_HEADER.charAt(i);","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"antrikshdhand"},"content":" out.printf(\" (%s)\", col);","lastModifiedDate":"2023-10-19"},{"lineNumber":88,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"TongZhengHong"},"content":" out.println(\"\");","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"antrikshdhand"},"content":" public static void printChessBoardRow(int rowNum, String chessBoardRow) {","lastModifiedDate":"2023-10-19"},{"lineNumber":93,"author":{"gitId":"TongZhengHong"},"content":" out.print(chessBoardRow);","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"TongZhengHong"},"content":" out.print(ChessTile.TILE_DIVIDER);","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"TongZhengHong"},"content":" out.print(String.format(\" (%d)\", rowNum));","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"TongZhengHong"},"content":" out.print(System.lineSeparator() + CHESS_BOARD_DIVIDER);","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"TongZhengHong"},"content":" out.println(\"\");","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"TongZhengHong"},"content":" public static void printCommandResult(CommandResult result) {","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"TongZhengHong"},"content":" String[] messages \u003d result.getMessageStrings();","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"TongZhengHong"},"content":" for (String message : messages) {","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"TongZhengHong"},"content":" out.println(message);","lastModifiedDate":"2023-10-22"},{"lineNumber":104,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":105,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":106,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":107,"author":{"gitId":"antrikshdhand"},"content":" public static void printErrorMessage(Exception e) {","lastModifiedDate":"2023-10-19"},{"lineNumber":108,"author":{"gitId":"TongZhengHong"},"content":" out.println(e.getMessage());","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":110,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":111,"author":{"gitId":"TongZhengHong"},"content":" public static void printWinnerMessage(Color colour){","lastModifiedDate":"2023-10-22"},{"lineNumber":112,"author":{"gitId":"TongZhengHong"},"content":" if (colour.isBlack()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":113,"author":{"gitId":"TongZhengHong"},"content":" out.println(\"BLACK Wins!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"TongZhengHong"},"content":" } else if (colour.isWhite()) {","lastModifiedDate":"2023-10-23"},{"lineNumber":115,"author":{"gitId":"TongZhengHong"},"content":" out.println(\"WHITE Wins!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":116,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":117,"author":{"gitId":"TriciaBK"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":118,"author":{"gitId":"TriciaBK"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":119,"author":{"gitId":"TongZhengHong"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ken-ruster":10,"antrikshdhand":10,"TriciaBK":3,"TongZhengHong":96}},{"path":"src/main/java/chessmaster/ui/UiMessages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ken-ruster"},"content":"package chessmaster.ui;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"ken-ruster"},"content":"public class UiMessages {","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":" public static final String[] WELCOME_MESSAGE \u003d {","lastModifiedDate":"2023-10-23"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":" \"Welcome to: \",","lastModifiedDate":"2023-10-23"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":" \" ________ __ ___ __ \",","lastModifiedDate":"2023-10-23"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":" \" / ____/ /_ ___ __________ / |/ /___ ______/ /____ _____\",","lastModifiedDate":"2023-10-23"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":" \" / / / __ \\\\/ _ \\\\/ ___/ ___/ / /|_/ / __ `/ ___/ __/ _ \\\\/ ___/\",","lastModifiedDate":"2023-10-23"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":" \" / /___/ / / / __(__ |__ ) / / / / /_/ (__ ) /_/ __/ / \",","lastModifiedDate":"2023-10-23"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":" \" \\\\____/_/ /_/\\\\___/____/____/ /_/ /_/\\\\__,_/____/\\\\__/\\\\___/_/ \",","lastModifiedDate":"2023-10-23"},{"lineNumber":12,"author":{"gitId":"TongZhengHong"},"content":" };","lastModifiedDate":"2023-10-23"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" public static final String EXIST_PREV_GAME_MESSAGE \u003d \"Looks like you have a previous chess game ongoing. \" +","lastModifiedDate":"2023-10-23"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" \"Would you like to continue? [y/n]\";","lastModifiedDate":"2023-10-23"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" public static final String CHOOSE_PLAYER_COLOR_MESSAGE \u003d \"Choose your starting color to start new game! [b/w]\";","lastModifiedDate":"2023-10-23"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-23"},{"lineNumber":18,"author":{"gitId":"ken-ruster"},"content":" public static final String PROMPT_PROMOTE_MESSAGE \u003d \"You can promote the pawn at %s! \\n\" +","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"ken-ruster"},"content":" \"Please choose what to promote it to:\";","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"ken-ruster"},"content":" public static final String PROMPT_PROMOTE_INVALID_MESSAGE \u003d \"Oops, we couldn\u0027t promote your piece!\";","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"ken-ruster"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"ken-ruster":7,"TongZhengHong":14}},{"path":"src/main/java/chessmaster/user/CPU.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"antrikshdhand"},"content":"package chessmaster.user;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Color;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.game.Move;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"antrikshdhand"},"content":"import java.util.Random;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"antrikshdhand"},"content":"public class CPU extends Player {","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"TongZhengHong"},"content":" private static final int MAX_LOOP_ITERATIONS \u003d 16;","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" private static final int RANDOM_SEED \u003d 100;","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" private final Random rand \u003d new Random(RANDOM_SEED);","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" public CPU(Color colour, ChessBoard board) {","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" super(colour, board);","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"antrikshdhand"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"antrikshdhand"},"content":" * The main function behind the CPU\u0027s logic, this function randomly selects an active (non-captured) piece","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"antrikshdhand"},"content":" * from the CPU\u0027s pieces which has possible valid moves.","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"antrikshdhand"},"content":" * @param board The board to extract the random move from.","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"antrikshdhand"},"content":" * @return A random move","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"antrikshdhand"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":28,"author":{"gitId":"antrikshdhand"},"content":" public Move getRandomMove(ChessBoard board) {","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"antrikshdhand"},"content":" // 1. Get a random piece that","lastModifiedDate":"2023-10-19"},{"lineNumber":30,"author":{"gitId":"antrikshdhand"},"content":" // - isn\u0027t captured","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"antrikshdhand"},"content":" // - has possible legal moves","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"antrikshdhand"},"content":" ChessPiece randomPiece \u003d getRandomPiece();","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"antrikshdhand"},"content":" // Need a cap on the number of pieces it checks to prevent an infinite loop when no moves are possible","lastModifiedDate":"2023-10-19"},{"lineNumber":35,"author":{"gitId":"antrikshdhand"},"content":" // on the CPUs side.","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"antrikshdhand"},"content":" int iter \u003d 0;","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"antrikshdhand"},"content":" while (iter \u003c MAX_LOOP_ITERATIONS","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" \u0026\u0026 (randomPiece.getIsCaptured()","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"ken-ruster"},"content":" || randomPiece.getFlattenedCoordinates(board).length \u003d\u003d 0)) {","lastModifiedDate":"2023-10-20"},{"lineNumber":40,"author":{"gitId":"antrikshdhand"},"content":" randomPiece \u003d getRandomPiece();","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"antrikshdhand"},"content":" iter++;","lastModifiedDate":"2023-10-19"},{"lineNumber":42,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":43,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":44,"author":{"gitId":"antrikshdhand"},"content":" return getRandomMoveFromPiece(randomPiece, board);","lastModifiedDate":"2023-10-19"},{"lineNumber":45,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":47,"author":{"gitId":"antrikshdhand"},"content":" private ChessPiece getRandomPiece() {","lastModifiedDate":"2023-10-19"},{"lineNumber":48,"author":{"gitId":"antrikshdhand"},"content":" return this.pieces.get(rand.nextInt(pieces.size()));","lastModifiedDate":"2023-10-19"},{"lineNumber":49,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"antrikshdhand"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":52,"author":{"gitId":"antrikshdhand"},"content":" * This function returns any random valid move that a given piece can make on a given board.","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"antrikshdhand"},"content":" * @param piece The piece to extract a random move from.","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"antrikshdhand"},"content":" * @param board The board the piece is currently on.","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"antrikshdhand"},"content":" * @return A random move the given piece can make on the given board.","lastModifiedDate":"2023-10-19"},{"lineNumber":56,"author":{"gitId":"antrikshdhand"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"antrikshdhand"},"content":" private Move getRandomMoveFromPiece(ChessPiece piece, ChessBoard board) {","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"ken-ruster"},"content":" Coordinate[] allPossibleMoves \u003d piece.getFlattenedCoordinates(board);","lastModifiedDate":"2023-10-20"},{"lineNumber":59,"author":{"gitId":"TongZhengHong"},"content":" int randIndex \u003d rand.nextInt(allPossibleMoves.length);","lastModifiedDate":"2023-10-20"},{"lineNumber":60,"author":{"gitId":"TongZhengHong"},"content":" Coordinate randomDestination \u003d allPossibleMoves[randIndex];","lastModifiedDate":"2023-10-20"},{"lineNumber":61,"author":{"gitId":"antrikshdhand"},"content":" return new Move(piece.getPosition(), randomDestination, piece);","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":64,"author":{"gitId":"antrikshdhand"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"ken-ruster":2,"antrikshdhand":52,"TongZhengHong":10}},{"path":"src/main/java/chessmaster/user/Human.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"antrikshdhand"},"content":"package chessmaster.user;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Color;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Move;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.pieces.Pawn;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.ui.TextUI;","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"antrikshdhand"},"content":"public class Human extends Player {","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"TongZhengHong"},"content":" public Human(Color colour, ChessBoard board) {","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" super(colour, board);","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" * Prompts the user to enter a type of piece to promote a pawn to. If the","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" * promotion is not successful,","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" * the user is prompted again. If successful, the pawn is replaced with the new","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" * piece.","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"TongZhengHong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"TongZhengHong"},"content":" * @param board Chessboard that the game is being played on.","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" * @param promoteMove The piece being promoted.","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" public void handlePromote(ChessBoard board, Move promoteMove) {","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"TongZhengHong"},"content":" ChessPiece pawnPiece \u003d promoteMove.getPiece();","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" if (!(pawnPiece instanceof Pawn)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"TongZhengHong"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"TongZhengHong"},"content":" board.showChessBoard();","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" Coordinate coord \u003d pawnPiece.getPosition();","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"TongZhengHong"},"content":" boolean promoteFailure \u003d true;","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"TongZhengHong"},"content":" do {","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"TongZhengHong"},"content":" TextUI.printPromotePrompt(coord);","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"TongZhengHong"},"content":" String in \u003d TextUI.getUserInput();","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" ChessPiece promotedPiece \u003d Parser.parsePromote(pawnPiece, in);","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" promoteFailure \u003d promotedPiece instanceof Pawn;","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":" if (promoteFailure) {","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"TongZhengHong"},"content":" TextUI.printPromoteInvalidMessage();","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" promotedPiece.setHasMoved();","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" this.pieces.add(promotedPiece);","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"TongZhengHong"},"content":" this.pieces.remove(pawnPiece);","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"TongZhengHong"},"content":" board.setPromotionPiece(coord, promotedPiece);","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" } while (promoteFailure);","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"antrikshdhand"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"antrikshdhand":7,"TongZhengHong":48}},{"path":"src/main/java/chessmaster/user/Player.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"antrikshdhand"},"content":"package chessmaster.user;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.game.ChessBoard;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Color;","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.game.Coordinate;","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.game.Move;","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"antrikshdhand"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"antrikshdhand"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":11,"author":{"gitId":"antrikshdhand"},"content":"public abstract class Player {","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"antrikshdhand"},"content":" protected ArrayList\u003cMove\u003e moves;","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"antrikshdhand"},"content":" protected ArrayList\u003cChessPiece\u003e pieces;","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" protected Color colour;","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"antrikshdhand"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"TongZhengHong"},"content":" * A player is a dependency of the Game class. This class stores all move","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"TongZhengHong"},"content":" * history, all current pieces, and colour of each player. ","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"TongZhengHong"},"content":" * It also contains functions to request input from the user for the next ","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"TongZhengHong"},"content":" * move and to execute that move.","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"TongZhengHong"},"content":" * ","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"antrikshdhand"},"content":" * @param colour The ChessPiece.Colour desired for this player.","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"antrikshdhand"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"TongZhengHong"},"content":" public Player(Color colour, ChessBoard board) {","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"TongZhengHong"},"content":" this.moves \u003d new ArrayList\u003cMove\u003e();","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"TongZhengHong"},"content":" this.pieces \u003d new ArrayList\u003cChessPiece\u003e();","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"antrikshdhand"},"content":" this.colour \u003d colour;","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"TongZhengHong"},"content":" initialisePieces(board);","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":31,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"antrikshdhand"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"antrikshdhand"},"content":" * Adds a given move into the Player\u0027s move history.","lastModifiedDate":"2023-10-19"},{"lineNumber":34,"author":{"gitId":"TongZhengHong"},"content":" * ","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"antrikshdhand"},"content":" * @param move The given move to be added to history.","lastModifiedDate":"2023-10-19"},{"lineNumber":36,"author":{"gitId":"antrikshdhand"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":37,"author":{"gitId":"antrikshdhand"},"content":" public void addMove(Move move) {","lastModifiedDate":"2023-10-19"},{"lineNumber":38,"author":{"gitId":"antrikshdhand"},"content":" this.moves.add(move);","lastModifiedDate":"2023-10-19"},{"lineNumber":39,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":40,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":41,"author":{"gitId":"TongZhengHong"},"content":" public Color getColour() {","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"TongZhengHong"},"content":" return this.colour;","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"antrikshdhand"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":46,"author":{"gitId":"TongZhengHong"},"content":" * Adds all the player\u0027s pieces to their ChessPiece array ","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"TongZhengHong"},"content":" * when Player is initialised.","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"TongZhengHong"},"content":" * ","lastModifiedDate":"2023-10-20"},{"lineNumber":49,"author":{"gitId":"antrikshdhand"},"content":" * @param board The new ChessBoard containing all 32 chess pieces.","lastModifiedDate":"2023-10-19"},{"lineNumber":50,"author":{"gitId":"antrikshdhand"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":51,"author":{"gitId":"TongZhengHong"},"content":" private void initialisePieces(ChessBoard board) {","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"TongZhengHong"},"content":" for (int row \u003d 0; row \u003c ChessBoard.SIZE; row++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"TongZhengHong"},"content":" for (int col \u003d 0; col \u003c ChessBoard.SIZE; col++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"antrikshdhand"},"content":" ChessPiece piece \u003d board.getPieceAtCoor(new Coordinate(col, row));","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"TongZhengHong"},"content":" if (piece.isSameColorAs(this.colour)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"antrikshdhand"},"content":" this.pieces.add(piece);","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":58,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":60,"author":{"gitId":"antrikshdhand"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":61,"author":{"gitId":"antrikshdhand"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":62,"author":{"gitId":"antrikshdhand"},"content":" /**","lastModifiedDate":"2023-10-19"},{"lineNumber":63,"author":{"gitId":"TongZhengHong"},"content":" * Prints out all the player\u0027s pieces including whether it has been captured or","lastModifiedDate":"2023-10-20"},{"lineNumber":64,"author":{"gitId":"TongZhengHong"},"content":" * not.","lastModifiedDate":"2023-10-20"},{"lineNumber":65,"author":{"gitId":"antrikshdhand"},"content":" * Used for debugging purposes only.","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"antrikshdhand"},"content":" */","lastModifiedDate":"2023-10-19"},{"lineNumber":67,"author":{"gitId":"antrikshdhand"},"content":" public void printAllPieces() {","lastModifiedDate":"2023-10-19"},{"lineNumber":68,"author":{"gitId":"antrikshdhand"},"content":" for (ChessPiece p : pieces) {","lastModifiedDate":"2023-10-19"},{"lineNumber":69,"author":{"gitId":"antrikshdhand"},"content":" System.out.println(\"Piece: \" + p);","lastModifiedDate":"2023-10-19"},{"lineNumber":70,"author":{"gitId":"TongZhengHong"},"content":" System.out.println(\"Colour: \" + p.getColor().toString());","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"TongZhengHong"},"content":" System.out.println(\"Is captured: \" + p.getIsCaptured());","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"TongZhengHong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"TongZhengHong"},"content":" // /**","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"TongZhengHong"},"content":" // * High-level function which calls necessary APIs to request user input and","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"TongZhengHong"},"content":" // * parse it into a Move object.","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"TongZhengHong"},"content":" // * ","lastModifiedDate":"2023-10-22"},{"lineNumber":79,"author":{"gitId":"TongZhengHong"},"content":" // * @param board The board which to make the move on.","lastModifiedDate":"2023-10-22"},{"lineNumber":80,"author":{"gitId":"TongZhengHong"},"content":" // * @return null if the user inputs \"abort\", an empty Move if an error occurred","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"TongZhengHong"},"content":" // * during parsing, otherwise return the requested Move object.","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"TongZhengHong"},"content":" // */","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"TongZhengHong"},"content":" // public Move getNextMove(ChessBoard board) {","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"TongZhengHong"},"content":" // String input \u003d TextUI.getUserInput(); // Get user input","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"TongZhengHong"},"content":" // try {","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"TongZhengHong"},"content":" // Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"TongZhengHong"},"content":" // Command command \u003d parser.parseCommand(input, board);","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"TongZhengHong"},"content":" // if (command instanceof AbortCommand) {","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"TongZhengHong"},"content":" // return null;","lastModifiedDate":"2023-10-22"},{"lineNumber":90,"author":{"gitId":"TongZhengHong"},"content":" // }","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"TongZhengHong"},"content":" // return command.getMove();","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"TongZhengHong"},"content":" ","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"TongZhengHong"},"content":" // } catch (ParseCoordinateException | NullPieceException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"TongZhengHong"},"content":" // TextUI.printErrorMessage(e);","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"TongZhengHong"},"content":" // }","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"TongZhengHong"},"content":" // return new Move();","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"TongZhengHong"},"content":" // }","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"TongZhengHong"},"content":" // /**","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"TongZhengHong"},"content":" // * Allows a player to execute a move and add it to their history.","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"TongZhengHong"},"content":" // * ","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"TongZhengHong"},"content":" // * @param move The move to be executed.","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"TongZhengHong"},"content":" // * @param board The board the move is to be executed on.","lastModifiedDate":"2023-10-22"},{"lineNumber":104,"author":{"gitId":"TongZhengHong"},"content":" // * @return true on success, false on InvalidMoveException","lastModifiedDate":"2023-10-22"},{"lineNumber":105,"author":{"gitId":"TongZhengHong"},"content":" // */","lastModifiedDate":"2023-10-22"},{"lineNumber":106,"author":{"gitId":"TongZhengHong"},"content":" // public boolean move(Move move, ChessBoard board) {","lastModifiedDate":"2023-10-22"},{"lineNumber":107,"author":{"gitId":"TongZhengHong"},"content":" // try {","lastModifiedDate":"2023-10-22"},{"lineNumber":108,"author":{"gitId":"TongZhengHong"},"content":" // board.executeMove(move);","lastModifiedDate":"2023-10-22"},{"lineNumber":109,"author":{"gitId":"TongZhengHong"},"content":" // this.addMove(move);","lastModifiedDate":"2023-10-22"},{"lineNumber":110,"author":{"gitId":"TongZhengHong"},"content":" // if (board.canPromote(move)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":111,"author":{"gitId":"TongZhengHong"},"content":" // promote(board, board.getPieceAtCoor(move.getTo()));","lastModifiedDate":"2023-10-22"},{"lineNumber":112,"author":{"gitId":"TongZhengHong"},"content":" // }","lastModifiedDate":"2023-10-22"},{"lineNumber":113,"author":{"gitId":"TongZhengHong"},"content":" // } catch (InvalidMoveException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"TongZhengHong"},"content":" // e.printStackTrace();","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"TongZhengHong"},"content":" // return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":116,"author":{"gitId":"TongZhengHong"},"content":" // } catch (NullPieceException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":117,"author":{"gitId":"TongZhengHong"},"content":" // return false;","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"TongZhengHong"},"content":" // }","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"TongZhengHong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"TongZhengHong"},"content":" // return true;","lastModifiedDate":"2023-10-22"},{"lineNumber":121,"author":{"gitId":"TongZhengHong"},"content":" // }","lastModifiedDate":"2023-10-22"},{"lineNumber":122,"author":{"gitId":"antrikshdhand"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"antrikshdhand":45,"TongZhengHong":77}},{"path":"src/test/java/chessmaster/ChessMasterTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"TongZhengHong"},"content":"package chessmaster;","lastModifiedDate":"2023-10-14"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"onx001"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"TongZhengHong"},"content":"class ChessMasterTest {","lastModifiedDate":"2023-10-14"},{"lineNumber":9,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":" public void sampleTest() {","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":" assertTrue(true);","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"onx001"},"content":" assertFalse(false);","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"onx001":2,"TongZhengHong":2,"-":10}},{"path":"src/test/java/chessmaster/parser/ParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ken-ruster"},"content":"package chessmaster.parser;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"TongZhengHong"},"content":"import chessmaster.game.Color;","lastModifiedDate":"2023-10-23"},{"lineNumber":4,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.pieces.ChessPiece;","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.pieces.Pawn;","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"ken-ruster"},"content":"import chessmaster.pieces.Queen;","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"ken-ruster"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"ken-ruster"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-20"},{"lineNumber":10,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"ken-ruster"},"content":"public class ParserTest {","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"ken-ruster"},"content":" @Test","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"ken-ruster"},"content":" public void promoteTest(){","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"TongZhengHong"},"content":" ChessPiece promoted \u003d Parser.parsePromote(new Pawn(0, 0, Color.WHITE), \"q\");","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"ken-ruster"},"content":" assertEquals(promoted.toString(), Queen.QUEEN_WHITE);","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"ken-ruster"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"ken-ruster"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"ken-ruster"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"ken-ruster":17,"TongZhengHong":2}}] diff --git a/AY2324S1-CS2113-T18-1_tp_master/commits.json b/AY2324S1-CS2113-T18-1_tp_master/commits.json index 42bcaa7..615e155 100644 --- a/AY2324S1-CS2113-T18-1_tp_master/commits.json +++ b/AY2324S1-CS2113-T18-1_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"ken-ruster":[{"date":"2023-10-05","commitResults":[{"hash":"faf542c932dc8c668aff0ec933dabdff06d14b84","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"6e59d9b754ad45058c2079c92e49c7e3018eabd4","isMergeCommit":false,"messageTitle":"Add question mark","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"8a501b95c2b2abe506ad139c3c31aebceb2fb205","isMergeCommit":true,"messageTitle":"Merge pull request #1 from ken-ruster/branch-test","messageBody":"Add question mark","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"f1ff0f7411762e6f7165868f47bc046d3c53ef57","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AY2324S1-CS2113-T18-1/master","messageBody":"Merge template commits","fileTypesAndContributionMap":{}},{"hash":"65189450fa76a75657d7196b52644045e1a5cd0b","isMergeCommit":false,"messageTitle":"Add Move class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":0}}},{"hash":"c26acb544fbc894759c3fa25710b2309afbb3112","isMergeCommit":false,"messageTitle":"Add getPieceAtCoor for ChessBoard","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"f25704646d91a0357e8feba59d6930ae51fe34f4","isMergeCommit":false,"messageTitle":"Add parseMove to Parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":0}}},{"hash":"b6a41564720327fc4a2f4918e8ffab6d85bf61f6","isMergeCommit":true,"messageTitle":"Merge pull request #9 from ken-ruster/master","messageBody":"Add Move, parseMove, getPieceAtCoor","fileTypesAndContributionMap":{}},{"hash":"7bce486c240254f0df114f0b7c98550c07fd87e3","isMergeCommit":false,"messageTitle":"Add exception to handle invalid moves","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":0}}},{"hash":"adf441fe87620d6c32a057bd929bf5649861a7ee","isMergeCommit":false,"messageTitle":"Add placeholder movePiece() function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"36b657b73341f5386dcbddde151d1cd8b417590e","isMergeCommit":false,"messageTitle":"Parser.java: Add ParseCommand function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":10}}},{"hash":"5c3dcaac28b2874d45e7b11eca8bc53914f195dd","isMergeCommit":false,"messageTitle":"Update message for InvalidMoveException","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"aad8c9191d3d81e12fc1a3d26a0e90353127740c","isMergeCommit":false,"messageTitle":"Update documentation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":7}}},{"hash":"c01a71e62fea28af6635422189d4179e321ae0dc","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"be3d08b56f3db7bab6e6dd2c0d07610386e5733e","isMergeCommit":true,"messageTitle":"Merge pull request #12 from ken-ruster/master","messageBody":"Add parseCommand","fileTypesAndContributionMap":{}},{"hash":"0733fc344115ccba632803263803c4e51e00ab8f","isMergeCommit":false,"messageTitle":"Update Parser to work with executeMove","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":5}}},{"hash":"cc4d6742f26ea5ee50dd98a646bc948f7614dff7","isMergeCommit":true,"messageTitle":"Merge pull request #13 from ken-ruster/master","messageBody":"Update Parser to work with executeMove","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"cc1de14b8dbd21ae323f79c66791d60fba907572","isMergeCommit":true,"messageTitle":"Merge pull request #2 from AY2324S1-CS2113-T18-1/master","messageBody":"Update","fileTypesAndContributionMap":{}},{"hash":"2f537195a96090920c3263243b6d72f2571a61e5","isMergeCommit":false,"messageTitle":"Add parsePromote","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":0}}},{"hash":"e8af2c24700f59a9ea4243a776584a100d4e2cdd","isMergeCommit":true,"messageTitle":"Merge pull request #22 from ken-ruster/parse-promote","messageBody":"Add parsePromote","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"1b8f09fa06caa73c93ceaf4bd7325f96e830d188","isMergeCommit":false,"messageTitle":"Optimise parseMove","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":4}}},{"hash":"abb3d1280718214199edb41df98078071f0b9f44","isMergeCommit":false,"messageTitle":"Modify Move to expose only piece","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":7}}},{"hash":"8c2e65cd475e0074d35b12b4e5b2ad8e99c9d21f","isMergeCommit":true,"messageTitle":"Merge pull request #23 from ken-ruster/parse-promote","messageBody":"Modify Move class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"8bcff2098b9526763e0cc36ec2391aa7d764de7b","isMergeCommit":true,"messageTitle":"Merge pull request #3 from AY2324S1-CS2113-T18-1/master","messageBody":"Update","fileTypesAndContributionMap":{}},{"hash":"d17246f0048e71e2293e8174fc5b557e3a5a021a","isMergeCommit":true,"messageTitle":"Merge pull request #4 from AY2324S1-CS2113-T18-1/master","messageBody":"Update","fileTypesAndContributionMap":{}},{"hash":"fe5200d7c19a4cd9021b625b6b8ab83bb56a4385","isMergeCommit":false,"messageTitle":"Add promotion function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":111,"deletions":36}}},{"hash":"aee0fdb2217b2711ece98c83d9c3f359cd57cd35","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into promote","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9b929ea7cccd3f42ef18b9938cf55287e7743840","isMergeCommit":true,"messageTitle":"Merge pull request #35 from ken-ruster/promote","messageBody":"Add promote","fileTypesAndContributionMap":{}},{"hash":"130c73447825d8722992d68eb30ae1a6554b72a4","isMergeCommit":true,"messageTitle":"Merge pull request #5 from AY2324S1-CS2113-T18-1/master","messageBody":"Update","fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"10aa63e2dcaaeb83ac98cb5a2c8307f2137ac15c","isMergeCommit":false,"messageTitle":"Refactor to replace ChessTile[][] with ChessBoard","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":236,"deletions":165}}},{"hash":"180b17f79b261c4f3e88a68b6e76b2a754973308","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into inputChange","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b3e2b227dc0be3412277f0edd95d51ffe3636940","isMergeCommit":true,"messageTitle":"Merge pull request #41 from ken-ruster/inputChange","messageBody":"Convert ChessTile 2D Array to ChessBoard Objects within getAvailableCoordinates method of ChessPiece objects","fileTypesAndContributionMap":{}},{"hash":"e0234d99755f86ccd0fefd92c524df38f63bb1f5","isMergeCommit":true,"messageTitle":"Merge pull request #6 from AY2324S1-CS2113-T18-1/master","messageBody":"Update","fileTypesAndContributionMap":{}},{"hash":"8b8a824082cf7a375a459b10a01ad0afec07369c","isMergeCommit":false,"messageTitle":"Fix bug in executeMove","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"71a9826f5af8b9a526398f92ab08efce1eaf57e1","isMergeCommit":true,"messageTitle":"Merge pull request #43 from ken-ruster/castling-fix","messageBody":"Fix bug from merge","fileTypesAndContributionMap":{}},{"hash":"4c4abc0175d821e56e9ad6ff226c3f6af6d1d02f","isMergeCommit":true,"messageTitle":"Merge pull request #7 from AY2324S1-CS2113-T18-1/master","messageBody":"update","fileTypesAndContributionMap":{}},{"hash":"950cd9421835d5d7cffe4f5ab388778553c5b704","isMergeCommit":false,"messageTitle":"Fix bug causing all moves to evaluate invalid","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":7}}},{"hash":"9719431bb9cc2c798dc3ad1d940641c09262591f","isMergeCommit":false,"messageTitle":"Fix checkStyle violations","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":67,"deletions":70}}},{"hash":"c799155550c6b18fe27328d60f294b5d7f5c0c29","isMergeCommit":true,"messageTitle":"Merge pull request #46 from ken-ruster/bugfix","messageBody":"Bugfix","fileTypesAndContributionMap":{}},{"hash":"6d82fdd693fb388a57751b397bbde643d804babd","isMergeCommit":true,"messageTitle":"Merge pull request #8 from AY2324S1-CS2113-T18-1/master","messageBody":"Update","fileTypesAndContributionMap":{}},{"hash":"124550cac18d24dbdbc47af118d2a8084dc352bb","isMergeCommit":false,"messageTitle":"Add jUnit test for parsePromote","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":18,"deletions":0}}},{"hash":"74fa224b6e6a52bf56f565b20b8c4b556bb88211","isMergeCommit":false,"messageTitle":"Add assertion","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"cb91b595ac7c796524153f17787277b76c5d83f0","isMergeCommit":true,"messageTitle":"Merge pull request #47 from ken-ruster/jUnit-assert","messageBody":"Add jUnit and assertion","tags":["v1.0"],"fileTypesAndContributionMap":{}}]}],"antrikshdhand":[{"date":"2023-10-05","commitResults":[{"hash":"b0a61b4e5ecda5db94f4ad8a08c8a11dca11e77b","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"7d48b22f326388f2eca1ddaa4894dac5c51d2485","isMergeCommit":true,"messageTitle":"Merge pull request #5 from antrikshdhand/antriksh-AboutUs","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"c801ea42692d588d4378a889cd284d324c242eea","isMergeCommit":false,"messageTitle":"Add basic Game and Player classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":96,"deletions":40}}},{"hash":"72e15c80654b8b9c589b6910a662a8c367315064","isMergeCommit":true,"messageTitle":"Expand Player and Game classes","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c623d03e5e2e13851592c85ae7f02d81590e5be3","isMergeCommit":false,"messageTitle":"Add template code for CPU","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":43,"deletions":14}}},{"hash":"1f6a9e688b08833476b8db4b75441bb397e3382c","isMergeCommit":false,"messageTitle":"Make Player class abstract","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"1ee70b10c3755d2b766943710434006ab8a38d1b","isMergeCommit":true,"messageTitle":"Merge pull request #29 from antrikshdhand/master","messageBody":"Add Game and Player classes","fileTypesAndContributionMap":{}},{"hash":"69699348f9c5b5e995bee0120cc502ba2de3edef","isMergeCommit":false,"messageTitle":"Add randomised-move CPU","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":42,"deletions":27}}},{"hash":"4fbf4f7b2a03be0a9a627c687b1d520bc2a6cf4b","isMergeCommit":true,"messageTitle":"Merge pull request #34 from antrikshdhand/master","messageBody":"Add randomised-move CPU","fileTypesAndContributionMap":{}},{"hash":"57557e1600d7cec0f7c99201f5668cff55c3ca3d","isMergeCommit":false,"messageTitle":"Add Javadoc comments","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":56,"deletions":9}}},{"hash":"e0c748497d6b7dae036fc751f024a702a1acbd09","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f39a2582f107c613370f40b1bce494547625f726","isMergeCommit":false,"messageTitle":"Fix game launcher class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":51}}},{"hash":"a03f6672f37537c87e2d823a682385d33f404366","isMergeCommit":true,"messageTitle":"Merge pull request #38 from antrikshdhand/master","messageBody":"Fix conflict between Game and ChessMaster classes","fileTypesAndContributionMap":{}}]}],"TriciaBK":[{"date":"2023-10-05","commitResults":[{"hash":"fc7c1bd4091ee83c6df0616f710bf7ab3651b856","isMergeCommit":false,"messageTitle":"?????","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"58e114c5917e81e436287764309e5165576cc4aa","isMergeCommit":true,"messageTitle":"Merge pull request #3 from TriciaBK/tricia","messageBody":"?????","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"f0541ec8fa6d99300896d53ff19d40d67c7ab2c4","isMergeCommit":false,"messageTitle":"added temporary method for executeMove method to access","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":0}}},{"hash":"1ca4a431744c9f133d36d60d4808b2b72b3d9fb1","isMergeCommit":false,"messageTitle":"added temporary method for executeMove method to access","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":2}}},{"hash":"760456c7df5d6f6e094e4e65df781b09e632fa9c","isMergeCommit":false,"messageTitle":"Add executeMove method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":5}}},{"hash":"75807ce2a7deb81cb42415befcf264333f2bd42e","isMergeCommit":false,"messageTitle":"Removed move history","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":18}}},{"hash":"ef9786cafa2dc81bb582195af35e46f26008ac72","isMergeCommit":true,"messageTitle":"Merge pull request #11 from TriciaBK/chessboard-state","messageBody":"Chessboard state","fileTypesAndContributionMap":{}},{"hash":"eddf4457de673699da57131e019856e79e27339d","isMergeCommit":false,"messageTitle":"Add exception handling for saving board","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":0}}},{"hash":"b2fac1f5d326c2c39029ac7c3a388557ef3ac9c7","isMergeCommit":false,"messageTitle":"Add exception handling for loading board","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":0}}}]},{"date":"2023-10-17","commitResults":[{"hash":"d26a09bde262783d3a3312df1ac069dd2ef138a6","isMergeCommit":false,"messageTitle":"Add saveBoard and loadBoard methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":111,"deletions":1}}},{"hash":"432e0ca40922330edc0b0bd8e2f530f5c2a45ad3","isMergeCommit":false,"messageTitle":"Add setTile method for loadBoard","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":5}}},{"hash":"1197ab36e28a828f2ee61300cbbc07018b20b2f8","isMergeCommit":false,"messageTitle":"Update method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0}}},{"hash":"bd47e5d8ee0916a3164ae5c0c3f4fcf6defc164b","isMergeCommit":false,"messageTitle":"Update Save and Load method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":9}}},{"hash":"7ef957bdcd5debc1c7fb7af31a51a8ce8acb76f3","isMergeCommit":true,"messageTitle":"Merge branch \u0027storage\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"43b8f674c63120a95a4365894df2f54ae716833e","isMergeCommit":false,"messageTitle":"Add updatePosition method after move excution","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"adf3af69b9d133a9cd3b18393397d55a0032c64b","isMergeCommit":false,"messageTitle":"Add exception handling in executeMove method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":5}}},{"hash":"3d9ed6eda7e0a1c8e97d40fc2af25d562c8423d2","isMergeCommit":true,"messageTitle":"Merge pull request #24 from TriciaBK/chessboard-state","messageBody":"Update executeMove","fileTypesAndContributionMap":{}},{"hash":"962a3055847617e6ab3689d473755dd44a688e28","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-1/tp into storage","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bf7f156df16b8da47a8fb666b93670e0186befdc","isMergeCommit":false,"messageTitle":"Fixed checkstyle violations","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":27}}},{"hash":"94b32dbefed7b8c9ba74a83454871c957e4e3866","isMergeCommit":true,"messageTitle":"Merge pull request #25 from TriciaBK/storage","messageBody":"Resolved Storage checkstyle violations","fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"5a0364a5abe5bb30d994cf2bc70ade619328002b","isMergeCommit":false,"messageTitle":"Add method to check for end game and winning colour","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":55,"deletions":5}}},{"hash":"be8099ab0ada8f58ecbd2c527171d052f1516477","isMergeCommit":true,"messageTitle":"Merge pull request #44 from TriciaBK/tricia","messageBody":"Add method to check for end game and winning colour","fileTypesAndContributionMap":{}},{"hash":"405ae94c37c42748cf1bd5ac27107ffc1ca10e65","isMergeCommit":false,"messageTitle":"Add load method into game class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":6}}},{"hash":"af00691e10775886437e525b1933e910713da92d","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"2d29393dfa418b76ac5ffd025468a68dc3298302","isMergeCommit":true,"messageTitle":"Merge pull request #45 from TriciaBK/tricia","messageBody":"Add load method into game class and add assertions","fileTypesAndContributionMap":{}}]}],"onx001":[{"date":"2023-10-05","commitResults":[{"hash":"3f292064f69048663493770d480744c23b56b6c4","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"5fa1cf229e9d7354ebd4e848ca46411c10ecbd5d","isMergeCommit":true,"messageTitle":"Merge pull request #2 from onx001/onx-AboutUs","messageBody":"Update README.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-11","commitResults":[{"hash":"67b268ef9145aba4ebf24e7d07d328c13b18ed03","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/onx-AboutUs\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8753fbaa6e312c71a7e121ce566ee779e2a032a7","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"e2d445f2146c5512f3fbe96952c356004d7679b8","isMergeCommit":false,"messageTitle":"Display valid moves","messageBody":"Implementation of valid moves in progress.\n\nLet\u0027s have a function to display valid moves.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":78,"deletions":13}}},{"hash":"dfe81161128ae9c8510d3facc98671f4e24b04f5","isMergeCommit":true,"messageTitle":"Merge pull request #14 from onx001/ValidMoveDisplay","messageBody":"Display valid moves","fileTypesAndContributionMap":{}},{"hash":"c71ad2eaad3f4461ad84502c91a3530b5e325503","isMergeCommit":false,"messageTitle":"Update ChessPiece.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":53,"deletions":1}}},{"hash":"8dcb170f321be50a71ff77c18bcf80de9138253a","isMergeCommit":true,"messageTitle":"Merge pull request #15 from onx001/ValidMoveDisplay","messageBody":"Update ChessPiece.java","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"b0b7f5e2fdb988cbe187c8ce83fd7849263540fb","isMergeCommit":false,"messageTitle":"Implement Move Validation","messageBody":"Knowing whether a move is valid is important for gameplay, especially for future implementations of solving algorithms.\n\nLet\u0027s implement a generic available move and validity checker as well as basic UI additions for debugging.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":120,"deletions":51}}},{"hash":"7dcec1be03acca1a7f2c1d1c1f78d9b737c847eb","isMergeCommit":true,"messageTitle":"Merge pull request #17 from onx001/ValidMove","messageBody":"Implement Move Validation","fileTypesAndContributionMap":{}},{"hash":"d3893b200ef00ed734b42572a0f273fcf8919bb7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into storage","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"183d7f5d6905d378d6020cd098c1d048b32fb058","isMergeCommit":true,"messageTitle":"Merge pull request #16 from TriciaBK/storage","messageBody":"Storage","fileTypesAndContributionMap":{}},{"hash":"3d3ab4435289b7652113feb39f5e5330e0e77859","isMergeCommit":false,"messageTitle":"Edit JUnit test and add assert statement","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":0}}},{"hash":"69452968a4da01aeb4af72ca6a920b6a93bf11b7","isMergeCommit":true,"messageTitle":"Merge pull request #18 from onx001/JUnitAssert","messageBody":"Edit JUnit test and add assert statement","fileTypesAndContributionMap":{}},{"hash":"fd0cd7c36fa63644a017cbb77f06c9604a2be3b1","isMergeCommit":false,"messageTitle":"Fix coding standard for gradle style checks","messageBody":"Let\u0027s standardise coding styles for easier management across different programmers\n","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":34}}},{"hash":"aa2fb919ec3a346f4248ee74c8df431892942e57","isMergeCommit":true,"messageTitle":"Merge pull request #19 from onx001/Style-Fix-1","messageBody":"Fix coding standard for gradle style checks","fileTypesAndContributionMap":{}},{"hash":"d5b4508a9b9a8818e88eb0787e3e404d3429ba25","isMergeCommit":false,"messageTitle":"Add function for colour change","messageBody":"Swapping board axii every turn change is troublesome and resource-wasteful.\n\nLet\u0027s add valid function checking depending on board colour and orientation.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":2}}},{"hash":"bf4d6fc7abcfa8fec49b7a19a7b9991320c971f6","isMergeCommit":true,"messageTitle":"Merge pull request #20 from onx001/AddBlackPawnCheck","messageBody":"Add function for colour change","fileTypesAndContributionMap":{}},{"hash":"3dd93d8e677e892818307cb61a1a5105737b53e6","isMergeCommit":true,"messageTitle":"Merge pull request #21 from onx001/JUnitTest-1","messageBody":"Update EXPECTED.TXT","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"e1640df62e18fdbe1d3de90c17c1e0f21291953d","isMergeCommit":false,"messageTitle":"Implement Flatten Coordinate","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":17,"deletions":0}}},{"hash":"7359a5d798ba0583174408e8b800f299d2b13377","isMergeCommit":true,"messageTitle":"Merge pull request #30 from onx001/flatten-coord","messageBody":"Flatten coord","fileTypesAndContributionMap":{}},{"hash":"9d23107cff35717d80ae6f52dfe1c333392cca88","isMergeCommit":false,"messageTitle":"Abstract Command Class","messageBody":"Having the parser handle all inputs results in messy and convoluted class files.\n\nLet\u0027s abstract out the command class to be handled separately.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":98,"deletions":6}}},{"hash":"f03e1b317732d8279bd6911d7b923d7f61858b72","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into AbstractCommandClass","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cc9aaecfd81fead5ecd23f0c2b0f9148fc3012fc","isMergeCommit":true,"messageTitle":"Merge pull request #37 from onx001/AbstractCommandClass","messageBody":"Abstract Command Class","fileTypesAndContributionMap":{}},{"hash":"0bc26ac88df85e06f0a3536103d65328eefcad15","isMergeCommit":false,"messageTitle":"Integrate command classes into game class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":12}}},{"hash":"231125b6a729e8416852c2942e88be3798eb5035","isMergeCommit":true,"messageTitle":"Merge pull request #39 from onx001/integratecommandgame","messageBody":"Integrate command classes into game class","fileTypesAndContributionMap":{}},{"hash":"3f2c7175536a406dd46bdbd29af467ff16c4e8cc","isMergeCommit":false,"messageTitle":"Add Castling Function","messageBody":"Castling is an important move in chess. Let\u0027s add the ability to do so.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":59,"deletions":0}}},{"hash":"e23635bcc1abf7119eb3cb555194f461f9219a72","isMergeCommit":true,"messageTitle":"Merge pull request #40 from onx001/AddCastling","messageBody":"Add Castling Function","fileTypesAndContributionMap":{}}]},{"date":"2023-10-21","commitResults":[{"hash":"47aec5c69ae9b3fe1402b7cfcfd23af951fb64a6","isMergeCommit":false,"messageTitle":"Abstract Command Exceptions","messageBody":"Abstract exception handling outside of command objects\n","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":6}}},{"hash":"7a8f63944552e64dbc8a4a644d2a2e36ae384b49","isMergeCommit":true,"messageTitle":"Merge pull request #49 from onx001/AbstractCommand","messageBody":"Abstract Command Exceptions","fileTypesAndContributionMap":{}}]}],"TongZhengHong":[{"date":"2023-10-05","commitResults":[{"hash":"62922ff6fccb29e15f6a330af40a4242b1addf1c","isMergeCommit":false,"messageTitle":"Close scanner","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":0}}},{"hash":"2b99e2930c4d2001569261848c570906d5a7fdfa","isMergeCommit":true,"messageTitle":"Merge pull request #4 from TongZhengHong/ZhengHong","messageBody":"Close scanner","fileTypesAndContributionMap":{}}]},{"date":"2023-10-08","commitResults":[{"hash":"c839a08a725946522e2ac0485e7c2fdf3267a493","isMergeCommit":false,"messageTitle":"Remove questions marks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"f5030d7118f9839cf6f7166b7f7fa8631d6bb98d","isMergeCommit":true,"messageTitle":"Merge pull request #6 from TongZhengHong/fix_cd_test","messageBody":"Remove questions marks","fileTypesAndContributionMap":{}}]},{"date":"2023-10-14","commitResults":[{"hash":"65df1cb11da47e7062fdfcad883dfc1aa3ad03a4","isMergeCommit":false,"messageTitle":"Change Duke to ChessMaster","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":7,"deletions":7}}}]},{"date":"2023-10-15","commitResults":[{"hash":"6abb6778d5f773debb94bb877b519d9948c5464d","isMergeCommit":false,"messageTitle":"Basic skeleton classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":109,"deletions":5}}},{"hash":"c4f69a258ac8c205eef9450c9a6e7f18ba445e24","isMergeCommit":false,"messageTitle":"Change package board to package game","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":74,"deletions":34}}},{"hash":"7f57dba052fa9a6e7d53ad264a6f46479d66634f","isMergeCommit":false,"messageTitle":"Add row, col and color to chessPieces","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":97,"deletions":9}}},{"hash":"65ae9d850d9aba82c149050ee4caf45918f4d25c","isMergeCommit":false,"messageTitle":"Update utility classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":90,"deletions":8}}},{"hash":"29d972ea154a415ba986a02be82b5a4b67fe67a3","isMergeCommit":false,"messageTitle":"Change chess pieces from unicode to letter","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":13}}},{"hash":"264f8cb40e5caca637d71b091d4fdcc88923f99d","isMergeCommit":false,"messageTitle":"Update printing code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":24}}},{"hash":"df10c20c4ad72b22b262a879ebaaf5ff91f1962c","isMergeCommit":false,"messageTitle":"Remove key string and standardise color","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":34}}},{"hash":"a47b7be89bf74c89a7aaa0ef21170a27b87ee748","isMergeCommit":false,"messageTitle":"Update chess piece color initialisation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":17}}},{"hash":"75a416c5acfbe1ad67323668dac625a535b0be8a","isMergeCommit":false,"messageTitle":"Create basic exceptions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":32,"deletions":0}}},{"hash":"ae6ad89bcd9c3f3db05d2cccc9641e839b1954db","isMergeCommit":false,"messageTitle":"Create Coordinate class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":79,"deletions":0}}},{"hash":"dd431c7ff48227541dd9a409b77e093ef28e5a1d","isMergeCommit":false,"messageTitle":"Add getAvailableCoordinate for each chess piece","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":204,"deletions":4}}},{"hash":"1565b161990f065ab146cd9b0d607171b4b4a846","isMergeCommit":false,"messageTitle":"Minor changes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":5}}},{"hash":"ae54b6e50ee89ea5bd9516ee8745948bbf9cdc15","isMergeCommit":false,"messageTitle":"Update printChessBoard to show coordinate beside","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":3}}}]},{"date":"2023-10-16","commitResults":[{"hash":"049349fd79bcd94348ebdc4ed225b4223ec9beab","isMergeCommit":false,"messageTitle":"Add javadoc comments for important methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":41,"deletions":2}}},{"hash":"a89e57499a273dffb13562c97b38aa1ff7de1cd0","isMergeCommit":false,"messageTitle":"Update checkstyle draft","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":85,"deletions":73}}},{"hash":"df797156621c80d93c4647ca00daa74290a42db7","isMergeCommit":false,"messageTitle":"Address checkstyles","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":33,"deletions":24}}},{"hash":"c1cad31c65a0396670d913dee75b41918f2f7bdb","isMergeCommit":false,"messageTitle":"Fix IO redirection test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":21},"other":{"insertions":8,"deletions":2}}},{"hash":"88ba9a509231ff35aa0bdd960f330719e8b03182","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":19}}},{"hash":"ea5ecbfa6267d890a8aab3ae4e3beb8d2a0515c3","isMergeCommit":true,"messageTitle":"Merge pull request #8 from TongZhengHong/branch-setup-template","messageBody":"Branch setup template","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"c78ff2c464137518d661559179236062e0b33a33","isMergeCommit":false,"messageTitle":"Add ChessMasterException parent exception class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":5}}},{"hash":"a925d01c5ea210767e562f71f5fc10fed0036d3f","isMergeCommit":false,"messageTitle":"Create NullPieceException for empty piece at tile retrieval","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":3}}},{"hash":"fe912e66c55c2d129616ec0ccb0e5f4196a7fa46","isMergeCommit":false,"messageTitle":"Remove redundant MoveValidator class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":14}}},{"hash":"3c2e74665a7c6300f390ff3481c6243349179843","isMergeCommit":false,"messageTitle":"Add/Update utility access function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":47,"deletions":29}}},{"hash":"59ebda2d24dbc3be6cfc1504988b92f86b2e35cd","isMergeCommit":false,"messageTitle":"Fix parseAlgebraicCoor method bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"e99af55f311bf0441ee59cb852db6f984098c525","isMergeCommit":false,"messageTitle":"Implement main chess game engine","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":52,"deletions":33}}},{"hash":"68f90d785ce97bb364e92287d8aa3b27b8418781","isMergeCommit":false,"messageTitle":"Clean up code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":3}}},{"hash":"7a91674b6218114e072cb688bf929bf358e1c995","isMergeCommit":false,"messageTitle":"Fix CI tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":52}}},{"hash":"595ce058d9f7bdd7ccb74c684a732d9e7147b220","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-setup-chessmaster-engine","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"52218d65a20ae4e67ab80a87a4c0d465b9185443","isMergeCommit":false,"messageTitle":"Test CI gradle build","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"78565daefec3130476e01ed3f7a53d44b41bdd4a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-setup-chessmaster-engine\u0027 of https://github.com/TongZhengHong/tp into branch-setup-chessmaster-engine","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bf12a91560598d566b3de5f872e60f2100c4f5fa","isMergeCommit":false,"messageTitle":"Fix CI checks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":5}}},{"hash":"8fb02e14aae84b7dba8f2d5fa5b6c08dbd92fae3","isMergeCommit":true,"messageTitle":"Merge pull request #26 from TongZhengHong/branch-setup-chessmaster-engine","messageBody":"Branch setup chessmaster engine","fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"324bfb986eae77c3b4320681e737853fe54f86cc","isMergeCommit":false,"messageTitle":"Add random seed to CPU class for predictable moves","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":3}}},{"hash":"02382a331c6ae7955bc9b8638a79e7a2e9524ec3","isMergeCommit":false,"messageTitle":"Disable loading chessboard from file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":10}}},{"hash":"49ac9a8ef5dac96d765e666ac3568955bd0a97b6","isMergeCommit":false,"messageTitle":"Remove unnecessary imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":8}}},{"hash":"684d03d43560c18eb09ac0741feba9440d747c82","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":95,"deletions":76}}}]},{"date":"2023-10-21","commitResults":[{"hash":"9206bedfacec06759286c5583eddd93460a83211","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-random-seed","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"149c72293e41b61c832dccdefe2b4124bf349a88","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-1/tp into branch-random-seed","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7bc96700214cbc3f3ab9e639c47e55e8c6e48200","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-random-seed\u0027 of https://github.com/TongZhengHong/tp into branch-random-seed","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"820dd8faab666fa676edb155ab3718e0fefc38fa","isMergeCommit":false,"messageTitle":"Disable logo display","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":14}}},{"hash":"2f50638243d2749ddb5e9ec730c4736334d65b73","isMergeCommit":false,"messageTitle":"Fix abort function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":14}}},{"hash":"99d7bc00cdab2ab7e4a8c2c18d3758f4c14ad2c9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-random-seed\u0027 of https://github.com/TongZhengHong/tp into branch-random-seed","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9461a089c5cc50fa80e4364aab7ab8e78d58f48d","isMergeCommit":true,"messageTitle":"Merge pull request #48 from TongZhengHong/branch-random-seed","messageBody":"Add random seed to CPU class for predictable moves","fileTypesAndContributionMap":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"ab98dd0d4e1f1e039e592fc724411497641373b8","isMergeCommit":false,"messageTitle":"Add CommandResult to store result of command execution","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":0}}},{"hash":"cb66ab4f5ffc05ae44f71298f88e293a68d9dc28","isMergeCommit":false,"messageTitle":"Add new exceptions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":0}}},{"hash":"76a3ad44c9f47aebd2e353c063376a2897f70d35","isMergeCommit":false,"messageTitle":"Remove getMove and update commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":43,"deletions":56}}},{"hash":"bd0030634aae5a1a53832adad552fe4ff2ca00d0","isMergeCommit":false,"messageTitle":"Remove castling flags and add new utility methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":66,"deletions":42}}},{"hash":"ca42df96c7d0a5d408886f4a23c4ef633cbcba0f","isMergeCommit":false,"messageTitle":"Clean up getAvailableCoor methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":112,"deletions":208}}},{"hash":"16904a75ccc4eaccbcf87f3446528d3b4ff0b1fa","isMergeCommit":false,"messageTitle":"Add captured and promotion checking when updating ChessTile","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":30,"deletions":3}}},{"hash":"66041493be64a3bfeef58db574c54128dd9c4351","isMergeCommit":false,"messageTitle":"Add more utility methods in Coordinate and TextUI","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":6}}},{"hash":"c6ff0391eeddc01d7fa84a44b2c9e5f73fdce71d","isMergeCommit":false,"messageTitle":"Update castling checking code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":9}}},{"hash":"f44e4d347f39ab93a7146787c671ec3462ab0787","isMergeCommit":false,"messageTitle":"Abstract methods from Player class to ChessMaster","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":115,"deletions":120}}},{"hash":"681ba2dacf170b4f3b1c931547396ab58d88933b","isMergeCommit":false,"messageTitle":"Update main control flow in Game class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":218,"deletions":177}}},{"hash":"ec03db5e0cfb6dc0662257cc8506441cbc55affa","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of tp into branch-more-oop","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b542a666ee82943b60342bf88d0622175ac10c11","isMergeCommit":false,"messageTitle":"Minor fix to storage to pass CI","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"0a125a950de7455328a54205caa3c8995c2ca376","isMergeCommit":true,"messageTitle":"Merge pull request #53 from TongZhengHong/branch-more-oop","messageBody":"Branch more OOP","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ken-ruster":{"docs":1,"functional-code":185,"test-code":18},"antrikshdhand":{"docs":7,"functional-code":185,"test-code":0},"TriciaBK":{"docs":0,"functional-code":147,"test-code":0},"onx001":{"docs":1,"functional-code":192,"test-code":2},"TongZhengHong":{"docs":0,"functional-code":1313,"test-code":2,"other":8}},"authorContributionVariance":{"ken-ruster":11141.862,"antrikshdhand":4502.85,"TriciaBK":1396.9908,"onx001":4281.767,"TongZhengHong":80462.06},"authorDisplayNameMap":{"ken-ruster":"CS2113-T18-1 OH K.. WEI","antrikshdhand":"CS2113-T18-1 DHAN..IKSH","TriciaBK":"CS2113-T18-1 TRIC..PING","onx001":"CS2113-T18-1 OU N..IANG","TongZhengHong":"CS2113-T18-1 TONG..HONG"}} +{"authorDailyContributionsMap":{"ken-ruster":[{"date":"2023-10-05","commitResults":[{"hash":"faf542c932dc8c668aff0ec933dabdff06d14b84","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"6e59d9b754ad45058c2079c92e49c7e3018eabd4","isMergeCommit":false,"messageTitle":"Add question mark","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"8a501b95c2b2abe506ad139c3c31aebceb2fb205","isMergeCommit":true,"messageTitle":"Merge pull request #1 from ken-ruster/branch-test","messageBody":"Add question mark","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"f1ff0f7411762e6f7165868f47bc046d3c53ef57","isMergeCommit":true,"messageTitle":"Merge pull request #1 from AY2324S1-CS2113-T18-1/master","messageBody":"Merge template commits","fileTypesAndContributionMap":{}},{"hash":"65189450fa76a75657d7196b52644045e1a5cd0b","isMergeCommit":false,"messageTitle":"Add Move class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":0}}},{"hash":"c26acb544fbc894759c3fa25710b2309afbb3112","isMergeCommit":false,"messageTitle":"Add getPieceAtCoor for ChessBoard","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"f25704646d91a0357e8feba59d6930ae51fe34f4","isMergeCommit":false,"messageTitle":"Add parseMove to Parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":0}}},{"hash":"b6a41564720327fc4a2f4918e8ffab6d85bf61f6","isMergeCommit":true,"messageTitle":"Merge pull request #9 from ken-ruster/master","messageBody":"Add Move, parseMove, getPieceAtCoor","fileTypesAndContributionMap":{}},{"hash":"7bce486c240254f0df114f0b7c98550c07fd87e3","isMergeCommit":false,"messageTitle":"Add exception to handle invalid moves","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":0}}},{"hash":"adf441fe87620d6c32a057bd929bf5649861a7ee","isMergeCommit":false,"messageTitle":"Add placeholder movePiece() function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"36b657b73341f5386dcbddde151d1cd8b417590e","isMergeCommit":false,"messageTitle":"Parser.java: Add ParseCommand function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":10}}},{"hash":"5c3dcaac28b2874d45e7b11eca8bc53914f195dd","isMergeCommit":false,"messageTitle":"Update message for InvalidMoveException","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"aad8c9191d3d81e12fc1a3d26a0e90353127740c","isMergeCommit":false,"messageTitle":"Update documentation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":7}}},{"hash":"c01a71e62fea28af6635422189d4179e321ae0dc","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"be3d08b56f3db7bab6e6dd2c0d07610386e5733e","isMergeCommit":true,"messageTitle":"Merge pull request #12 from ken-ruster/master","messageBody":"Add parseCommand","fileTypesAndContributionMap":{}},{"hash":"0733fc344115ccba632803263803c4e51e00ab8f","isMergeCommit":false,"messageTitle":"Update Parser to work with executeMove","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":5}}},{"hash":"cc4d6742f26ea5ee50dd98a646bc948f7614dff7","isMergeCommit":true,"messageTitle":"Merge pull request #13 from ken-ruster/master","messageBody":"Update Parser to work with executeMove","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"cc1de14b8dbd21ae323f79c66791d60fba907572","isMergeCommit":true,"messageTitle":"Merge pull request #2 from AY2324S1-CS2113-T18-1/master","messageBody":"Update","fileTypesAndContributionMap":{}},{"hash":"2f537195a96090920c3263243b6d72f2571a61e5","isMergeCommit":false,"messageTitle":"Add parsePromote","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":0}}},{"hash":"e8af2c24700f59a9ea4243a776584a100d4e2cdd","isMergeCommit":true,"messageTitle":"Merge pull request #22 from ken-ruster/parse-promote","messageBody":"Add parsePromote","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"1b8f09fa06caa73c93ceaf4bd7325f96e830d188","isMergeCommit":false,"messageTitle":"Optimise parseMove","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":4}}},{"hash":"abb3d1280718214199edb41df98078071f0b9f44","isMergeCommit":false,"messageTitle":"Modify Move to expose only piece","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":7}}},{"hash":"8c2e65cd475e0074d35b12b4e5b2ad8e99c9d21f","isMergeCommit":true,"messageTitle":"Merge pull request #23 from ken-ruster/parse-promote","messageBody":"Modify Move class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"8bcff2098b9526763e0cc36ec2391aa7d764de7b","isMergeCommit":true,"messageTitle":"Merge pull request #3 from AY2324S1-CS2113-T18-1/master","messageBody":"Update","fileTypesAndContributionMap":{}},{"hash":"d17246f0048e71e2293e8174fc5b557e3a5a021a","isMergeCommit":true,"messageTitle":"Merge pull request #4 from AY2324S1-CS2113-T18-1/master","messageBody":"Update","fileTypesAndContributionMap":{}},{"hash":"fe5200d7c19a4cd9021b625b6b8ab83bb56a4385","isMergeCommit":false,"messageTitle":"Add promotion function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":111,"deletions":36}}},{"hash":"aee0fdb2217b2711ece98c83d9c3f359cd57cd35","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into promote","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9b929ea7cccd3f42ef18b9938cf55287e7743840","isMergeCommit":true,"messageTitle":"Merge pull request #35 from ken-ruster/promote","messageBody":"Add promote","fileTypesAndContributionMap":{}},{"hash":"130c73447825d8722992d68eb30ae1a6554b72a4","isMergeCommit":true,"messageTitle":"Merge pull request #5 from AY2324S1-CS2113-T18-1/master","messageBody":"Update","fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"10aa63e2dcaaeb83ac98cb5a2c8307f2137ac15c","isMergeCommit":false,"messageTitle":"Refactor to replace ChessTile[][] with ChessBoard","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":236,"deletions":165}}},{"hash":"180b17f79b261c4f3e88a68b6e76b2a754973308","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into inputChange","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b3e2b227dc0be3412277f0edd95d51ffe3636940","isMergeCommit":true,"messageTitle":"Merge pull request #41 from ken-ruster/inputChange","messageBody":"Convert ChessTile 2D Array to ChessBoard Objects within getAvailableCoordinates method of ChessPiece objects","fileTypesAndContributionMap":{}},{"hash":"e0234d99755f86ccd0fefd92c524df38f63bb1f5","isMergeCommit":true,"messageTitle":"Merge pull request #6 from AY2324S1-CS2113-T18-1/master","messageBody":"Update","fileTypesAndContributionMap":{}},{"hash":"8b8a824082cf7a375a459b10a01ad0afec07369c","isMergeCommit":false,"messageTitle":"Fix bug in executeMove","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"71a9826f5af8b9a526398f92ab08efce1eaf57e1","isMergeCommit":true,"messageTitle":"Merge pull request #43 from ken-ruster/castling-fix","messageBody":"Fix bug from merge","fileTypesAndContributionMap":{}},{"hash":"4c4abc0175d821e56e9ad6ff226c3f6af6d1d02f","isMergeCommit":true,"messageTitle":"Merge pull request #7 from AY2324S1-CS2113-T18-1/master","messageBody":"update","fileTypesAndContributionMap":{}},{"hash":"950cd9421835d5d7cffe4f5ab388778553c5b704","isMergeCommit":false,"messageTitle":"Fix bug causing all moves to evaluate invalid","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":7}}},{"hash":"9719431bb9cc2c798dc3ad1d940641c09262591f","isMergeCommit":false,"messageTitle":"Fix checkStyle violations","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":67,"deletions":70}}},{"hash":"c799155550c6b18fe27328d60f294b5d7f5c0c29","isMergeCommit":true,"messageTitle":"Merge pull request #46 from ken-ruster/bugfix","messageBody":"Bugfix","fileTypesAndContributionMap":{}},{"hash":"6d82fdd693fb388a57751b397bbde643d804babd","isMergeCommit":true,"messageTitle":"Merge pull request #8 from AY2324S1-CS2113-T18-1/master","messageBody":"Update","fileTypesAndContributionMap":{}},{"hash":"124550cac18d24dbdbc47af118d2a8084dc352bb","isMergeCommit":false,"messageTitle":"Add jUnit test for parsePromote","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":18,"deletions":0}}},{"hash":"74fa224b6e6a52bf56f565b20b8c4b556bb88211","isMergeCommit":false,"messageTitle":"Add assertion","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"cb91b595ac7c796524153f17787277b76c5d83f0","isMergeCommit":true,"messageTitle":"Merge pull request #47 from ken-ruster/jUnit-assert","messageBody":"Add jUnit and assertion","tags":["v1.0"],"fileTypesAndContributionMap":{}}]}],"antrikshdhand":[{"date":"2023-10-05","commitResults":[{"hash":"b0a61b4e5ecda5db94f4ad8a08c8a11dca11e77b","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"7d48b22f326388f2eca1ddaa4894dac5c51d2485","isMergeCommit":true,"messageTitle":"Merge pull request #5 from antrikshdhand/antriksh-AboutUs","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"c801ea42692d588d4378a889cd284d324c242eea","isMergeCommit":false,"messageTitle":"Add basic Game and Player classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":96,"deletions":40}}},{"hash":"72e15c80654b8b9c589b6910a662a8c367315064","isMergeCommit":true,"messageTitle":"Expand Player and Game classes","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c623d03e5e2e13851592c85ae7f02d81590e5be3","isMergeCommit":false,"messageTitle":"Add template code for CPU","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":43,"deletions":14}}},{"hash":"1f6a9e688b08833476b8db4b75441bb397e3382c","isMergeCommit":false,"messageTitle":"Make Player class abstract","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"1ee70b10c3755d2b766943710434006ab8a38d1b","isMergeCommit":true,"messageTitle":"Merge pull request #29 from antrikshdhand/master","messageBody":"Add Game and Player classes","fileTypesAndContributionMap":{}},{"hash":"69699348f9c5b5e995bee0120cc502ba2de3edef","isMergeCommit":false,"messageTitle":"Add randomised-move CPU","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":42,"deletions":27}}},{"hash":"4fbf4f7b2a03be0a9a627c687b1d520bc2a6cf4b","isMergeCommit":true,"messageTitle":"Merge pull request #34 from antrikshdhand/master","messageBody":"Add randomised-move CPU","fileTypesAndContributionMap":{}},{"hash":"57557e1600d7cec0f7c99201f5668cff55c3ca3d","isMergeCommit":false,"messageTitle":"Add Javadoc comments","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":56,"deletions":9}}},{"hash":"e0c748497d6b7dae036fc751f024a702a1acbd09","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-1/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f39a2582f107c613370f40b1bce494547625f726","isMergeCommit":false,"messageTitle":"Fix game launcher class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":51}}},{"hash":"a03f6672f37537c87e2d823a682385d33f404366","isMergeCommit":true,"messageTitle":"Merge pull request #38 from antrikshdhand/master","messageBody":"Fix conflict between Game and ChessMaster classes","fileTypesAndContributionMap":{}}]}],"TriciaBK":[{"date":"2023-10-05","commitResults":[{"hash":"fc7c1bd4091ee83c6df0616f710bf7ab3651b856","isMergeCommit":false,"messageTitle":"?????","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"58e114c5917e81e436287764309e5165576cc4aa","isMergeCommit":true,"messageTitle":"Merge pull request #3 from TriciaBK/tricia","messageBody":"?????","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"f0541ec8fa6d99300896d53ff19d40d67c7ab2c4","isMergeCommit":false,"messageTitle":"added temporary method for executeMove method to access","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":0}}},{"hash":"1ca4a431744c9f133d36d60d4808b2b72b3d9fb1","isMergeCommit":false,"messageTitle":"added temporary method for executeMove method to access","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":2}}},{"hash":"760456c7df5d6f6e094e4e65df781b09e632fa9c","isMergeCommit":false,"messageTitle":"Add executeMove method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":5}}},{"hash":"75807ce2a7deb81cb42415befcf264333f2bd42e","isMergeCommit":false,"messageTitle":"Removed move history","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":18}}},{"hash":"ef9786cafa2dc81bb582195af35e46f26008ac72","isMergeCommit":true,"messageTitle":"Merge pull request #11 from TriciaBK/chessboard-state","messageBody":"Chessboard state","fileTypesAndContributionMap":{}},{"hash":"eddf4457de673699da57131e019856e79e27339d","isMergeCommit":false,"messageTitle":"Add exception handling for saving board","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":0}}},{"hash":"b2fac1f5d326c2c39029ac7c3a388557ef3ac9c7","isMergeCommit":false,"messageTitle":"Add exception handling for loading board","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":0}}}]},{"date":"2023-10-17","commitResults":[{"hash":"d26a09bde262783d3a3312df1ac069dd2ef138a6","isMergeCommit":false,"messageTitle":"Add saveBoard and loadBoard methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":111,"deletions":1}}},{"hash":"432e0ca40922330edc0b0bd8e2f530f5c2a45ad3","isMergeCommit":false,"messageTitle":"Add setTile method for loadBoard","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":5}}},{"hash":"1197ab36e28a828f2ee61300cbbc07018b20b2f8","isMergeCommit":false,"messageTitle":"Update method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0}}},{"hash":"bd47e5d8ee0916a3164ae5c0c3f4fcf6defc164b","isMergeCommit":false,"messageTitle":"Update Save and Load method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":9}}},{"hash":"7ef957bdcd5debc1c7fb7af31a51a8ce8acb76f3","isMergeCommit":true,"messageTitle":"Merge branch \u0027storage\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"43b8f674c63120a95a4365894df2f54ae716833e","isMergeCommit":false,"messageTitle":"Add updatePosition method after move excution","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"adf3af69b9d133a9cd3b18393397d55a0032c64b","isMergeCommit":false,"messageTitle":"Add exception handling in executeMove method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":5}}},{"hash":"3d9ed6eda7e0a1c8e97d40fc2af25d562c8423d2","isMergeCommit":true,"messageTitle":"Merge pull request #24 from TriciaBK/chessboard-state","messageBody":"Update executeMove","fileTypesAndContributionMap":{}},{"hash":"962a3055847617e6ab3689d473755dd44a688e28","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-1/tp into storage","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bf7f156df16b8da47a8fb666b93670e0186befdc","isMergeCommit":false,"messageTitle":"Fixed checkstyle violations","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":27}}},{"hash":"94b32dbefed7b8c9ba74a83454871c957e4e3866","isMergeCommit":true,"messageTitle":"Merge pull request #25 from TriciaBK/storage","messageBody":"Resolved Storage checkstyle violations","fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"5a0364a5abe5bb30d994cf2bc70ade619328002b","isMergeCommit":false,"messageTitle":"Add method to check for end game and winning colour","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":55,"deletions":5}}},{"hash":"be8099ab0ada8f58ecbd2c527171d052f1516477","isMergeCommit":true,"messageTitle":"Merge pull request #44 from TriciaBK/tricia","messageBody":"Add method to check for end game and winning colour","fileTypesAndContributionMap":{}},{"hash":"405ae94c37c42748cf1bd5ac27107ffc1ca10e65","isMergeCommit":false,"messageTitle":"Add load method into game class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":6}}},{"hash":"af00691e10775886437e525b1933e910713da92d","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"2d29393dfa418b76ac5ffd025468a68dc3298302","isMergeCommit":true,"messageTitle":"Merge pull request #45 from TriciaBK/tricia","messageBody":"Add load method into game class and add assertions","fileTypesAndContributionMap":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"7ca4c096e8a554e18a9bf59027a308b16adf5c4b","isMergeCommit":false,"messageTitle":"Added CPUFirstMove if playerColour is black","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":4}}},{"hash":"548e89850c1b79c57bfb5d3ad401356c1ade444a","isMergeCommit":true,"messageTitle":"Merge pull request #58 from TriciaBK/tricia","messageBody":"Added CPUFirstMove if playerColour is black","fileTypesAndContributionMap":{}},{"hash":"dd2257fb6cb082dbaf2175e58c66298bc43a0d71","isMergeCommit":false,"messageTitle":"Update Help Command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":1}}},{"hash":"70e64b55c5b725952af36c259c49a78b98a74358","isMergeCommit":false,"messageTitle":"Add RulesCommand and update HelpCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":39,"deletions":5}}},{"hash":"5cb6a76ebc89bfc88f68ec924f2dbf762535d17e","isMergeCommit":true,"messageTitle":"Merge pull request #59 from TriciaBK/tricia","messageBody":"Add RulesCommand and update HelpCommand","fileTypesAndContributionMap":{}}]}],"onx001":[{"date":"2023-10-05","commitResults":[{"hash":"3f292064f69048663493770d480744c23b56b6c4","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"5fa1cf229e9d7354ebd4e848ca46411c10ecbd5d","isMergeCommit":true,"messageTitle":"Merge pull request #2 from onx001/onx-AboutUs","messageBody":"Update README.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-11","commitResults":[{"hash":"67b268ef9145aba4ebf24e7d07d328c13b18ed03","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/onx-AboutUs\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8753fbaa6e312c71a7e121ce566ee779e2a032a7","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027origin/master\u0027","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"e2d445f2146c5512f3fbe96952c356004d7679b8","isMergeCommit":false,"messageTitle":"Display valid moves","messageBody":"Implementation of valid moves in progress.\n\nLet\u0027s have a function to display valid moves.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":78,"deletions":13}}},{"hash":"dfe81161128ae9c8510d3facc98671f4e24b04f5","isMergeCommit":true,"messageTitle":"Merge pull request #14 from onx001/ValidMoveDisplay","messageBody":"Display valid moves","fileTypesAndContributionMap":{}},{"hash":"c71ad2eaad3f4461ad84502c91a3530b5e325503","isMergeCommit":false,"messageTitle":"Update ChessPiece.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":53,"deletions":1}}},{"hash":"8dcb170f321be50a71ff77c18bcf80de9138253a","isMergeCommit":true,"messageTitle":"Merge pull request #15 from onx001/ValidMoveDisplay","messageBody":"Update ChessPiece.java","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"b0b7f5e2fdb988cbe187c8ce83fd7849263540fb","isMergeCommit":false,"messageTitle":"Implement Move Validation","messageBody":"Knowing whether a move is valid is important for gameplay, especially for future implementations of solving algorithms.\n\nLet\u0027s implement a generic available move and validity checker as well as basic UI additions for debugging.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":120,"deletions":51}}},{"hash":"7dcec1be03acca1a7f2c1d1c1f78d9b737c847eb","isMergeCommit":true,"messageTitle":"Merge pull request #17 from onx001/ValidMove","messageBody":"Implement Move Validation","fileTypesAndContributionMap":{}},{"hash":"d3893b200ef00ed734b42572a0f273fcf8919bb7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into storage","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"183d7f5d6905d378d6020cd098c1d048b32fb058","isMergeCommit":true,"messageTitle":"Merge pull request #16 from TriciaBK/storage","messageBody":"Storage","fileTypesAndContributionMap":{}},{"hash":"3d3ab4435289b7652113feb39f5e5330e0e77859","isMergeCommit":false,"messageTitle":"Edit JUnit test and add assert statement","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":0}}},{"hash":"69452968a4da01aeb4af72ca6a920b6a93bf11b7","isMergeCommit":true,"messageTitle":"Merge pull request #18 from onx001/JUnitAssert","messageBody":"Edit JUnit test and add assert statement","fileTypesAndContributionMap":{}},{"hash":"fd0cd7c36fa63644a017cbb77f06c9604a2be3b1","isMergeCommit":false,"messageTitle":"Fix coding standard for gradle style checks","messageBody":"Let\u0027s standardise coding styles for easier management across different programmers\n","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":34}}},{"hash":"aa2fb919ec3a346f4248ee74c8df431892942e57","isMergeCommit":true,"messageTitle":"Merge pull request #19 from onx001/Style-Fix-1","messageBody":"Fix coding standard for gradle style checks","fileTypesAndContributionMap":{}},{"hash":"d5b4508a9b9a8818e88eb0787e3e404d3429ba25","isMergeCommit":false,"messageTitle":"Add function for colour change","messageBody":"Swapping board axii every turn change is troublesome and resource-wasteful.\n\nLet\u0027s add valid function checking depending on board colour and orientation.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":2}}},{"hash":"bf4d6fc7abcfa8fec49b7a19a7b9991320c971f6","isMergeCommit":true,"messageTitle":"Merge pull request #20 from onx001/AddBlackPawnCheck","messageBody":"Add function for colour change","fileTypesAndContributionMap":{}},{"hash":"3dd93d8e677e892818307cb61a1a5105737b53e6","isMergeCommit":true,"messageTitle":"Merge pull request #21 from onx001/JUnitTest-1","messageBody":"Update EXPECTED.TXT","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"e1640df62e18fdbe1d3de90c17c1e0f21291953d","isMergeCommit":false,"messageTitle":"Implement Flatten Coordinate","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":17,"deletions":0}}},{"hash":"7359a5d798ba0583174408e8b800f299d2b13377","isMergeCommit":true,"messageTitle":"Merge pull request #30 from onx001/flatten-coord","messageBody":"Flatten coord","fileTypesAndContributionMap":{}},{"hash":"9d23107cff35717d80ae6f52dfe1c333392cca88","isMergeCommit":false,"messageTitle":"Abstract Command Class","messageBody":"Having the parser handle all inputs results in messy and convoluted class files.\n\nLet\u0027s abstract out the command class to be handled separately.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":98,"deletions":6}}},{"hash":"f03e1b317732d8279bd6911d7b923d7f61858b72","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into AbstractCommandClass","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"cc9aaecfd81fead5ecd23f0c2b0f9148fc3012fc","isMergeCommit":true,"messageTitle":"Merge pull request #37 from onx001/AbstractCommandClass","messageBody":"Abstract Command Class","fileTypesAndContributionMap":{}},{"hash":"0bc26ac88df85e06f0a3536103d65328eefcad15","isMergeCommit":false,"messageTitle":"Integrate command classes into game class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":12}}},{"hash":"231125b6a729e8416852c2942e88be3798eb5035","isMergeCommit":true,"messageTitle":"Merge pull request #39 from onx001/integratecommandgame","messageBody":"Integrate command classes into game class","fileTypesAndContributionMap":{}},{"hash":"3f2c7175536a406dd46bdbd29af467ff16c4e8cc","isMergeCommit":false,"messageTitle":"Add Castling Function","messageBody":"Castling is an important move in chess. Let\u0027s add the ability to do so.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":59,"deletions":0}}},{"hash":"e23635bcc1abf7119eb3cb555194f461f9219a72","isMergeCommit":true,"messageTitle":"Merge pull request #40 from onx001/AddCastling","messageBody":"Add Castling Function","fileTypesAndContributionMap":{}}]},{"date":"2023-10-21","commitResults":[{"hash":"47aec5c69ae9b3fe1402b7cfcfd23af951fb64a6","isMergeCommit":false,"messageTitle":"Abstract Command Exceptions","messageBody":"Abstract exception handling outside of command objects\n","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":6}}},{"hash":"7a8f63944552e64dbc8a4a644d2a2e36ae384b49","isMergeCommit":true,"messageTitle":"Merge pull request #49 from onx001/AbstractCommand","messageBody":"Abstract Command Exceptions","fileTypesAndContributionMap":{}}]}],"TongZhengHong":[{"date":"2023-10-05","commitResults":[{"hash":"62922ff6fccb29e15f6a330af40a4242b1addf1c","isMergeCommit":false,"messageTitle":"Close scanner","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":0}}},{"hash":"2b99e2930c4d2001569261848c570906d5a7fdfa","isMergeCommit":true,"messageTitle":"Merge pull request #4 from TongZhengHong/ZhengHong","messageBody":"Close scanner","fileTypesAndContributionMap":{}}]},{"date":"2023-10-08","commitResults":[{"hash":"c839a08a725946522e2ac0485e7c2fdf3267a493","isMergeCommit":false,"messageTitle":"Remove questions marks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"f5030d7118f9839cf6f7166b7f7fa8631d6bb98d","isMergeCommit":true,"messageTitle":"Merge pull request #6 from TongZhengHong/fix_cd_test","messageBody":"Remove questions marks","fileTypesAndContributionMap":{}}]},{"date":"2023-10-14","commitResults":[{"hash":"65df1cb11da47e7062fdfcad883dfc1aa3ad03a4","isMergeCommit":false,"messageTitle":"Change Duke to ChessMaster","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":7,"deletions":7}}}]},{"date":"2023-10-15","commitResults":[{"hash":"6abb6778d5f773debb94bb877b519d9948c5464d","isMergeCommit":false,"messageTitle":"Basic skeleton classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":109,"deletions":5}}},{"hash":"c4f69a258ac8c205eef9450c9a6e7f18ba445e24","isMergeCommit":false,"messageTitle":"Change package board to package game","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":74,"deletions":34}}},{"hash":"7f57dba052fa9a6e7d53ad264a6f46479d66634f","isMergeCommit":false,"messageTitle":"Add row, col and color to chessPieces","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":97,"deletions":9}}},{"hash":"65ae9d850d9aba82c149050ee4caf45918f4d25c","isMergeCommit":false,"messageTitle":"Update utility classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":90,"deletions":8}}},{"hash":"29d972ea154a415ba986a02be82b5a4b67fe67a3","isMergeCommit":false,"messageTitle":"Change chess pieces from unicode to letter","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":13}}},{"hash":"264f8cb40e5caca637d71b091d4fdcc88923f99d","isMergeCommit":false,"messageTitle":"Update printing code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":24}}},{"hash":"df10c20c4ad72b22b262a879ebaaf5ff91f1962c","isMergeCommit":false,"messageTitle":"Remove key string and standardise color","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":34}}},{"hash":"a47b7be89bf74c89a7aaa0ef21170a27b87ee748","isMergeCommit":false,"messageTitle":"Update chess piece color initialisation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":17}}},{"hash":"75a416c5acfbe1ad67323668dac625a535b0be8a","isMergeCommit":false,"messageTitle":"Create basic exceptions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":32,"deletions":0}}},{"hash":"ae6ad89bcd9c3f3db05d2cccc9641e839b1954db","isMergeCommit":false,"messageTitle":"Create Coordinate class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":79,"deletions":0}}},{"hash":"dd431c7ff48227541dd9a409b77e093ef28e5a1d","isMergeCommit":false,"messageTitle":"Add getAvailableCoordinate for each chess piece","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":204,"deletions":4}}},{"hash":"1565b161990f065ab146cd9b0d607171b4b4a846","isMergeCommit":false,"messageTitle":"Minor changes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":5}}},{"hash":"ae54b6e50ee89ea5bd9516ee8745948bbf9cdc15","isMergeCommit":false,"messageTitle":"Update printChessBoard to show coordinate beside","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":3}}}]},{"date":"2023-10-16","commitResults":[{"hash":"049349fd79bcd94348ebdc4ed225b4223ec9beab","isMergeCommit":false,"messageTitle":"Add javadoc comments for important methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":41,"deletions":2}}},{"hash":"a89e57499a273dffb13562c97b38aa1ff7de1cd0","isMergeCommit":false,"messageTitle":"Update checkstyle draft","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":85,"deletions":73}}},{"hash":"df797156621c80d93c4647ca00daa74290a42db7","isMergeCommit":false,"messageTitle":"Address checkstyles","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":33,"deletions":24}}},{"hash":"c1cad31c65a0396670d913dee75b41918f2f7bdb","isMergeCommit":false,"messageTitle":"Fix IO redirection test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":21},"other":{"insertions":8,"deletions":2}}},{"hash":"88ba9a509231ff35aa0bdd960f330719e8b03182","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":19}}},{"hash":"ea5ecbfa6267d890a8aab3ae4e3beb8d2a0515c3","isMergeCommit":true,"messageTitle":"Merge pull request #8 from TongZhengHong/branch-setup-template","messageBody":"Branch setup template","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"c78ff2c464137518d661559179236062e0b33a33","isMergeCommit":false,"messageTitle":"Add ChessMasterException parent exception class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":5}}},{"hash":"a925d01c5ea210767e562f71f5fc10fed0036d3f","isMergeCommit":false,"messageTitle":"Create NullPieceException for empty piece at tile retrieval","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":3}}},{"hash":"fe912e66c55c2d129616ec0ccb0e5f4196a7fa46","isMergeCommit":false,"messageTitle":"Remove redundant MoveValidator class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":14}}},{"hash":"3c2e74665a7c6300f390ff3481c6243349179843","isMergeCommit":false,"messageTitle":"Add/Update utility access function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":47,"deletions":29}}},{"hash":"59ebda2d24dbc3be6cfc1504988b92f86b2e35cd","isMergeCommit":false,"messageTitle":"Fix parseAlgebraicCoor method bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"e99af55f311bf0441ee59cb852db6f984098c525","isMergeCommit":false,"messageTitle":"Implement main chess game engine","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":52,"deletions":33}}},{"hash":"68f90d785ce97bb364e92287d8aa3b27b8418781","isMergeCommit":false,"messageTitle":"Clean up code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":3}}},{"hash":"7a91674b6218114e072cb688bf929bf358e1c995","isMergeCommit":false,"messageTitle":"Fix CI tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":52}}},{"hash":"595ce058d9f7bdd7ccb74c684a732d9e7147b220","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-setup-chessmaster-engine","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"52218d65a20ae4e67ab80a87a4c0d465b9185443","isMergeCommit":false,"messageTitle":"Test CI gradle build","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"78565daefec3130476e01ed3f7a53d44b41bdd4a","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-setup-chessmaster-engine\u0027 of https://github.com/TongZhengHong/tp into branch-setup-chessmaster-engine","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bf12a91560598d566b3de5f872e60f2100c4f5fa","isMergeCommit":false,"messageTitle":"Fix CI checks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":5}}},{"hash":"8fb02e14aae84b7dba8f2d5fa5b6c08dbd92fae3","isMergeCommit":true,"messageTitle":"Merge pull request #26 from TongZhengHong/branch-setup-chessmaster-engine","messageBody":"Branch setup chessmaster engine","fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"324bfb986eae77c3b4320681e737853fe54f86cc","isMergeCommit":false,"messageTitle":"Add random seed to CPU class for predictable moves","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":3}}},{"hash":"02382a331c6ae7955bc9b8638a79e7a2e9524ec3","isMergeCommit":false,"messageTitle":"Disable loading chessboard from file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":10}}},{"hash":"49ac9a8ef5dac96d765e666ac3568955bd0a97b6","isMergeCommit":false,"messageTitle":"Remove unnecessary imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":8}}},{"hash":"684d03d43560c18eb09ac0741feba9440d747c82","isMergeCommit":false,"messageTitle":"Fix checkstyle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":95,"deletions":76}}}]},{"date":"2023-10-21","commitResults":[{"hash":"9206bedfacec06759286c5583eddd93460a83211","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-random-seed","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"149c72293e41b61c832dccdefe2b4124bf349a88","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-1/tp into branch-random-seed","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7bc96700214cbc3f3ab9e639c47e55e8c6e48200","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-random-seed\u0027 of https://github.com/TongZhengHong/tp into branch-random-seed","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"820dd8faab666fa676edb155ab3718e0fefc38fa","isMergeCommit":false,"messageTitle":"Disable logo display","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":14}}},{"hash":"2f50638243d2749ddb5e9ec730c4736334d65b73","isMergeCommit":false,"messageTitle":"Fix abort function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":14}}},{"hash":"99d7bc00cdab2ab7e4a8c2c18d3758f4c14ad2c9","isMergeCommit":true,"messageTitle":"Merge branch \u0027branch-random-seed\u0027 of https://github.com/TongZhengHong/tp into branch-random-seed","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9461a089c5cc50fa80e4364aab7ab8e78d58f48d","isMergeCommit":true,"messageTitle":"Merge pull request #48 from TongZhengHong/branch-random-seed","messageBody":"Add random seed to CPU class for predictable moves","fileTypesAndContributionMap":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"ab98dd0d4e1f1e039e592fc724411497641373b8","isMergeCommit":false,"messageTitle":"Add CommandResult to store result of command execution","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":0}}},{"hash":"cb66ab4f5ffc05ae44f71298f88e293a68d9dc28","isMergeCommit":false,"messageTitle":"Add new exceptions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":0}}},{"hash":"76a3ad44c9f47aebd2e353c063376a2897f70d35","isMergeCommit":false,"messageTitle":"Remove getMove and update commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":43,"deletions":56}}},{"hash":"bd0030634aae5a1a53832adad552fe4ff2ca00d0","isMergeCommit":false,"messageTitle":"Remove castling flags and add new utility methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":66,"deletions":42}}},{"hash":"ca42df96c7d0a5d408886f4a23c4ef633cbcba0f","isMergeCommit":false,"messageTitle":"Clean up getAvailableCoor methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":112,"deletions":208}}},{"hash":"16904a75ccc4eaccbcf87f3446528d3b4ff0b1fa","isMergeCommit":false,"messageTitle":"Add captured and promotion checking when updating ChessTile","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":30,"deletions":3}}},{"hash":"66041493be64a3bfeef58db574c54128dd9c4351","isMergeCommit":false,"messageTitle":"Add more utility methods in Coordinate and TextUI","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":6}}},{"hash":"c6ff0391eeddc01d7fa84a44b2c9e5f73fdce71d","isMergeCommit":false,"messageTitle":"Update castling checking code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":9}}},{"hash":"f44e4d347f39ab93a7146787c671ec3462ab0787","isMergeCommit":false,"messageTitle":"Abstract methods from Player class to ChessMaster","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":115,"deletions":120}}},{"hash":"681ba2dacf170b4f3b1c931547396ab58d88933b","isMergeCommit":false,"messageTitle":"Update main control flow in Game class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":218,"deletions":177}}},{"hash":"ec03db5e0cfb6dc0662257cc8506441cbc55affa","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of tp into branch-more-oop","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b542a666ee82943b60342bf88d0622175ac10c11","isMergeCommit":false,"messageTitle":"Minor fix to storage to pass CI","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"0a125a950de7455328a54205caa3c8995c2ca376","isMergeCommit":true,"messageTitle":"Merge pull request #53 from TongZhengHong/branch-more-oop","messageBody":"Branch more OOP","fileTypesAndContributionMap":{}},{"hash":"3bccc222482f5aaf807551620367b77d298b8682","isMergeCommit":false,"messageTitle":"Add createFile method before loading and saving","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":63,"deletions":58}}},{"hash":"0d1d6d2cc6bc3a457775b7dc10321bde6590452e","isMergeCommit":false,"messageTitle":"Add Color enum \u0026 javadoc to color utility methods","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":85,"deletions":25}}},{"hash":"8e97434da7c932e0b9175ef5f527967daf08b16e","isMergeCommit":false,"messageTitle":"Update ChessPiece classes to use Color enum","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":15}}},{"hash":"8722a95c98a28cf93fe73eba0a0f70330cd1415f","isMergeCommit":false,"messageTitle":"Update Player classes to use Color enum","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":6}}},{"hash":"28e2bfc05da8e6311e33bae03b98040cbadd83c0","isMergeCommit":false,"messageTitle":"Update remaining classes to use Color enum","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":42,"deletions":38},"test-code":{"insertions":2,"deletions":1}}},{"hash":"1cb5d04a4441175f6089d232312c0391c9f8e0ee","isMergeCommit":true,"messageTitle":"Merge pull request #54 from TongZhengHong/branch-standardise-color","messageBody":"Branch standardise color","fileTypesAndContributionMap":{}},{"hash":"f72a760331a1b8add5ddbeda4dc93f056440619d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-fix-storage","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-23","commitResults":[{"hash":"ad1a4fbb5ab765ccfbb22144569c39dcf0f6cad0","isMergeCommit":false,"messageTitle":"Create Color enum and abstract utility functions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":37,"deletions":0}}},{"hash":"af1cfb79b3c2d4461d15784b706553c98080e871","isMergeCommit":false,"messageTitle":"Update classes with new Color enum class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":48},"test-code":{"insertions":1,"deletions":1}}},{"hash":"c6481859d17f8d39ab14de72dd20c28107c15a69","isMergeCommit":false,"messageTitle":"Update parse color function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":4}}},{"hash":"f8b093e01f799186bae92ff143f2a8ed5cdd6ae5","isMergeCommit":false,"messageTitle":"Add loadPlayerColor method to storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":54,"deletions":11}}},{"hash":"d3c5763ecc8c09726028c212b83093df0d3065f1","isMergeCommit":false,"messageTitle":"Add new prompt messages in TextUI","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":30,"deletions":3}}},{"hash":"145579e2cfe2c8d42eb4bcdd31a15cf18eaec483","isMergeCommit":false,"messageTitle":"Add basic menu screen to incorporate storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":70,"deletions":5}}},{"hash":"405004cdcbd17a84b09651c91f74991c97b81429","isMergeCommit":false,"messageTitle":"Fix CI checks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"06b4dfa6c0483278c474b09fd616ed73c70a299a","isMergeCommit":true,"messageTitle":"Merge pull request #55 from TongZhengHong/branch-fix-storage","messageBody":"Branch fix storage","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"ken-ruster":{"docs":1,"functional-code":174,"test-code":17},"antrikshdhand":{"docs":7,"functional-code":180,"test-code":0},"TriciaBK":{"docs":0,"functional-code":163,"test-code":0},"onx001":{"docs":1,"functional-code":182,"test-code":2},"TongZhengHong":{"docs":0,"functional-code":1587,"test-code":4,"other":8}},"authorContributionVariance":{"ken-ruster":10819.937,"antrikshdhand":4367.027,"TriciaBK":1452.0273,"onx001":4162.1875,"TongZhengHong":109309.32},"authorDisplayNameMap":{"ken-ruster":"CS2113-T18-1 OH K.. WEI","antrikshdhand":"CS2113-T18-1 DHAN..IKSH","TriciaBK":"CS2113-T18-1 TRIC..PING","onx001":"CS2113-T18-1 OU N..IANG","TongZhengHong":"CS2113-T18-1 TONG..HONG"}} diff --git a/AY2324S1-CS2113-T18-2_tp_master/authorship.json b/AY2324S1-CS2113-T18-2_tp_master/authorship.json index 7c0f601..e0cdf5b 100644 --- a/AY2324S1-CS2113-T18-2_tp_master/authorship.json +++ b/AY2324S1-CS2113-T18-2_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"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":"wwweert123"},"content":" implementation group: \u0027com.googlecode.json-simple\u0027, name: \u0027json-simple\u0027, version: \u00271.1.1\u0027","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":" implementation group: \u0027org.apache.commons\u0027, name: \u0027commons-lang3\u0027, version: \u00273.0\u0027","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":" implementation group: \u0027org.knowm.xchart\u0027, name: \u0027xchart\u0027, version: \u00273.2.2\u0027","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" mainClass.set(\"seedu.financialplanner.FinancialPlanner\")","lastModifiedDate":"2023-10-07"},{"lineNumber":36,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" archiveBaseName.set(\"duke\")","lastModifiedDate":"2023-09-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"wwweert123":3,"-":45,"ryan1604":2}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Portfolio ","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"--------|:-----------:|:--------------:|:---------:","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | John Doe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Ryan Chua | [Github](https://github.com/ryan1604) | [Portfolio](docs/team/ryanchua.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Neo Min Wei | [Github](https://github.com/NeoMinWei) | [Portfolio](docs/team/NeoMinWei.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Frederick | [Github](https://github.com/) | [Portfolio](docs/team/frederick.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"wwweert123":1,"NeoMinWei":3,"-":5,"ryan1604":1}},{"path":"docs/team/NeoMinWei.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"# Neo Min Wei - Project Portfolio Page","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Overview","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"### Summary of Contributions","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"NeoMinWei":1,"-":5}},{"path":"docs/team/frederick.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"I am Frederick ","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"Hello ","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"I am from this team!","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"wwweert123":5}},{"path":"src/main/java/seedu/financialplanner/FinancialPlanner.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner;","lastModifiedDate":"2023-10-07"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":3,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.commands.AbstractCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.commands.ExitCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.investments.WatchList;","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.storage.Storage;","lastModifiedDate":"2023-10-10"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Parser;","lastModifiedDate":"2023-10-07"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-07"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"public class FinancialPlanner {","lastModifiedDate":"2023-10-07"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" private static final String FILE_PATH \u003d \"data/data.txt\";","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"YFshadaow"},"content":" private final Storage storage \u003d Storage.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":" private final Ui ui \u003d Ui.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"YFshadaow"},"content":" private final WatchList watchList \u003d WatchList.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"YFshadaow"},"content":" private final CashflowList cashflowList \u003d CashflowList.INSTANCE;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"YFshadaow"},"content":" private FinancialPlanner() {","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":" new FinancialPlanner().run();","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" public void run() {","lastModifiedDate":"2023-10-07"},{"lineNumber":28,"author":{"gitId":"YFshadaow"},"content":" try {","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"YFshadaow"},"content":" storage.load(cashflowList, ui, FILE_PATH);","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"YFshadaow"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"YFshadaow"},"content":" ui.showMessage(e.getMessage());","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" return;","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" FinancialPlannerLogger.initialise();","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" ui.welcomeMessage();","lastModifiedDate":"2023-10-07"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" String input;","lastModifiedDate":"2023-10-07"},{"lineNumber":38,"author":{"gitId":"YFshadaow"},"content":" AbstractCommand command \u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":40,"author":{"gitId":"YFshadaow"},"content":" while (!(command instanceof ExitCommand)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" input \u003d ui.input();","lastModifiedDate":"2023-10-07"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":43,"author":{"gitId":"YFshadaow"},"content":" command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"YFshadaow"},"content":" command.execute();","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"YFshadaow"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(e.getMessage());","lastModifiedDate":"2023-10-10"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" save();","lastModifiedDate":"2023-10-10"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" ui.exitMessage();","lastModifiedDate":"2023-10-07"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" public void save() {","lastModifiedDate":"2023-10-10"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":55,"author":{"gitId":"YFshadaow"},"content":" storage.save(cashflowList, FILE_PATH);","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-10"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(e.getMessage());","lastModifiedDate":"2023-10-10"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-07"}],"authorContributionMap":{"wwweert123":1,"ryan1604":33,"YFshadaow":26}},{"path":"src/main/java/seedu/financialplanner/FinancialPlannerLogger.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"import java.util.logging.LogManager;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"public class FinancialPlannerLogger {","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":" private static Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":" public static void initialise() {","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" FileHandler fh \u003d new FileHandler(\"data/logger.log\");","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" LogManager.getLogManager().reset();","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" logger.addHandler(fh);","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" fh.setFormatter(new SimpleFormatter());","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.INFO, \"Logger initialised\");","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.SEVERE, e.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"ryan1604":23}},{"path":"src/main/java/seedu/financialplanner/commands/AbstractCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"YFshadaow"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"YFshadaow"},"content":"public abstract class AbstractCommand {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":" public abstract void execute() throws Exception;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"YFshadaow"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"YFshadaow":5}},{"path":"src/main/java/seedu/financialplanner/commands/AddCashflowCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.CashflowCategory;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Cashflow;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":"public class AddCashflowCommand extends AbstractCommand {","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":" private static Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":" protected double amount;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":" protected CashflowCategory category;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":" protected String type;","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"YFshadaow"},"content":" protected int recur \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"NeoMinWei"},"content":" public AddCashflowCommand(RawCommand rawCommand) throws IllegalArgumentException {","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":" String typeString \u003d String.join(\" \", rawCommand.args);","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing CashflowCategory\");","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":" category \u003d CashflowCategory.valueOf(typeString.toUpperCase());","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"YFshadaow"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for CashflowCategory\");","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Entry must be either income or expense\");","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.containsKey(\"a\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Missing arguments for amount\");","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Entry must have an amount\");","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"YFshadaow"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing amount as double\");","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"YFshadaow"},"content":" amount \u003d Double.parseDouble(rawCommand.extraArgs.get(\"a\"));","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"YFshadaow"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for amount\");","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Amount must be a number\");","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"NeoMinWei"},"content":" if (amount \u003c 0) {","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid value for amount\");","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Amount cannot be negative\");","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"YFshadaow"},"content":" rawCommand.extraArgs.remove(\"a\");","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":49,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.containsKey(\"t\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Missing arguments for type\");","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Entry must have a type\");","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"YFshadaow"},"content":" type \u003d rawCommand.extraArgs.get(\"t\");","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"NeoMinWei"},"content":" if (type.isBlank()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for type\");","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Type cannot be left empty\");","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"YFshadaow"},"content":" rawCommand.extraArgs.remove(\"t\");","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"YFshadaow"},"content":" if (rawCommand.extraArgs.containsKey(\"r\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"YFshadaow"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing recur as integer\");","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"YFshadaow"},"content":" recur \u003d Integer.parseInt(rawCommand.extraArgs.get(\"r\"));","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"YFshadaow"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for recur\");","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Recurrence must be an integer\");","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"YFshadaow"},"content":" rawCommand.extraArgs.remove(\"r\");","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"NeoMinWei"},"content":" if (recur \u003c 0) {","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid value for recur\");","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Recurring value cannot be negative\");","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"YFshadaow"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid extra arguments found\");","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":81,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":83,"author":{"gitId":"YFshadaow"},"content":" public void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"NeoMinWei"},"content":" assert category.equals(CashflowCategory.INCOME) || category.equals(CashflowCategory.EXPENSE);","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"NeoMinWei"},"content":" assert recur \u003e\u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"NeoMinWei"},"content":" assert amount \u003e\u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"NeoMinWei"},"content":" assert type !\u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"YFshadaow"},"content":" switch (category) {","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"NeoMinWei"},"content":" case INCOME:","lastModifiedDate":"2023-10-08"},{"lineNumber":91,"author":{"gitId":"YFshadaow"},"content":" CashflowList.INSTANCE.addIncome(amount, type, recur);","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":93,"author":{"gitId":"NeoMinWei"},"content":" case EXPENSE:","lastModifiedDate":"2023-10-08"},{"lineNumber":94,"author":{"gitId":"ryan1604"},"content":" CashflowList list \u003d CashflowList.INSTANCE;","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"ryan1604"},"content":" list.addExpense(amount, type, recur);","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"ryan1604"},"content":" if (Budget.hasBudget()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"ryan1604"},"content":" deductFromBudget(list.list.get(list.list.size() - 1));","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":100,"author":{"gitId":"NeoMinWei"},"content":" default:","lastModifiedDate":"2023-10-08"},{"lineNumber":101,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.SEVERE, \"Unreachable default case reached\");","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"YFshadaow"},"content":" Ui.INSTANCE.showMessage(\"Unidentified entry.\");","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":104,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":105,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":106,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"ryan1604"},"content":" private static void deductFromBudget(Cashflow entry) {","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"NeoMinWei"},"content":" double expenseAmount \u003d entry.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"ryan1604"},"content":" Budget.deduct(expenseAmount);","lastModifiedDate":"2023-10-16"},{"lineNumber":110,"author":{"gitId":"ryan1604"},"content":" Ui.INSTANCE.printBudgetAfterDeduction();","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"NeoMinWei":57,"ryan1604":14,"YFshadaow":41}},{"path":"src/main/java/seedu/financialplanner/commands/AddReminderCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"hshiah"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.reminder.ReminderList;","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.reminder.Reminder;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"hshiah"},"content":"public class AddReminderCommand extends AbstractCommand{","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"hshiah"},"content":" private final String type;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"hshiah"},"content":" private final String date;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"hshiah"},"content":" public AddReminderCommand(RawCommand rawCommand) throws IllegalArgumentException {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" String typeString \u003d String.join(\" \", rawCommand.args);","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" if(!rawCommand.extraArgs.containsKey(\"t\")){","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(\"Reminder must have a type\");","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"hshiah"},"content":" type \u003d rawCommand.extraArgs.get(\"t\");","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"hshiah"},"content":" rawCommand.extraArgs.remove(\"t\");","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"hshiah"},"content":" if(!rawCommand.extraArgs.containsKey(\"d\")){","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(\"Reminder must have a date\");","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"hshiah"},"content":" date \u003d rawCommand.extraArgs.get(\"d\");","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"hshiah"},"content":" rawCommand.extraArgs.remove(\"d\");","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"hshiah"},"content":" if(!rawCommand.extraArgs.isEmpty()){","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"hshiah"},"content":" String unknownExtraArgument \u003d new java.util.ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"hshiah"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"hshiah"},"content":" public void execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"hshiah"},"content":" ReminderList.INSTANCE.list.add(new Reminder(type, date));","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"hshiah"},"content":" Ui.INSTANCE.showMessage(\"Reminder added!\");","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"hshiah":32}},{"path":"src/main/java/seedu/financialplanner/commands/AddStockCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.investments.WatchList;","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"YFshadaow"},"content":"public class AddStockCommand extends AbstractCommand {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":" private final String stockCode;","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"YFshadaow"},"content":" public AddStockCommand(RawCommand rawCommand) throws IllegalArgumentException {","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.containsKey(\"s\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Stock code cannot be empty\");","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Parsing stockcode from input\");","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"YFshadaow"},"content":" stockCode \u003d rawCommand.extraArgs.get(\"s\");","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":" rawCommand.extraArgs.remove(\"s\");","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"YFshadaow"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.WARNING, \"Invalid extra arguments found\");","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":32,"author":{"gitId":"YFshadaow"},"content":" public void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"YFshadaow"},"content":" Ui ui \u003d Ui.INSTANCE;","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"YFshadaow"},"content":" WatchList watchList \u003d WatchList.INSTANCE;","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"YFshadaow"},"content":" String stockName;","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"adding stock to watchlist\");","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-09"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" stockName \u003d watchList.addStock(stockCode);","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" assert stockName !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" ui.printAddStock(stockName);","lastModifiedDate":"2023-10-09"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-09"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.SEVERE, \"Error adding stock to watchlist\");","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"wwweert123":29,"NeoMinWei":1,"YFshadaow":17}},{"path":"src/main/java/seedu/financialplanner/commands/BudgetCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Cashflow;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"public class BudgetCommand extends AbstractCommand {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":" private static Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" private double budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" private String command;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" public BudgetCommand(RawCommand rawCommand) throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" command \u003d String.join(\" \", rawCommand.args);","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" if (!command.equals(\"set\") \u0026\u0026 !command.equals(\"update\")) {","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid arguments for budget command\");","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Please indicate whether budget is to be set or update.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" if (command.equals(\"set\") \u0026\u0026 Budget.hasBudget()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid command: Trying to set existing budget\");","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"There is an existing budget, did you mean update?\");","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" if (command.equals(\"update\") \u0026\u0026 !Budget.hasBudget()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid command: Trying to update non-existent budget\");","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"There is no budget set yet, did you mean set?\");","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" if (!rawCommand.extraArgs.containsKey(\"b\")) {","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Missing argument /b in command\");","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(\"Missing /b argument.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.INFO, \"Parsing budget as double\");","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" budget \u003d Double.parseDouble(rawCommand.extraArgs.get(\"b\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid value for budget\");","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(\"Budget must be a number.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" if (budget \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid value for budget.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Budget should be greater than 0.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" if (budget \u003e Cashflow.getBalance()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid value for budget\");","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Budget should be lower than total balance.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":" assert budget \u003e 0 \u0026\u0026 budget \u003c\u003d Cashflow.getBalance() : \"Budget should be greater than 0 and less than \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" \"or equal to total balance\";","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" rawCommand.extraArgs.remove(\"b\");","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":" public void execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":" assert command.equals(\"set\") || command.equals(\"update\") : \"Command should be set or update only\";","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"ryan1604"},"content":" switch (command) {","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":" case \"set\":","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.INFO, \"Setting budget\");","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":" Budget.setBudget(budget);","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":" Ui.INSTANCE.showMessage(\"A monthly budget of \" + Budget.getInitialBudgetString()","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"ryan1604"},"content":" + \" has been set.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":" case \"update\":","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.INFO, \"Updating budget\");","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":" Ui.INSTANCE.printBudgetBeforeUpdate();","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":" Budget.updateBudget(budget);","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" Ui.INSTANCE.printBudgetAfterUpdate();","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"ryan1604"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.SEVERE, \"Unreachable default case reached\");","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"ryan1604"},"content":" Ui.INSTANCE.showMessage(\"Unknown command.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"ryan1604":89}},{"path":"src/main/java/seedu/financialplanner/commands/DeleteCashflowCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.CashflowCategory;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"public class DeleteCashflowCommand extends AbstractCommand {","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"YFshadaow"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":" protected CashflowCategory category \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":" protected int index;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":" public DeleteCashflowCommand(RawCommand rawCommand) throws IllegalArgumentException {","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":" String stringIndex;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"YFshadaow"},"content":" String stringCategory \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":" if (rawCommand.args.size() \u003d\u003d 1) {","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":" stringIndex \u003d rawCommand.args.get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":" } else if (rawCommand.args.size() \u003d\u003d 2) {","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"NeoMinWei"},"content":" stringCategory \u003d rawCommand.args.get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"NeoMinWei"},"content":" stringIndex \u003d rawCommand.args.get(1);","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"YFshadaow"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Incorrect arguments.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing index as integer\");","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":" index \u003d Integer.parseInt(stringIndex);","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"NeoMinWei"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid argument for index\");","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Index must be an integer\");","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"NeoMinWei"},"content":" if (index \u003d\u003d 0) {","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid value for index\");","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Index must be within the list\");","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"YFshadaow"},"content":" if (stringCategory !\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"NeoMinWei"},"content":" category \u003d CashflowCategory.valueOf(stringCategory.toUpperCase());","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"NeoMinWei"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Entry must be either income or expense\");","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"NeoMinWei"},"content":" private void handleInvalidCategory(String stringCategory) {","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing CashflowCategory\");","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"NeoMinWei"},"content":" category \u003d CashflowCategory.valueOf(stringCategory.toUpperCase());","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"NeoMinWei"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for CashflowCategory\");","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Entry must be either income or expense\");","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"NeoMinWei"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"NeoMinWei"},"content":" public void execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"YFshadaow"},"content":" if (category \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"YFshadaow"},"content":" handleDeleteCashflowWithoutCategory();","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"YFshadaow"},"content":" return;","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"NeoMinWei"},"content":" assert category.equals(CashflowCategory.INCOME) || category.equals(CashflowCategory.EXPENSE);","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"NeoMinWei"},"content":" assert index !\u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"NeoMinWei"},"content":" switch (category) {","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"NeoMinWei"},"content":" case INCOME:","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"NeoMinWei"},"content":" case EXPENSE:","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"NeoMinWei"},"content":" handleDeleteCashflowWithCategory();","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"NeoMinWei"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.SEVERE, \"Unreachable default case reached\");","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":" Ui.INSTANCE.showMessage(\"Unidentified entry.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"NeoMinWei"},"content":" private void handleDeleteCashflowWithoutCategory() {","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Deleting cashflow without category\");","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"NeoMinWei"},"content":" CashflowList.INSTANCE.delete(index);","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"NeoMinWei"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Index out of list\");","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Index must be within the list\");","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"NeoMinWei"},"content":" private void handleDeleteCashflowWithCategory() {","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Deleting cashflow with category\");","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"NeoMinWei"},"content":" CashflowList.INSTANCE.deleteCashflow(category, index);","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"NeoMinWei"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Index out of list\");","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Index must be within the list\");","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"NeoMinWei":87,"YFshadaow":13}},{"path":"src/main/java/seedu/financialplanner/commands/ExitCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"YFshadaow"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"YFshadaow"},"content":"public class ExitCommand extends AbstractCommand {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"YFshadaow"},"content":" public ExitCommand(RawCommand rawCommand) {","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"YFshadaow"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"YFshadaow"},"content":" public void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"YFshadaow":16}},{"path":"src/main/java/seedu/financialplanner/commands/FindCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"hshiah"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.investments.WatchList;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"hshiah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"YFshadaow"},"content":"public class FindCommand extends AbstractCommand {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" private final String description;","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"YFshadaow"},"content":" public FindCommand(RawCommand rawCommand) {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":" this.description \u003d String.join(\" \", rawCommand.args);","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"YFshadaow"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"hshiah"},"content":" @Override","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"YFshadaow"},"content":" public void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":" CashflowList cashflowList \u003d CashflowList.INSTANCE;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":" Ui ui \u003d Ui.INSTANCE;","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":" WatchList watchList \u003d WatchList.INSTANCE;","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"hshiah"},"content":" ArrayList\u003cString\u003e foundedFinancialList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"hshiah"},"content":" ArrayList\u003cString\u003e foundedWatchList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" for (int i \u003d 0; i \u003c cashflowList.list.size(); i++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"hshiah"},"content":" if (cashflowList.list.get(i).toString().contains(description)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"hshiah"},"content":" String output \u003d cashflowList.list.get(i).toString()+\" | Index: \"+(i+1);","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"hshiah"},"content":" foundedFinancialList.add(output);","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"hshiah"},"content":" if (!foundedFinancialList.isEmpty()) {","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"hshiah"},"content":" ui.showMessage(\"Here are the matching financial records in your financial list:\");","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"hshiah"},"content":" } else {","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"hshiah"},"content":" ui.showMessage(\"There is no matching financial record in your financial list.\");","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"hshiah"},"content":" for (String foundedFinancialRecord : foundedFinancialList) {","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"hshiah"},"content":" ui.showMessage(foundedFinancialRecord);","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"hshiah"},"content":" for (int i \u003d 0; i \u003c watchList.size(); i++) {","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"hshiah"},"content":" if (watchList.get(i).toString().contains(description)) {","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"hshiah"},"content":" foundedWatchList.add(watchList.get(i).toString()+\"| Index: \"+(i+1));","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":47,"author":{"gitId":"hshiah"},"content":" if (!foundedWatchList.isEmpty()) {","lastModifiedDate":"2023-10-12"},{"lineNumber":48,"author":{"gitId":"hshiah"},"content":" ui.showMessage(\"Here are the matching stock records in your stock list:\");","lastModifiedDate":"2023-10-12"},{"lineNumber":49,"author":{"gitId":"hshiah"},"content":" } else {","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"hshiah"},"content":" ui.showMessage(\"There is no matching stock record in your stock list.\");","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"hshiah"},"content":" for (String foundedStockRecord : foundedWatchList) {","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"hshiah"},"content":" ui.showMessage(foundedStockRecord);","lastModifiedDate":"2023-10-12"},{"lineNumber":54,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":56,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"hshiah":43,"YFshadaow":12,"ryan1604":1}},{"path":"src/main/java/seedu/financialplanner/commands/InvalidCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"YFshadaow"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"YFshadaow"},"content":"public class InvalidCommand extends AbstractCommand {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"YFshadaow"},"content":" public InvalidCommand() {","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"YFshadaow"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"YFshadaow"},"content":" public void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"YFshadaow"},"content":" Ui.INSTANCE.showMessage(\"Unknown command. Please try again.\");","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"YFshadaow":13}},{"path":"src/main/java/seedu/financialplanner/commands/ListCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"YFshadaow"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.enumerations.CashflowCategory;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.Cashflow;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.Expense;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.Income;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"YFshadaow"},"content":"import java.util.List;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":"public class ListCommand extends AbstractCommand{","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"YFshadaow"},"content":" protected CashflowCategory category \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"YFshadaow"},"content":" public ListCommand(RawCommand rawCommand) throws IllegalArgumentException{","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":" String stringCategory \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"YFshadaow"},"content":" if (rawCommand.args.size() \u003d\u003d 1) {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"YFshadaow"},"content":" stringCategory \u003d rawCommand.args.get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"YFshadaow"},"content":" } else if (rawCommand.args.size() \u003e 1) {","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Incorrect arguments.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":" if (stringCategory !\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"YFshadaow"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"YFshadaow"},"content":" category \u003d CashflowCategory.valueOf(stringCategory.toUpperCase());","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"YFshadaow"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Entry must be either income or expense\");","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"YFshadaow"},"content":" private boolean shouldPrintCashFlow(Cashflow cashflow) {","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"YFshadaow"},"content":" if (category \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"YFshadaow"},"content":" return true;","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"YFshadaow"},"content":" if (cashflow instanceof Income) {","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"YFshadaow"},"content":" return category.equals(CashflowCategory.INCOME);","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"YFshadaow"},"content":" if (cashflow instanceof Expense) {","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"YFshadaow"},"content":" return category.equals(CashflowCategory.EXPENSE);","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"YFshadaow"},"content":" return false;","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"YFshadaow"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"YFshadaow"},"content":" public void execute() throws Exception {","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"YFshadaow"},"content":" List\u003cCashflow\u003e cashflowList \u003d CashflowList.INSTANCE.list;","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"YFshadaow"},"content":" List\u003cCashflow\u003e cashflowToBePrinted \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"YFshadaow"},"content":" for (Cashflow flow : cashflowList) {","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"YFshadaow"},"content":" if (!shouldPrintCashFlow(flow)) {","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"YFshadaow"},"content":" continue;","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"YFshadaow"},"content":" cashflowToBePrinted.add(flow);","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"YFshadaow"},"content":" if (cashflowToBePrinted.isEmpty()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"YFshadaow"},"content":" Ui.INSTANCE.showMessage(\"No matching cash flow\");","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"YFshadaow"},"content":" return;","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"YFshadaow"},"content":" Ui.INSTANCE.showMessage(String.format(\"You have %d matching cash flow:\", cashflowToBePrinted.size()));","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"YFshadaow"},"content":" for (int i \u003d 0; i \u003c cashflowToBePrinted.size(); i +\u003d 1) {","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"YFshadaow"},"content":" Ui.INSTANCE.showMessage((i+ 1) + \": \" + cashflowToBePrinted.get(i).toString());","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"YFshadaow"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"YFshadaow":68}},{"path":"src/main/java/seedu/financialplanner/commands/OverviewCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Cashflow;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Income;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Expense;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"import java.text.DecimalFormat;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"public class OverviewCommand extends AbstractCommand {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" public OverviewCommand(RawCommand rawCommand) {","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" public void execute() throws Exception {","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" CashflowList list \u003d CashflowList.INSTANCE;","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" Ui.INSTANCE.showMessage(\"Here is an overview of your financials:\\n\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" \"Total balance: \" + formatDoubleToString(Cashflow.getBalance()) + \"\\n\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" \"Highest income: \" + getHighestIncome(list) + \"\\n\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" \"Highest expense: \" + getHighestExpense(list) + \"\\n\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" \"Remaining budget for the month: \" + getBudgetDesc());","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" //todo: indicate description of income/expense","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" //todo: goal disparity","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" //todo: add educational tip","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" private static String getBudgetDesc() {","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" return Budget.getCurrentBudgetString();","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" private static String getHighestIncome(CashflowList list) {","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" double maxIncome \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" for (Cashflow entry : list.list) {","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" if (entry instanceof Income \u0026\u0026 entry.getAmount() \u003e maxIncome) {","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" maxIncome \u003d entry.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" return formatDoubleToString(maxIncome);","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" private static String getHighestExpense(CashflowList list) {","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" double maxExpense \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" for (Cashflow entry : list.list) {","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" if (entry instanceof Expense \u0026\u0026 entry.getAmount() \u003e maxExpense) {","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" maxExpense \u003d entry.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":" return formatDoubleToString(maxExpense);","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" private static String formatDoubleToString(double amount) {","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":" return decimalFormat.format(Cashflow.round(amount, 2));","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ryan1604":63}},{"path":"src/main/java/seedu/financialplanner/commands/RawCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"YFshadaow"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"YFshadaow"},"content":"import java.util.List;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"YFshadaow"},"content":"import java.util.Map;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"YFshadaow"},"content":"public class RawCommand {","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"YFshadaow"},"content":" public final List\u003cString\u003e args \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"YFshadaow"},"content":" public final Map\u003cString, String\u003e extraArgs \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"YFshadaow"},"content":" protected String commandName;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":" public RawCommand(String name, List\u003cString\u003e args, Map\u003cString, String\u003e extraArgs) {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"YFshadaow"},"content":" this.commandName \u003d name;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"YFshadaow"},"content":" this.args.addAll(args);","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":" this.extraArgs.putAll(extraArgs);","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"YFshadaow"},"content":" @SuppressWarnings(\"unused\")","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"YFshadaow"},"content":" public String getCommandName() {","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"YFshadaow"},"content":" return commandName;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":" @SuppressWarnings(\"unused\")","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"YFshadaow"},"content":" public void setCommandName(String commandName) {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"YFshadaow"},"content":" this.commandName \u003d commandName;","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"YFshadaow"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"YFshadaow":28}},{"path":"src/main/java/seedu/financialplanner/commands/SetGoalCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"hshiah"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.goal.Goal;","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.goal.GoalList;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"hshiah"},"content":"public class SetGoalCommand extends AbstractCommand{","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"hshiah"},"content":" private final String goal;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":" private int amount;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"hshiah"},"content":" public SetGoalCommand(RawCommand rawCommand) throws IllegalArgumentException {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" String labelString \u003d String.join(\" \", rawCommand.args);","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" if(!rawCommand.extraArgs.containsKey(\"g\")){","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(\"Goal must have an amount\");","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"hshiah"},"content":" try{","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"hshiah"},"content":" amount \u003d Integer.parseInt(rawCommand.extraArgs.get(\"g\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"hshiah"},"content":" } catch (IllegalArgumentException e){","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(\"Amount must be a number\");","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"hshiah"},"content":" rawCommand.extraArgs.remove(\"g\");","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"hshiah"},"content":" if(!rawCommand.extraArgs.containsKey(\"l\")){","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(\"Please specify the content of the goal\");","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"hshiah"},"content":" goal \u003d rawCommand.extraArgs.get(\"l\");","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"hshiah"},"content":" rawCommand.extraArgs.remove(\"l\");","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"hshiah"},"content":" if(!rawCommand.extraArgs.isEmpty()){","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"hshiah"},"content":" String unknownExtraArgument \u003d new java.util.ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"hshiah"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"hshiah"},"content":" public void execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"hshiah"},"content":" GoalList.INSTANCE.list.add(new Goal(goal, amount));","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"hshiah"},"content":" Ui.INSTANCE.showMessage(\"Set Goal Successfully!\");","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"hshiah":36}},{"path":"src/main/java/seedu/financialplanner/commands/VisCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.visualisations.Categorizer;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.visualisations.Visualizer;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"public class VisCommand extends AbstractCommand {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":" private String type;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":" private String chart;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":" public VisCommand(RawCommand rawCommand) throws IllegalArgumentException {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":" if (!rawCommand.extraArgs.containsKey(\"t\")) {","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":" throw new IllegalArgumentException(\"Entry type must be defined\");","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":" if (!rawCommand.extraArgs.containsKey(\"c\")) {","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" throw new IllegalArgumentException(\"Chart type must be defined\");","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Parsing entry type and chart type\");","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" this.type \u003d rawCommand.extraArgs.get(\"t\");","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" rawCommand.extraArgs.remove(\"t\");","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" this.chart \u003d rawCommand.extraArgs.get(\"c\");","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" rawCommand.extraArgs.remove(\"c\");","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.WARNING, \"Invalid extra arguments found\");","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" public void execute() throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" assert !chart.isEmpty();","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" assert !type.isEmpty();","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" Visualizer.displayChart(chart, Categorizer.sortType(CashflowList.INSTANCE, type));","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"wwweert123":42}},{"path":"src/main/java/seedu/financialplanner/commands/WatchListCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.JSONArray;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.JSONObject;","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.investments.WatchList;","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"YFshadaow"},"content":"public class WatchListCommand extends AbstractCommand {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":" public WatchListCommand(RawCommand rawCommand) throws IllegalArgumentException{","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.WARNING, \"Invalid extra arguments found\");","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":" assert unknownExtraArgument !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":" public void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":" JSONArray stocks \u003d WatchList.INSTANCE.fetchFMPStockPrices();","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" assert !(stocks \u003d\u003d null);","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"YFshadaow"},"content":" Ui.INSTANCE.printWatchListHeader();","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Printing watchlist\");","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" for (Object o : stocks) {","lastModifiedDate":"2023-10-09"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" JSONObject stock \u003d (JSONObject) o;","lastModifiedDate":"2023-10-09"},{"lineNumber":30,"author":{"gitId":"YFshadaow"},"content":" Ui.INSTANCE.printStockInfo(stock);","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"wwweert123":20,"NeoMinWei":1,"YFshadaow":12}},{"path":"src/main/java/seedu/financialplanner/enumerations/CashflowCategory.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.enumerations;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"public enum CashflowCategory {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":" INCOME, EXPENSE","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NeoMinWei":4,"YFshadaow":1}},{"path":"src/main/java/seedu/financialplanner/exceptions/FinancialPlannerException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.exceptions;","lastModifiedDate":"2023-10-07"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"public class FinancialPlannerException extends Exception {","lastModifiedDate":"2023-10-07"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":" public FinancialPlannerException(String message) {","lastModifiedDate":"2023-10-07"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":" super(message);","lastModifiedDate":"2023-10-07"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-07"}],"authorContributionMap":{"ryan1604":7}},{"path":"src/main/java/seedu/financialplanner/goal/Goal.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"hshiah"},"content":"package seedu.financialplanner.goal;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"hshiah"},"content":"public class Goal {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"hshiah"},"content":" private String label;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"hshiah"},"content":" private int amount;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"hshiah"},"content":" private boolean isDone \u003d false;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"hshiah"},"content":" public Goal(String label, int amount) {","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":" this.label \u003d label;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"hshiah"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":" String status \u003d isDone ? \"Done\" : \"Not Done\";","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":" return \"Goal: \"+this.label + \" | \" + this.amount + \" | \" + status;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"hshiah"},"content":" public void markAsDone() {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"hshiah"},"content":" //TODO edit the expense to mark the goal as done","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"hshiah"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"hshiah"},"content":" //TODO delete the Reminder","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"hshiah"},"content":" public String formatString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"hshiah"},"content":" String status \u003d isDone ? \"Done\" : \"Not Done\";","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"hshiah"},"content":" return this.label + \" | \" + this.amount + \" | \" + this.isDone;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"hshiah":24}},{"path":"src/main/java/seedu/financialplanner/goal/GoalList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"hshiah"},"content":"package seedu.financialplanner.goal;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"hshiah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"hshiah"},"content":"public class GoalList {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"hshiah"},"content":" public static final GoalList INSTANCE \u003d new GoalList();","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"hshiah"},"content":" public ArrayList\u003cGoal\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"hshiah"},"content":" private GoalList() {","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"hshiah"},"content":" public void load(Goal goal) {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" list.add(goal);","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":" //TODO deleteGoal","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"hshiah":13}},{"path":"src/main/java/seedu/financialplanner/investments/Stock.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"package seedu.financialplanner.investments;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.JSONArray;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.JSONObject;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.parser.JSONParser;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.parser.ParseException;","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"import java.net.URI;","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpClient;","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpRequest;","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpResponse;","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"import java.time.Duration;","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"public class Stock {","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":" private String symbol;","lastModifiedDate":"2023-10-08"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" private String market;","lastModifiedDate":"2023-10-08"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":" private String stockName;","lastModifiedDate":"2023-10-08"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" public Stock(String symbol) throws FinancialPlannerException {","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" this.symbol \u003d symbol;","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" this.stockName \u003d getStockNameFromAPI(symbol);","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" public String getStockName() {","lastModifiedDate":"2023-10-09"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":" return stockName;","lastModifiedDate":"2023-10-09"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" public String getStockNameFromAPI(String symbol) throws FinancialPlannerException {","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" final String API_ENDPOINT \u003d \"https://www.alphavantage.co/query?function\u003dSYMBOL_SEARCH\u0026keywords\u003d\";","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" final String API_KEY \u003d \"LNKL0548PHY2F0QU\";","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" String requestURI \u003d String.format(\"%s%s\u0026apikey\u003d%s\", API_ENDPOINT,symbol,API_KEY);","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":" HttpClient client \u003d HttpClient.newHttpClient();","lastModifiedDate":"2023-10-08"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" HttpRequest request \u003d HttpRequest.newBuilder(URI.create(requestURI))","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" .header(\"accept\", \"application/json\")","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" .GET()","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" .timeout(Duration.ofSeconds(10))","lastModifiedDate":"2023-10-08"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" .build();","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Requesting API for stock info\");","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" HttpResponse\u003cString\u003e response \u003d client.send(request, HttpResponse.BodyHandlers.ofString());","lastModifiedDate":"2023-10-08"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" Object obj \u003d new JSONParser().parse(response.body());","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":48,"author":{"gitId":"wwweert123"},"content":" JSONObject jsonObject \u003d (JSONObject) obj;","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"wwweert123"},"content":" JSONArray ja \u003d (JSONArray) jsonObject.get(\"bestMatches\");","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"wwweert123"},"content":" if (ja \u003d\u003d null) {","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"API limit Reached\");","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"wwweert123"},"content":" if (ja.isEmpty()) {","lastModifiedDate":"2023-10-09"},{"lineNumber":54,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Stock not found\");","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":56,"author":{"gitId":"wwweert123"},"content":" JSONObject stock \u003d (JSONObject) ja.get(0);","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"wwweert123"},"content":" String symbolFound \u003d (String) stock.get(\"1. symbol\");","lastModifiedDate":"2023-10-13"},{"lineNumber":58,"author":{"gitId":"wwweert123"},"content":" // TODO: Might need to use AMEX when NYSE is used","lastModifiedDate":"2023-10-09"},{"lineNumber":59,"author":{"gitId":"wwweert123"},"content":" // TODO: Need to check if it is added already","lastModifiedDate":"2023-10-09"},{"lineNumber":60,"author":{"gitId":"wwweert123"},"content":" // TODO: add a cap to adding","lastModifiedDate":"2023-10-09"},{"lineNumber":61,"author":{"gitId":"wwweert123"},"content":" // TODO: Separate based on market","lastModifiedDate":"2023-10-09"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":" // TODO: add other info","lastModifiedDate":"2023-10-09"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" // TODO: testing","lastModifiedDate":"2023-10-09"},{"lineNumber":64,"author":{"gitId":"wwweert123"},"content":" if (!symbolFound.equals(symbol)) {","lastModifiedDate":"2023-10-09"},{"lineNumber":65,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Stock not found\");","lastModifiedDate":"2023-10-09"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":67,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":" assert stock.get(\"2. name\") !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"wwweert123"},"content":" market \u003d (String) stock.get(\"4. region\");","lastModifiedDate":"2023-10-13"},{"lineNumber":70,"author":{"gitId":"wwweert123"},"content":" return (String) stock.get(\"2. name\");","lastModifiedDate":"2023-10-13"},{"lineNumber":71,"author":{"gitId":"wwweert123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":73,"author":{"gitId":"wwweert123"},"content":" } catch (InterruptedException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"wwweert123"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":78,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":79,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":80,"author":{"gitId":"wwweert123"},"content":" public String getSymbol() {","lastModifiedDate":"2023-10-08"},{"lineNumber":81,"author":{"gitId":"wwweert123"},"content":" return symbol;","lastModifiedDate":"2023-10-08"},{"lineNumber":82,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":83,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":84,"author":{"gitId":"wwweert123"},"content":" public void setSymbol(String symbol) {","lastModifiedDate":"2023-10-08"},{"lineNumber":85,"author":{"gitId":"wwweert123"},"content":" this.symbol \u003d symbol;","lastModifiedDate":"2023-10-08"},{"lineNumber":86,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":87,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":88,"author":{"gitId":"wwweert123"},"content":" @Override","lastModifiedDate":"2023-10-08"},{"lineNumber":89,"author":{"gitId":"wwweert123"},"content":" public String toString() {","lastModifiedDate":"2023-10-08"},{"lineNumber":90,"author":{"gitId":"wwweert123"},"content":" return symbol + \",\";","lastModifiedDate":"2023-10-08"},{"lineNumber":91,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":92,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"wwweert123":92}},{"path":"src/main/java/seedu/financialplanner/investments/WatchList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"package seedu.financialplanner.investments;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.JSONArray;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.parser.JSONParser;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.parser.ParseException;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import java.net.URI;","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpClient;","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpRequest;","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpResponse;","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"import java.time.Duration;","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"public class WatchList {","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"YFshadaow"},"content":" public static final WatchList INSTANCE \u003d new WatchList();","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" private static Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":" private final ArrayList\u003cStock\u003e stocks;","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" private final String API_ENDPOINT \u003d \"https://financialmodelingprep.com/api/v3/quote/\";","lastModifiedDate":"2023-10-08"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" private final String API_KEY \u003d \"iFumtYryBCbHpS3sDqLdVKi2SdP63vSV\";","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"YFshadaow"},"content":" private WatchList() {","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" stocks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-09"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-09"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" Stock apple \u003d new Stock(\"AAPL\");","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" assert apple.getSymbol() !\u003d null \u0026\u0026 apple.getStockName() !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":" stocks.add(apple);","lastModifiedDate":"2023-10-09"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" Stock meta \u003d new Stock(\"META\");","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" assert meta.getSymbol() !\u003d null \u0026\u0026 meta.getStockName() !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" stocks.add(meta);","lastModifiedDate":"2023-10-09"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":" Stock google \u003d new Stock(\"GOOGL\");","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" assert google.getSymbol() !\u003d null \u0026\u0026 google.getStockName() !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" stocks.add(google);","lastModifiedDate":"2023-10-09"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-09"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-09"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" public JSONArray fetchFMPStockPrices() {","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" HttpClient client \u003d HttpClient.newHttpClient();","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" StringBuilder queryStocks \u003d new StringBuilder();","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"wwweert123"},"content":" assert !stocks.isEmpty();","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"wwweert123"},"content":" for (Stock stock : stocks) {","lastModifiedDate":"2023-10-08"},{"lineNumber":50,"author":{"gitId":"wwweert123"},"content":" queryStocks.append(stock.toString());","lastModifiedDate":"2023-10-08"},{"lineNumber":51,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":52,"author":{"gitId":"wwweert123"},"content":" String requestURI \u003d String.format(\"%s%s?apikey\u003d%s\", API_ENDPOINT, queryStocks, API_KEY);","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"wwweert123"},"content":" HttpRequest request \u003d HttpRequest.newBuilder(URI.create(requestURI))","lastModifiedDate":"2023-10-08"},{"lineNumber":54,"author":{"gitId":"wwweert123"},"content":" .header(\"accept\", \"application/json\")","lastModifiedDate":"2023-10-08"},{"lineNumber":55,"author":{"gitId":"wwweert123"},"content":" .GET()","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"wwweert123"},"content":" .timeout(Duration.ofSeconds(10))","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"wwweert123"},"content":" .build();","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"wwweert123"},"content":" Object obj;","lastModifiedDate":"2023-10-09"},{"lineNumber":59,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Requesting API endpoint FMP\");","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-08"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":" HttpResponse\u003cString\u003e response \u003d client.send(request, HttpResponse.BodyHandlers.ofString());","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" // System.out.println(response.body());","lastModifiedDate":"2023-10-08"},{"lineNumber":64,"author":{"gitId":"wwweert123"},"content":" obj \u003d new JSONParser().parse(response.body());","lastModifiedDate":"2023-10-09"},{"lineNumber":65,"author":{"gitId":"wwweert123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.SEVERE, \"Cant request API endpoint\");","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":" } catch (InterruptedException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":69,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.SEVERE, \"Interrupted\");","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":71,"author":{"gitId":"wwweert123"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.SEVERE, \"Could not parse to JSON\");","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"wwweert123"},"content":" return (JSONArray) obj;","lastModifiedDate":"2023-10-09"},{"lineNumber":76,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":78,"author":{"gitId":"wwweert123"},"content":" public String addStock(String stockCode) throws FinancialPlannerException {","lastModifiedDate":"2023-10-13"},{"lineNumber":79,"author":{"gitId":"wwweert123"},"content":" Stock newStock \u003d null;","lastModifiedDate":"2023-10-09"},{"lineNumber":80,"author":{"gitId":"wwweert123"},"content":" newStock \u003d new Stock(stockCode);","lastModifiedDate":"2023-10-13"},{"lineNumber":81,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"wwweert123"},"content":" assert newStock.getSymbol() !\u003d null \u0026\u0026 newStock.getStockName() !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"wwweert123"},"content":" stocks.add(newStock);","lastModifiedDate":"2023-10-09"},{"lineNumber":84,"author":{"gitId":"wwweert123"},"content":" return newStock.getStockName();","lastModifiedDate":"2023-10-09"},{"lineNumber":85,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":86,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":87,"author":{"gitId":"hshiah"},"content":" public int size() {","lastModifiedDate":"2023-10-12"},{"lineNumber":88,"author":{"gitId":"hshiah"},"content":" return stocks.size();","lastModifiedDate":"2023-10-12"},{"lineNumber":89,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":90,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":91,"author":{"gitId":"hshiah"},"content":" public Stock get(int index) {","lastModifiedDate":"2023-10-12"},{"lineNumber":92,"author":{"gitId":"hshiah"},"content":" return stocks.get(index);","lastModifiedDate":"2023-10-12"},{"lineNumber":93,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":94,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"wwweert123":83,"YFshadaow":3,"hshiah":8}},{"path":"src/main/java/seedu/financialplanner/list/Budget.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.list;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"import java.text.DecimalFormat;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"public abstract class Budget {","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":" private static final int MONTH \u003d 30;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":" private static double initialBudget \u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":" private static double currentBudget \u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":" public static void setBudget(double amount) {","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":" initialBudget \u003d amount;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":" currentBudget \u003d amount;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":" assert initialBudget \u003d\u003d currentBudget : \"Initial and current budget should be the same\";","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" assert initialBudget !\u003d 0 \u0026\u0026 currentBudget !\u003d 0 : \"Initial and current budget should not be 0\";","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" public static double getInitialBudget() {","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" return initialBudget;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" public static void updateBudget(double budget) {","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" double diff;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" if (budget \u003e initialBudget) {","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" diff \u003d budget - initialBudget;","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" initialBudget \u003d budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" currentBudget +\u003d diff;","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" } else if (budget \u003c initialBudget) {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" diff \u003d initialBudget - budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" initialBudget \u003d budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" currentBudget -\u003d diff;","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" assert initialBudget \u003d\u003d budget : \"Initial budget should be equal to updated budget\";","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" public static double getCurrentBudget() {","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" return currentBudget;","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" public static String getCurrentBudgetString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" return decimalFormat.format(Cashflow.round(currentBudget, 2));","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" public static String getInitialBudgetString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" return decimalFormat.format(Cashflow.round(initialBudget, 2));","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" public static void deduct(double amount) {","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" Budget.currentBudget -\u003d amount;","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" public static void load(double initial, double current) {","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" initialBudget \u003d initial;","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":" currentBudget \u003d current;","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" public static boolean hasBudget() {","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" return initialBudget !\u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" public static String formatString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":" return \"B | \" + initialBudget + \" | \" + currentBudget;","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ryan1604":65}},{"path":"src/main/java/seedu/financialplanner/list/Cashflow.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.list;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"import java.math.BigDecimal;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"import java.math.RoundingMode;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import java.text.DecimalFormat;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"public class Cashflow {","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":" protected static double balance \u003d 0;","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":" protected double amount;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":" protected String type;","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"NeoMinWei"},"content":" protected int recur;","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":" public Cashflow(double amount, String type, int recur) {","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"NeoMinWei"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":" this.type \u003d type;","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":" this.recur \u003d recur;","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":" public void deleteCashflowvalue() {","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"NeoMinWei"},"content":" //@author mhadidg-reused","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"NeoMinWei"},"content":" //Reused from https://stackoverflow.com/questions/2808535/round-a-double-to-2-decimal-places","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"NeoMinWei"},"content":" public static double round(double value, int places) {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"NeoMinWei"},"content":" if (places \u003c 0) {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException();","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"NeoMinWei"},"content":" BigDecimal bd \u003d BigDecimal.valueOf(value);","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":" bd \u003d bd.setScale(places, RoundingMode.HALF_UP);","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":" return bd.doubleValue();","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":" //@author mhadidg","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"NeoMinWei"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"NeoMinWei"},"content":" DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"NeoMinWei"},"content":" String string \u003d \" Type: \" + type + System.lineSeparator()","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"NeoMinWei"},"content":" + \" Amount: \" + decimalFormat.format(round(amount, 2));","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"NeoMinWei"},"content":" if (recur !\u003d 0) {","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"NeoMinWei"},"content":" string +\u003d System.lineSeparator() + \" Recurring every: \" + recur + \" days\";","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"NeoMinWei"},"content":" return string;","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"NeoMinWei"},"content":" public String formatBalance() {","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"NeoMinWei"},"content":" DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"NeoMinWei"},"content":" return decimalFormat.format(round(Cashflow.balance, 2));","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"NeoMinWei"},"content":" public double getAmount() {","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"NeoMinWei"},"content":" return this.amount;","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":" public static double getBalance() {","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" return balance;","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":" public String formatString() {","lastModifiedDate":"2023-10-10"},{"lineNumber":62,"author":{"gitId":"NeoMinWei"},"content":" return this.amount + \" | \" + this.type + \" | \" + this.recur;","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":64,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"wwweert123"},"content":" public String getType() {","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":" return type;","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"wwweert123":4,"NeoMinWei":57,"ryan1604":8}},{"path":"src/main/java/seedu/financialplanner/list/CashflowList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.list;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.CashflowCategory;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":"public class CashflowList {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":" public static Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"NeoMinWei"},"content":" public static final CashflowList INSTANCE \u003d new CashflowList();","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":" public final ArrayList\u003cCashflow\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":15,"author":{"gitId":"NeoMinWei"},"content":" private CashflowList() {","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":" public void addIncome(double value, String type, int recur) {","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Adding income\");","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":" int existingListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"NeoMinWei"},"content":" Income toAdd \u003d new Income(value, type, recur);","lastModifiedDate":"2023-10-08"},{"lineNumber":23,"author":{"gitId":"NeoMinWei"},"content":" list.add(toAdd);","lastModifiedDate":"2023-10-08"},{"lineNumber":24,"author":{"gitId":"NeoMinWei"},"content":" Ui.INSTANCE.printAddedCashflow(toAdd);","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":" int newListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":" assert newListSize \u003d\u003d existingListSize + 1;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":" public void addExpense(double value, String type, int recur) {","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Adding expense\");","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"NeoMinWei"},"content":" int existingListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"NeoMinWei"},"content":" Expense toAdd \u003d new Expense(value, type, recur);","lastModifiedDate":"2023-10-08"},{"lineNumber":35,"author":{"gitId":"NeoMinWei"},"content":" list.add(toAdd);","lastModifiedDate":"2023-10-08"},{"lineNumber":36,"author":{"gitId":"NeoMinWei"},"content":" Ui.INSTANCE.printAddedCashflow(toAdd);","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"NeoMinWei"},"content":" int newListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"NeoMinWei"},"content":" assert newListSize \u003d\u003d existingListSize + 1;","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":42,"author":{"gitId":"NeoMinWei"},"content":" public void delete(int index) {","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"NeoMinWei"},"content":" int existingListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"NeoMinWei"},"content":" int listIndex \u003d index - 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"NeoMinWei"},"content":" Cashflow toRemove \u003d list.get(listIndex);","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"NeoMinWei"},"content":" list.remove(listIndex);","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"NeoMinWei"},"content":" toRemove.deleteCashflowvalue();","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"NeoMinWei"},"content":" Ui.INSTANCE.printDeletedCashflow(toRemove);","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"NeoMinWei"},"content":" int newListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"NeoMinWei"},"content":" assert newListSize \u003d\u003d existingListSize - 1;","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"NeoMinWei"},"content":" //helper method to find the index of a given cashflow in the overall list","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"NeoMinWei"},"content":" //given its index in its respective list. e.g. \"income 3\" is the third income","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"NeoMinWei"},"content":" //in the overall list","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"NeoMinWei"},"content":" private int cashflowIndexFinder(CashflowCategory category, int cashflowIndex) {","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"NeoMinWei"},"content":" assert category.equals(CashflowCategory.INCOME) || category.equals(CashflowCategory.EXPENSE);","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"NeoMinWei"},"content":" switch (category) {","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"NeoMinWei"},"content":" case INCOME:","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"NeoMinWei"},"content":" return findCashflowIndexFromIncomeIndex(cashflowIndex);","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"NeoMinWei"},"content":" case EXPENSE:","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"NeoMinWei"},"content":" return findCashflowIndexFromExpenseIndex(cashflowIndex);","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"NeoMinWei"},"content":" default:","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"NeoMinWei"},"content":" return -1;","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"NeoMinWei"},"content":" private int findCashflowIndexFromIncomeIndex(int cashflowIndex) {","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"NeoMinWei"},"content":" int cashflowCounter \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"NeoMinWei"},"content":" int overallCashflowIndex \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"NeoMinWei"},"content":" for (Cashflow entry : list) {","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"NeoMinWei"},"content":" if (entry instanceof Income) {","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":" cashflowCounter +\u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"NeoMinWei"},"content":" if (cashflowCounter \u003d\u003d cashflowIndex) {","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"NeoMinWei"},"content":" overallCashflowIndex +\u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"NeoMinWei"},"content":" return overallCashflowIndex;","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"NeoMinWei"},"content":" private int findCashflowIndexFromExpenseIndex(int cashflowIndex) {","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"NeoMinWei"},"content":" int cashflowCounter \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"NeoMinWei"},"content":" int overallCashflowIndex \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"NeoMinWei"},"content":" for (Cashflow entry : list) {","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"NeoMinWei"},"content":" if (entry instanceof Expense) {","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"NeoMinWei"},"content":" cashflowCounter +\u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"NeoMinWei"},"content":" if (cashflowCounter \u003d\u003d cashflowIndex) {","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"NeoMinWei"},"content":" overallCashflowIndex +\u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"NeoMinWei"},"content":" return overallCashflowIndex;","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"NeoMinWei"},"content":" public void deleteCashflow(CashflowCategory category, int index) {","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"NeoMinWei"},"content":" int existingListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"NeoMinWei"},"content":" int listIndex \u003d cashflowIndexFinder(category, index);","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"NeoMinWei"},"content":" Cashflow toRemove \u003d list.get(listIndex);","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"NeoMinWei"},"content":" list.remove(listIndex);","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"NeoMinWei"},"content":" toRemove.deleteCashflowvalue();","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"NeoMinWei"},"content":" Ui.INSTANCE.printDeletedCashflow(toRemove);","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":111,"author":{"gitId":"NeoMinWei"},"content":" int newListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"NeoMinWei"},"content":" assert newListSize \u003d\u003d existingListSize - 1;","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"ryan1604"},"content":" public void load(Cashflow entry) {","lastModifiedDate":"2023-10-10"},{"lineNumber":117,"author":{"gitId":"ryan1604"},"content":" list.add(entry);","lastModifiedDate":"2023-10-10"},{"lineNumber":118,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":119,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":120,"author":{"gitId":"ryan1604"},"content":" //temp method","lastModifiedDate":"2023-10-12"},{"lineNumber":121,"author":{"gitId":"ryan1604"},"content":" public String getList() {","lastModifiedDate":"2023-10-12"},{"lineNumber":122,"author":{"gitId":"ryan1604"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-10-12"},{"lineNumber":123,"author":{"gitId":"ryan1604"},"content":" for (Cashflow entry : list) {","lastModifiedDate":"2023-10-12"},{"lineNumber":124,"author":{"gitId":"ryan1604"},"content":" output +\u003d entry.formatString() + \"\\n\";","lastModifiedDate":"2023-10-13"},{"lineNumber":125,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":126,"author":{"gitId":"ryan1604"},"content":" return output;","lastModifiedDate":"2023-10-12"},{"lineNumber":127,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":128,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"NeoMinWei":109,"YFshadaow":3,"ryan1604":16}},{"path":"src/main/java/seedu/financialplanner/list/Expense.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.list;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"public class Expense extends Cashflow {","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":" public Expense(double amount, String type, int recur) {","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":" super(amount, type, recur);","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":" addExpenseValue();","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":" private void addExpenseValue() {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":" balance -\u003d this.amount;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"NeoMinWei"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":" public void deleteCashflowvalue() {","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"NeoMinWei"},"content":" balance +\u003d this.amount;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":" return \"Expense\" + System.lineSeparator() + super.toString();","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" public String formatString() {","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" return \"E | \" + super.formatString();","lastModifiedDate":"2023-10-10"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":27,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"NeoMinWei":21,"ryan1604":6,"hshiah":1}},{"path":"src/main/java/seedu/financialplanner/list/Income.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.list;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"public class Income extends Cashflow{","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":" public Income(double amount, String type, int recur) {","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":" super(amount, type, recur);","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":" addIncomeValue();","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":" private void addIncomeValue() {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":" balance +\u003d this.amount;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":13,"author":{"gitId":"NeoMinWei"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":" public void deleteCashflowvalue() {","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"NeoMinWei"},"content":" balance -\u003d this.amount;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":" return \"Income\" + System.lineSeparator() + super.toString();","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" public String formatString() {","lastModifiedDate":"2023-10-10"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" return \"I | \" + super.formatString();","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":26,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"NeoMinWei":21,"ryan1604":5,"hshiah":1}},{"path":"src/main/java/seedu/financialplanner/reminder/Reminder.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"hshiah"},"content":"package seedu.financialplanner.reminder;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"hshiah"},"content":"public class Reminder {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"hshiah"},"content":" private String type;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"hshiah"},"content":" private String date;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"hshiah"},"content":" private boolean isDone \u003d false;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"hshiah"},"content":" public Reminder(String type, String date) {","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":" this.type \u003d type;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"hshiah"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":" String status \u003d isDone ? \"Done\" : \"Not Done\";","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"hshiah"},"content":" return \"Reminder: \"+this.type + \" | \" + this.date + \" | \" + status;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"hshiah"},"content":" public void markAsDone() {","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"hshiah"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"hshiah"},"content":" /*","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"hshiah"},"content":" * Returns a string that can be saved to a file.","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"hshiah"},"content":" * Format: type | date | isDone","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"hshiah"},"content":" * Example: \"Reminder: Birthday | 2020-10-10 | false\"","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"hshiah"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"hshiah"},"content":" public String formatString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"hshiah"},"content":" String status \u003d isDone ? \"Done\" : \"Not Done\";","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"hshiah"},"content":" return this.type + \" | \" + this.date + \" | \" + this.isDone;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"hshiah":29}},{"path":"src/main/java/seedu/financialplanner/reminder/ReminderList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"hshiah"},"content":"package seedu.financialplanner.reminder;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"hshiah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"hshiah"},"content":"public class ReminderList {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"hshiah"},"content":" public static final ReminderList INSTANCE \u003d new ReminderList();","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"hshiah"},"content":" public ArrayList\u003cReminder\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"hshiah"},"content":" private ReminderList() {","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"hshiah"},"content":" public void load(Reminder reminder) {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" list.add(reminder);","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":" //TODO deleteReminder","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"hshiah":13}},{"path":"src/main/java/seedu/financialplanner/storage/LoadData.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.storage;","lastModifiedDate":"2023-10-10"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Cashflow;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Income;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Expense;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-10-10"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-10"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"public abstract class LoadData {","lastModifiedDate":"2023-10-10"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":" public static void load(CashflowList cashflowList, Ui ui, String filePath) throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" Scanner inputFile \u003d new Scanner(new FileReader(filePath));","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" String line;","lastModifiedDate":"2023-10-10"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(\"Loading existing file...\");","lastModifiedDate":"2023-10-10"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" while(inputFile.hasNext()) {","lastModifiedDate":"2023-10-10"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" line \u003d inputFile.nextLine();","lastModifiedDate":"2023-10-10"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" String[] split \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" String type \u003d split[0].trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" switch (type) {","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" case \"I\":","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" case \"E\":","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" final Cashflow entry \u003d getEntry(type, split);","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"YFshadaow"},"content":" cashflowList.load(entry);","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" case \"B\":","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" loadBudget(split);","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Error loading file\");","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" inputFile.close();","lastModifiedDate":"2023-10-10"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-10"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(\"File not found. Creating new file...\");","lastModifiedDate":"2023-10-10"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" } catch (NumberFormatException | ArrayIndexOutOfBoundsException | FinancialPlannerException e) {","lastModifiedDate":"2023-10-10"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" handleCorruptedFile(cashflowList, ui);","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" private static void handleCorruptedFile(CashflowList cashflowList, Ui ui) throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(\"File appears to be corrupted. Do you want to create a new file? (Y/N)\");","lastModifiedDate":"2023-10-10"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" if (createNewFile(ui)) {","lastModifiedDate":"2023-10-10"},{"lineNumber":51,"author":{"gitId":"YFshadaow"},"content":" cashflowList.list.clear();","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" } else {","lastModifiedDate":"2023-10-10"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Please fix the corrupted file, \" +","lastModifiedDate":"2023-10-10"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" \"which can be found in data/data.txt.\");","lastModifiedDate":"2023-10-10"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" private static void loadBudget(String[] split) {","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" double initial \u003d Double.parseDouble(split[1].trim());","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" double current \u003d Double.parseDouble(split[2].trim());","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":" Budget.load(initial, current);","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" private static boolean createNewFile(Ui ui) {","lastModifiedDate":"2023-10-10"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":" String line \u003d ui.input();","lastModifiedDate":"2023-10-10"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":" while (!line.equalsIgnoreCase(\"y\") \u0026\u0026 !line.equalsIgnoreCase(\"n\")) {","lastModifiedDate":"2023-10-10"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(\"Unknown input. Please enter Y or N only.\");","lastModifiedDate":"2023-10-10"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":" line \u003d ui.input();","lastModifiedDate":"2023-10-10"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":71,"author":{"gitId":"ryan1604"},"content":" return line.equalsIgnoreCase(\"y\");","lastModifiedDate":"2023-10-10"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":" private static Cashflow getEntry(String type, String[] split) throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":" double value;","lastModifiedDate":"2023-10-10"},{"lineNumber":76,"author":{"gitId":"ryan1604"},"content":" int recur;","lastModifiedDate":"2023-10-10"},{"lineNumber":77,"author":{"gitId":"ryan1604"},"content":" Cashflow entry;","lastModifiedDate":"2023-10-10"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":" switch (type) {","lastModifiedDate":"2023-10-10"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":" case \"I\":","lastModifiedDate":"2023-10-10"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":" value \u003d Double.parseDouble(split[1].trim());","lastModifiedDate":"2023-10-10"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" recur \u003d Integer.parseInt(split[3].trim());","lastModifiedDate":"2023-10-10"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":" entry \u003d new Income(value, split[2].trim(), recur);","lastModifiedDate":"2023-10-10"},{"lineNumber":84,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-10"},{"lineNumber":85,"author":{"gitId":"ryan1604"},"content":" case \"E\":","lastModifiedDate":"2023-10-10"},{"lineNumber":86,"author":{"gitId":"ryan1604"},"content":" value \u003d Double.parseDouble(split[1].trim());","lastModifiedDate":"2023-10-10"},{"lineNumber":87,"author":{"gitId":"ryan1604"},"content":" recur \u003d Integer.parseInt(split[3].trim());","lastModifiedDate":"2023-10-10"},{"lineNumber":88,"author":{"gitId":"ryan1604"},"content":" entry \u003d new Expense(value, split[2].trim(), recur);","lastModifiedDate":"2023-10-10"},{"lineNumber":89,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-10"},{"lineNumber":90,"author":{"gitId":"ryan1604"},"content":" default:","lastModifiedDate":"2023-10-10"},{"lineNumber":91,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Error loading file\");","lastModifiedDate":"2023-10-10"},{"lineNumber":92,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":93,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":94,"author":{"gitId":"ryan1604"},"content":" return entry;","lastModifiedDate":"2023-10-10"},{"lineNumber":95,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":96,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"ryan1604":93,"YFshadaow":3}},{"path":"src/main/java/seedu/financialplanner/storage/SaveData.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.storage;","lastModifiedDate":"2023-10-10"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Cashflow;","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-10"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"public abstract class SaveData {","lastModifiedDate":"2023-10-10"},{"lineNumber":12,"author":{"gitId":"YFshadaow"},"content":" public static void save(CashflowList cashflowList, String filePath) throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"YFshadaow"},"content":" for (Cashflow entry : cashflowList.list) {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" fw.write(entry.formatString() + \"\\n\");","lastModifiedDate":"2023-10-10"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" fw.write(Budget.formatString() + \"\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" fw.close();","lastModifiedDate":"2023-10-10"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-10"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Error saving file.\");","lastModifiedDate":"2023-10-10"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"ryan1604":21,"YFshadaow":3}},{"path":"src/main/java/seedu/financialplanner/storage/Storage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.storage;","lastModifiedDate":"2023-10-10"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-10-10"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"YFshadaow"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"public class Storage {","lastModifiedDate":"2023-10-10"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":" public static final Storage INSTANCE \u003d new Storage();","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" private final Path path \u003d Paths.get(\"data\");","lastModifiedDate":"2023-10-10"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":" private Storage() {","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-10-10"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" System.out.println(\"Directory doesn\u0027t exist. Creating directory...\");","lastModifiedDate":"2023-10-10"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" Files.createDirectory(path);","lastModifiedDate":"2023-10-10"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-10"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" System.out.println(\"Error creating directory: \" + e.getMessage());","lastModifiedDate":"2023-10-10"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":27,"author":{"gitId":"YFshadaow"},"content":" public void load(CashflowList list, Ui ui, String filePath) throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" LoadData.load(list, ui, filePath);","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"YFshadaow"},"content":" public void save(CashflowList list, String filePath) throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" SaveData.save(list, filePath);","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"ryan1604":28,"YFshadaow":6}},{"path":"src/main/java/seedu/financialplanner/utils/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.utils;","lastModifiedDate":"2023-10-07"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":3,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.commands.AbstractCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.commands.AddStockCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.commands.OverviewCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.commands.AddCashflowCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.commands.DeleteCashflowCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.commands.ExitCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.commands.FindCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.commands.InvalidCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.commands.ListCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.commands.RawCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.commands.WatchListCommand;","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.commands.VisCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.commands.BudgetCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.commands.AddReminderCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.commands.SetGoalCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"YFshadaow"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":"import java.util.List;","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"YFshadaow"},"content":"import java.util.Map;","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":"public class Parser {","lastModifiedDate":"2023-10-07"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" private static final String EXIT_COMMAND \u003d \"exit\";","lastModifiedDate":"2023-10-07"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" private static final String WATCHLIST_COMMAND \u003d \"watchlist\";","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":" private static final String ADD_CASHFLOW_COMMAND \u003d \"add\";","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":" private static final String DELETE_CASHFLOW_COMMAND \u003d \"delete\";","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" private static final String ADD_STOCK_COMMAND \u003d \"addstock\";","lastModifiedDate":"2023-10-09"},{"lineNumber":33,"author":{"gitId":"hshiah"},"content":" private static final String FIND_COMMAND \u003d \"find\";","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" private static final String OVERVIEW_COMMAND \u003d \"overview\";","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" private static final String BUDGET_COMMAND \u003d \"budget\";","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":" private static final String VISUALIZATION_COMMAND \u003d \"vis\";","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"hshiah"},"content":" private static final String ADD_REMINDER_COMMAND \u003d \"addreminder\";","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"YFshadaow"},"content":" private static final String LIST_COMMAND \u003d \"list\";","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"hshiah"},"content":" private static final String SET_GOAL_COMMAND \u003d \"set\";","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" public static AbstractCommand parseCommand(String input) throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"YFshadaow"},"content":" RawCommand rawCommand \u003d parseRawCommand(input);","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"YFshadaow"},"content":" return parseCommand(rawCommand);","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" public static AbstractCommand parseCommand(RawCommand rawCommand) throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"YFshadaow"},"content":" switch (rawCommand.getCommandName()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" case EXIT_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"YFshadaow"},"content":" return new ExitCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" case WATCHLIST_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"YFshadaow"},"content":" return new WatchListCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"NeoMinWei"},"content":" case ADD_CASHFLOW_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"NeoMinWei"},"content":" return new AddCashflowCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"NeoMinWei"},"content":" case DELETE_CASHFLOW_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"NeoMinWei"},"content":" return new DeleteCashflowCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" case ADD_STOCK_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"YFshadaow"},"content":" return new AddStockCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" case FIND_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"YFshadaow"},"content":" return new FindCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" case BUDGET_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":" return new BudgetCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":" case VISUALIZATION_COMMAND:","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" return new VisCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" case OVERVIEW_COMMAND:","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":" return new OverviewCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"hshiah"},"content":" case ADD_REMINDER_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"hshiah"},"content":" return new AddReminderCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"YFshadaow"},"content":" case LIST_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"YFshadaow"},"content":" return new ListCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"hshiah"},"content":" case SET_GOAL_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"hshiah"},"content":" return new SetGoalCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":" default:","lastModifiedDate":"2023-10-07"},{"lineNumber":73,"author":{"gitId":"YFshadaow"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":76,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"YFshadaow"},"content":" public static RawCommand parseRawCommand(String input) throws IllegalArgumentException{","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"YFshadaow"},"content":" Iterator\u003cString\u003e iterator \u003d Arrays.stream(input.split(\" \")).iterator();","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"YFshadaow"},"content":" if (!iterator.hasNext()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Command cannot be empty\");","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":82,"author":{"gitId":"YFshadaow"},"content":" String commandName \u003d iterator.next();","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"YFshadaow"},"content":" List\u003cString\u003e args \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"YFshadaow"},"content":" Map\u003cString, String\u003e extraArgs \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"YFshadaow"},"content":" List\u003cString\u003e extraArgumentContentBuffer \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"YFshadaow"},"content":" String currentExtraArgumentName \u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"YFshadaow"},"content":" while (iterator.hasNext()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"YFshadaow"},"content":" String next \u003d iterator.next();","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"YFshadaow"},"content":" if (next.startsWith(\"/\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"YFshadaow"},"content":" // Save previous extra argument when next extra argument is found","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"YFshadaow"},"content":" if (currentExtraArgumentName !\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"NeoMinWei"},"content":" savePreviousExtraArgument(extraArgs, currentExtraArgumentName, extraArgumentContentBuffer);","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"YFshadaow"},"content":" if (next.length() \u003d\u003d 1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Extra argument name cannot be empty\");","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"YFshadaow"},"content":" currentExtraArgumentName \u003d next.substring(1);","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"NeoMinWei"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"YFshadaow"},"content":" if (currentExtraArgumentName \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"YFshadaow"},"content":" args.add(next);","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"YFshadaow"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"YFshadaow"},"content":" extraArgumentContentBuffer.add(next);","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"YFshadaow"},"content":" // Save previous extra argument at the very end","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"YFshadaow"},"content":" if (currentExtraArgumentName !\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"NeoMinWei"},"content":" savePreviousExtraArgument(extraArgs, currentExtraArgumentName, extraArgumentContentBuffer);","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"NeoMinWei"},"content":" return new RawCommand(commandName, args, extraArgs);","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"NeoMinWei"},"content":" private static void savePreviousExtraArgument(Map\u003cString, String\u003e extraArgs","lastModifiedDate":"2023-10-16"},{"lineNumber":119,"author":{"gitId":"NeoMinWei"},"content":" , String currentExtraArgumentName, List\u003cString\u003e extraArgumentContentBuffer) {","lastModifiedDate":"2023-10-16"},{"lineNumber":120,"author":{"gitId":"YFshadaow"},"content":" if (extraArgs.containsKey(currentExtraArgumentName)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"YFshadaow"},"content":" String.format(\"Duplicate extra argument name: %s\", currentExtraArgumentName));","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"YFshadaow"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"YFshadaow"},"content":" extraArgs.put(currentExtraArgumentName, String.join(\" \", extraArgumentContentBuffer));","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"YFshadaow"},"content":" extraArgumentContentBuffer.clear();","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":128,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-07"}],"authorContributionMap":{"wwweert123":10,"NeoMinWei":24,"ryan1604":24,"YFshadaow":61,"hshiah":9}},{"path":"src/main/java/seedu/financialplanner/utils/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.utils;","lastModifiedDate":"2023-10-07"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"import org.apache.commons.lang3.StringUtils;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.JSONObject;","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.list.Cashflow;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-07"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"public class Ui {","lastModifiedDate":"2023-10-07"},{"lineNumber":11,"author":{"gitId":"YFshadaow"},"content":" public static final Ui INSTANCE \u003d new Ui();","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"YFshadaow"},"content":" private Scanner Scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"YFshadaow"},"content":" private Ui() {","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"YFshadaow"},"content":" public static void printCorruptedFileError(String message) {","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"YFshadaow"},"content":" System.out.println(message);","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":21,"author":{"gitId":"YFshadaow"},"content":" public Scanner getScanner() {","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":" return Scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"YFshadaow"},"content":" public void setScanner(Scanner scanner) {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"YFshadaow"},"content":" this.Scanner \u003d scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-10-07"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" System.out.println(message);","lastModifiedDate":"2023-10-07"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" public void welcomeMessage() {","lastModifiedDate":"2023-10-07"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Welcome to your Financial Planner. Type something to get started.\");","lastModifiedDate":"2023-10-09"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" public void exitMessage() {","lastModifiedDate":"2023-10-07"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Exiting Financial Planner. Goodbye.\");","lastModifiedDate":"2023-10-09"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" public String input() {","lastModifiedDate":"2023-10-07"},{"lineNumber":42,"author":{"gitId":"YFshadaow"},"content":" return Scanner.nextLine().trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" public void printWatchListHeader() {","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" System.out.print(\"Symbol\");","lastModifiedDate":"2023-10-09"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-10-09"},{"lineNumber":48,"author":{"gitId":"wwweert123"},"content":" System.out.print(\"Price\");","lastModifiedDate":"2023-10-09"},{"lineNumber":49,"author":{"gitId":"wwweert123"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-10-09"},{"lineNumber":50,"author":{"gitId":"wwweert123"},"content":" System.out.print(\"Company Name\");","lastModifiedDate":"2023-10-09"},{"lineNumber":51,"author":{"gitId":"wwweert123"},"content":" System.out.println();","lastModifiedDate":"2023-10-09"},{"lineNumber":52,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":53,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":54,"author":{"gitId":"wwweert123"},"content":" public void printStockInfo(JSONObject stock) {","lastModifiedDate":"2023-10-09"},{"lineNumber":55,"author":{"gitId":"wwweert123"},"content":" String symbol \u003d StringUtils.rightPad((String) stock.get(\"symbol\"), 10);","lastModifiedDate":"2023-10-09"},{"lineNumber":56,"author":{"gitId":"wwweert123"},"content":" String price \u003d StringUtils.rightPad(stock.get(\"price\").toString(), 10);","lastModifiedDate":"2023-10-09"},{"lineNumber":57,"author":{"gitId":"wwweert123"},"content":" String name \u003d StringUtils.rightPad((String) stock.get(\"name\"), 10);","lastModifiedDate":"2023-10-09"},{"lineNumber":58,"author":{"gitId":"wwweert123"},"content":" System.out.println(symbol + price + name);","lastModifiedDate":"2023-10-09"},{"lineNumber":59,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":61,"author":{"gitId":"wwweert123"},"content":" public void printAddStock(String stockName) {","lastModifiedDate":"2023-10-09"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":" System.out.println(\"You have successfully added:\");","lastModifiedDate":"2023-10-09"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" System.out.println(stockName);","lastModifiedDate":"2023-10-09"},{"lineNumber":64,"author":{"gitId":"wwweert123"},"content":" System.out.println(\"Use Watchlist to view it!\");","lastModifiedDate":"2023-10-09"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":67,"author":{"gitId":"NeoMinWei"},"content":" public void printAddedCashflow(Cashflow entry) {","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"NeoMinWei"},"content":" System.out.print(\"You have added an \");","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(entry);","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(\"to the Financial Planner.\");","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(\"Balance: \" + entry.formatBalance());","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"NeoMinWei"},"content":" public void printDeletedCashflow(Cashflow entry) {","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"NeoMinWei"},"content":" System.out.print(\"You have removed an \");","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(entry);","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(\"from the Financial Planner.\");","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(\"Balance: \" + entry.formatBalance());","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":" public void printBudgetBeforeUpdate() {","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Budget has been updated:\\nOld initial budget: \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":" Budget.getInitialBudgetString() + \"\\nOld current budget: \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"ryan1604"},"content":" Budget.getCurrentBudgetString());","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"ryan1604"},"content":" public void printBudgetAfterUpdate() {","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"ryan1604"},"content":" showMessage(\"New initial budget: \" + Budget.getInitialBudgetString() +","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"ryan1604"},"content":" \"\\nNew current budget: \" + Budget.getCurrentBudgetString());","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"ryan1604"},"content":" if (Budget.getCurrentBudget() \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"ryan1604"},"content":" showMessage(\"You have exceeded your budget, please update to a larger budget or \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"ryan1604"},"content":" \"reset the current budget to initial budget.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"ryan1604"},"content":" public void printBudgetAfterDeduction() {","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"ryan1604"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"ryan1604"},"content":" if (Budget.getCurrentBudget() \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"ryan1604"},"content":" message +\u003d \"You have exceeded your current budget by: \";","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"ryan1604"},"content":" } else if (Budget.getCurrentBudget() \u003e 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"ryan1604"},"content":" message +\u003d \"Your remaining budget for the month is: \";","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"ryan1604"},"content":" message +\u003d Budget.getCurrentBudgetString();","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"ryan1604"},"content":" showMessage(message);","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-07"}],"authorContributionMap":{"wwweert123":24,"NeoMinWei":14,"ryan1604":51,"YFshadaow":17}},{"path":"src/main/java/seedu/financialplanner/visualisations/Categorizer.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"package seedu.financialplanner.visualisations;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.list.Cashflow;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.list.Expense;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.list.Income;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"import java.util.Map;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"public class Categorizer {","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":" public static Map\u003cString, Double\u003e sortType(CashflowList cashflowList, String type)","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":" throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":" switch (type) {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":" case \"expense\":","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"categorizing expenses\");","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" return sortExpenses(cashflowList);","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":" case \"income\":","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"categorizing income\");","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" return sortIncome(cashflowList);","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Type not found\");","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" public static Map\u003cString, Double\u003e sortExpenses(CashflowList cashflowList) {","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":" Map\u003cString, Double\u003e expensesByCat \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" for (Cashflow e: cashflowList.list) {","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" if (e instanceof Expense) {","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" String key \u003d e.getType();","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"NeoMinWei"},"content":" double value \u003d expensesByCat.getOrDefault(key, 0.0) + e.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" assert value \u003e\u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":" expensesByCat.put(key, value);","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" return expensesByCat;","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" public static Map\u003cString, Double\u003e sortIncome(CashflowList cashflowList) {","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":" Map\u003cString, Double\u003e incomeByCat \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" for (Cashflow e: cashflowList.list) {","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" if (e instanceof Income) {","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" String key \u003d e.getType();","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"NeoMinWei"},"content":" double value \u003d incomeByCat.getOrDefault(key, 0.0) + e.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"wwweert123"},"content":" assert value \u003e\u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"wwweert123"},"content":" incomeByCat.put(key, value);","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"wwweert123"},"content":" return incomeByCat;","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"wwweert123":52,"NeoMinWei":2}},{"path":"src/main/java/seedu/financialplanner/visualisations/Visualizer.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"package seedu.financialplanner.visualisations;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import org.knowm.xchart.CategoryChart;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import org.knowm.xchart.CategoryChartBuilder;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"import org.knowm.xchart.PieChart;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"import org.knowm.xchart.PieChartBuilder;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import org.knowm.xchart.SwingWrapper;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import org.knowm.xchart.style.Styler;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"import javax.swing.JFrame;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"import java.awt.Color;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"import java.util.List;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"import java.util.Map;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":"public class Visualizer {","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" public static void displayChart(String chartType, Map\u003cString, Double\u003e expensesByCat)","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" switch (chartType) {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" case \"pie\":","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" displayPieChart(expensesByCat);","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" break;","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" case \"bar\":","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":" displayBarChart(expensesByCat);","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" break;","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" default:","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Chart Type Not Found\");","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" public static void displayPieChart (Map\u003cString, Double\u003e expensesByCat) {","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" PieChart chart \u003d new PieChartBuilder().width(800).height(600).title(\"Test\").build();","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" // Customize Chart","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" Color[] sliceColors \u003d new Color[] {","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":" new Color(224, 68, 14),","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" new Color(230, 105, 62),","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" new Color(236, 143, 110),","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" new Color(243, 180, 159),","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":" new Color(246, 199, 182)","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"wwweert123"},"content":" };","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"wwweert123"},"content":" chart.getStyler().setSeriesColors(sliceColors);","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"wwweert123"},"content":" for (Map.Entry\u003cString, Double\u003e set: expensesByCat.entrySet()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"wwweert123"},"content":" chart.addSeries(set.getKey(), set.getValue());","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Displaying Pie Chart\");","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"wwweert123"},"content":" // Show it","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"wwweert123"},"content":" JFrame swHR \u003d new SwingWrapper\u003c\u003e(chart).displayChart();","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"wwweert123"},"content":" javax.swing.SwingUtilities.invokeLater(","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"wwweert123"},"content":" ()-\u003eswHR.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"wwweert123"},"content":" );","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":" public static void displayBarChart (Map\u003cString, Double\u003e expensesByCat) {","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" CategoryChart chart \u003d new CategoryChartBuilder().width(800).height(600)","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"wwweert123"},"content":" .title(\"Expenses\").xAxisTitle(\"Type\").yAxisTitle(\"Value\").build();","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"wwweert123"},"content":" // Customize Chart","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":" chart.getStyler().setLegendPosition(Styler.LegendPosition.InsideNW);","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"wwweert123"},"content":" chart.getStyler().setHasAnnotations(true);","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":" assert !expensesByCat.isEmpty();","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"wwweert123"},"content":" // Series","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"wwweert123"},"content":" List\u003cDouble\u003e values \u003d new ArrayList\u003cDouble\u003e(expensesByCat.values());","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"wwweert123"},"content":" List\u003cString\u003e keys \u003d new ArrayList\u003cString\u003e(expensesByCat.keySet());","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"wwweert123"},"content":" chart.addSeries(\"Expense\", keys, values);","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Displaying Bar Chart\");","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"wwweert123"},"content":" JFrame swHR \u003d new SwingWrapper\u003c\u003e(chart).displayChart();","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"wwweert123"},"content":" javax.swing.SwingUtilities.invokeLater(","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"wwweert123"},"content":" ()-\u003eswHR.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"wwweert123"},"content":" );","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"wwweert123":80}},{"path":"src/test/java/seedu/financialplanner/FinancialPlannerTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner;","lastModifiedDate":"2023-10-07"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"class FinancialPlannerTest {","lastModifiedDate":"2023-10-07"},{"lineNumber":8,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":" public void sampleTest() {","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":" assertTrue(true);","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"-":10,"ryan1604":2}},{"path":"src/test/java/seedu/financialplanner/commands/AddCashflowCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.investments.WatchList;","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.utils.Parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":"class AddCashflowCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"YFshadaow"},"content":" private Ui ui \u003d Ui.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":" private CashflowList cashflowList \u003d CashflowList.INSTANCE;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"YFshadaow"},"content":" private WatchList watchList \u003d WatchList.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":" void testExecute() {","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"YFshadaow"},"content":" CashflowList.INSTANCE.list.clear();","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":" AddCashflowCommand testEntry \u003d new AddCashflowCommand(Parser","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":" .parseRawCommand(\"add income /a 300 /t work /r 30\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":" testEntry.execute();","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":" assertEquals(300, testEntry.amount);","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":" assertEquals(\"work\", testEntry.type);","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(30, testEntry.recur);","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":" testEntry \u003d new AddCashflowCommand(Parser.parseRawCommand(\"add expense /a 15 /t double mcspicy\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"YFshadaow"},"content":" testEntry.execute();","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"YFshadaow"},"content":" assertEquals(15, testEntry.amount);","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"YFshadaow"},"content":" assertEquals(\"double mcspicy\", testEntry.type);","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(0, testEntry.recur);","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"NeoMinWei":20,"YFshadaow":13}},{"path":"src/test/java/seedu/financialplanner/investments/WatchListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"package seedu.financialplanner.investments;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.JSONArray;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.JSONObject;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"class WatchListTest {","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":" void fetchFMPStockPrices() {","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"YFshadaow"},"content":" WatchList wl \u003d WatchList.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":" JSONArray obj \u003d wl.fetchFMPStockPrices();","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":" JSONObject apple \u003d (JSONObject) obj.get(0);","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":" assertNotNull(apple.get(\"price\"));","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":" JSONObject meta \u003d (JSONObject) obj.get(1);","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":" assertNotNull(meta.get(\"price\"));","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":" JSONObject google \u003d (JSONObject) obj.get(2);","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" assertNotNull(google.get(\"price\"));","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" void addStock() throws Exception {","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"YFshadaow"},"content":" WatchList wl \u003d WatchList.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" String market \u003d \"NYSE\";","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" String stockCode \u003d \"GME\";","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" assertEquals(\"Gamestop Corporation - Class A\", wl.addStock(stockCode));","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"wwweert123":29,"YFshadaow":2}},{"path":"src/test/java/seedu/financialplanner/list/BudgetTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.list;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.Order;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.TestMethodOrder;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.commands.AddCashflowCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"@TestMethodOrder(OrderAnnotation.class)","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"public class BudgetTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" @Order(1)","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" public void testSetBudget() {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" assertFalse(Budget.hasBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" Budget.setBudget(500);","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" assertTrue(Budget.hasBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" assertEquals(500, Budget.getInitialBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" assertEquals(500, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" @Order(2)","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" public void testNewExpense() {","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"NeoMinWei"},"content":" AddCashflowCommand testExpense \u003d new AddCashflowCommand(Parser.parseRawCommand(\"add expense /a 50 /t food\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" testExpense.execute();","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" assertEquals(450, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" @Order(3)","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" public void testUpdateBudget() {","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" Budget.updateBudget(1000);","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" assertEquals(1000, Budget.getInitialBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" assertEquals(950, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NeoMinWei":2,"ryan1604":39}},{"path":"src/test/java/seedu/financialplanner/list/CashflowListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.list;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.CashflowCategory;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import java.text.DecimalFormat;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":"class CashflowListTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"NeoMinWei"},"content":" private CashflowList testList \u003d CashflowList.INSTANCE;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":" private DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"NeoMinWei"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":" void testAddIncomeAndExpense() {","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"YFshadaow"},"content":" CashflowList.INSTANCE.list.clear();","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" Cashflow.balance \u003d 0;","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":" testList.addIncome(15, \"work\", 30);","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":" Cashflow testIncome \u003d testList.list.get(0);","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"NeoMinWei"},"content":" double roundedValue \u003d Cashflow.round(testIncome.amount, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"NeoMinWei"},"content":" double roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"NeoMinWei"},"content":" assertTrue(testIncome instanceof Income);","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"15.00\", decimalFormat.format(roundedValue));","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"work\", testIncome.type);","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(30, testIncome.recur);","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"15.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":" testList.addIncome(15.999, \"rate of returns\", 0);","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":" testIncome \u003d testList.list.get(1);","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"NeoMinWei"},"content":" roundedValue \u003d Cashflow.round(testIncome.amount, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"NeoMinWei"},"content":" assertTrue(testIncome instanceof Income);","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"16.00\", decimalFormat.format(roundedValue));","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"rate of returns\", testIncome.type);","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(0, testIncome.recur);","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"31.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"NeoMinWei"},"content":" testList.addExpense(10, \"lunch\", 0);","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"NeoMinWei"},"content":" Cashflow testExpense \u003d testList.list.get(2);","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"NeoMinWei"},"content":" roundedValue \u003d Cashflow.round(testExpense.amount, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"NeoMinWei"},"content":" assertTrue(testExpense instanceof Expense);","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"10.00\", decimalFormat.format(roundedValue));","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"lunch\", testExpense.type);","lastModifiedDate":"2023-10-12"},{"lineNumber":47,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(0, testExpense.recur);","lastModifiedDate":"2023-10-12"},{"lineNumber":48,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"21.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-12"},{"lineNumber":49,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"NeoMinWei"},"content":" testList.addExpense(19.999, \"Apple Music\", 30);","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"NeoMinWei"},"content":" testExpense \u003d testList.list.get(3);","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"NeoMinWei"},"content":" roundedValue \u003d Cashflow.round(testExpense.amount, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"NeoMinWei"},"content":" assertTrue(testExpense instanceof Expense);","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"20.00\", decimalFormat.format(roundedValue));","lastModifiedDate":"2023-10-12"},{"lineNumber":56,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"Apple Music\", testExpense.type);","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(30, testExpense.recur);","lastModifiedDate":"2023-10-12"},{"lineNumber":58,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"1.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-12"},{"lineNumber":59,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":60,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"NeoMinWei"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"NeoMinWei"},"content":" void testDeleteIncomeAndExpense() {","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"NeoMinWei"},"content":" testList.deleteCashflow(CashflowCategory.INCOME, 2);","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(3, testList.list.size());","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"NeoMinWei"},"content":" double roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"-15.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"NeoMinWei"},"content":" testList.delete(1);","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(2, testList.list.size());","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"-30.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"NeoMinWei"},"content":" testList.deleteCashflow(CashflowCategory.EXPENSE, 2);","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(1, testList.list.size());","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"-10.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"NeoMinWei"},"content":" testList.delete(1);","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(0, testList.list.size());","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"0.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"NeoMinWei":79,"ryan1604":2,"YFshadaow":2}},{"path":"src/test/java/seedu/financialplanner/storage/StorageTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.storage;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Expense;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Income;","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"import java.io.ByteArrayInputStream;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"YFshadaow"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":"public class StorageTest {","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" @TempDir","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" public static Path testFolder;","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" public void loadValidData() throws FinancialPlannerException {","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"YFshadaow"},"content":" Storage storage \u003d Storage.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"YFshadaow"},"content":" CashflowList cashflowList \u003d CashflowList.INSTANCE;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"YFshadaow"},"content":" cashflowList.list.clear();","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"YFshadaow"},"content":" storage.load(cashflowList, Ui.INSTANCE, \"src/test/testData/ValidData.txt\");","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"YFshadaow"},"content":" String actual \u003d cashflowList.getList();","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"YFshadaow"},"content":" cashflowList.list.clear();","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"YFshadaow"},"content":" getTestData();","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"YFshadaow"},"content":" String expected \u003d cashflowList.getList();","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"YFshadaow"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" public void loadInvalidData_userInputNo() {","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"YFshadaow"},"content":" Storage storage \u003d Storage.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"YFshadaow"},"content":" CashflowList test \u003d CashflowList.INSTANCE;","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"YFshadaow"},"content":" test.list.clear();","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" ByteArrayInputStream in \u003d new ByteArrayInputStream(\"n\".getBytes());","lastModifiedDate":"2023-10-13"},{"lineNumber":43,"author":{"gitId":"YFshadaow"},"content":" Ui.INSTANCE.setScanner(new Scanner(in));","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" assertThrows(FinancialPlannerException.class,","lastModifiedDate":"2023-10-13"},{"lineNumber":45,"author":{"gitId":"YFshadaow"},"content":" () -\u003e storage.load(test, Ui.INSTANCE, \"src/test/testData/InvalidData.txt\"));","lastModifiedDate":"2023-10-13"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" public void saveValidData() throws FinancialPlannerException, IOException {","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"YFshadaow"},"content":" CashflowList.INSTANCE.list.clear();","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"YFshadaow"},"content":" getTestData();","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"YFshadaow"},"content":" Storage storage \u003d Storage.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":53,"author":{"gitId":"YFshadaow"},"content":" storage.save(CashflowList.INSTANCE, String.valueOf(testFolder.resolve(\"temp.txt\")));","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" assertEquals(Files.readAllLines(Path.of(\"src/test/testData/ValidData.txt\")),","lastModifiedDate":"2023-10-13"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":" Files.readAllLines(testFolder.resolve(\"temp.txt\")));","lastModifiedDate":"2023-10-13"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" public void saveNonExistentFile() {","lastModifiedDate":"2023-10-13"},{"lineNumber":60,"author":{"gitId":"YFshadaow"},"content":" getTestData();","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"YFshadaow"},"content":" Storage storage \u003d Storage.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":62,"author":{"gitId":"YFshadaow"},"content":" assertThrows(FinancialPlannerException.class, () -\u003e storage.save(CashflowList.INSTANCE, \"\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":65,"author":{"gitId":"YFshadaow"},"content":" private void getTestData() {","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"YFshadaow"},"content":" CashflowList cashflowList \u003d CashflowList.INSTANCE;","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"YFshadaow"},"content":" cashflowList.load(new Income(123.12, \"allowance\", 0));","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"YFshadaow"},"content":" cashflowList.load(new Expense(100, \"daily necessities\", 30));","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"ryan1604":43,"YFshadaow":27}}] +[{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"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":"wwweert123"},"content":" implementation group: \u0027com.googlecode.json-simple\u0027, name: \u0027json-simple\u0027, version: \u00271.1.1\u0027","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":" implementation group: \u0027org.apache.commons\u0027, name: \u0027commons-lang3\u0027, version: \u00273.0\u0027","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":" implementation group: \u0027org.knowm.xchart\u0027, name: \u0027xchart\u0027, version: \u00273.2.2\u0027","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" mainClass.set(\"seedu.financialplanner.FinancialPlanner\")","lastModifiedDate":"2023-10-07"},{"lineNumber":36,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":38,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":" archiveBaseName.set(\"duke\")","lastModifiedDate":"2023-09-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":45,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":47,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":48,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"wwweert123":3,"-":45,"ryan1604":2}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Portfolio ","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"--------|:-----------:|:--------------:|:---------:","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"-"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | John Doe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Don Joe | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Ryan Chua | [Github](https://github.com/ryan1604) | [Portfolio](docs/team/ryanchua.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Neo Min Wei | [Github](https://github.com/NeoMinWei) | [Portfolio](docs/team/NeoMinWei.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Frederick | [Github](https://github.com/) | [Portfolio](docs/team/frederick.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"wwweert123":1,"NeoMinWei":3,"-":5,"ryan1604":1}},{"path":"docs/team/NeoMinWei.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"# Neo Min Wei - Project Portfolio Page","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Overview","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"### Summary of Contributions","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"NeoMinWei":1,"-":5}},{"path":"docs/team/frederick.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"I am Frederick ","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"Hello ","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"I am from this team!","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"wwweert123":5}},{"path":"src/main/java/seedu/financialplanner/FinancialPlanner.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner;","lastModifiedDate":"2023-10-07"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":3,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.commands.AbstractCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.commands.ExitCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.investments.WatchList;","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.storage.Storage;","lastModifiedDate":"2023-10-10"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Parser;","lastModifiedDate":"2023-10-07"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-07"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"public class FinancialPlanner {","lastModifiedDate":"2023-10-07"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" private static final String FILE_PATH \u003d \"data/data.txt\";","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"YFshadaow"},"content":" private final Storage storage \u003d Storage.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":" private final Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"YFshadaow"},"content":" private final WatchList watchList \u003d WatchList.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":" private final CashflowList cashflowList \u003d CashflowList.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"YFshadaow"},"content":" private FinancialPlanner() {","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":" new FinancialPlanner().run();","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" public void run() {","lastModifiedDate":"2023-10-07"},{"lineNumber":28,"author":{"gitId":"YFshadaow"},"content":" try {","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"YFshadaow"},"content":" storage.load(cashflowList, ui, FILE_PATH);","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"YFshadaow"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"YFshadaow"},"content":" ui.showMessage(e.getMessage());","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" return;","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" FinancialPlannerLogger.initialise();","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" ui.welcomeMessage();","lastModifiedDate":"2023-10-07"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" String input;","lastModifiedDate":"2023-10-07"},{"lineNumber":38,"author":{"gitId":"YFshadaow"},"content":" AbstractCommand command \u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":40,"author":{"gitId":"YFshadaow"},"content":" while (!(command instanceof ExitCommand)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" input \u003d ui.input();","lastModifiedDate":"2023-10-07"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":43,"author":{"gitId":"YFshadaow"},"content":" command \u003d Parser.parseCommand(input);","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"YFshadaow"},"content":" command.execute();","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"YFshadaow"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(e.getMessage());","lastModifiedDate":"2023-10-10"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" save();","lastModifiedDate":"2023-10-10"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" ui.exitMessage();","lastModifiedDate":"2023-10-07"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" public void save() {","lastModifiedDate":"2023-10-10"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":55,"author":{"gitId":"YFshadaow"},"content":" storage.save(cashflowList, FILE_PATH);","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-10"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(e.getMessage());","lastModifiedDate":"2023-10-10"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-07"}],"authorContributionMap":{"wwweert123":1,"NeoMinWei":2,"ryan1604":33,"YFshadaow":24}},{"path":"src/main/java/seedu/financialplanner/FinancialPlannerLogger.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"import java.util.logging.FileHandler;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"import java.util.logging.SimpleFormatter;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"import java.util.logging.LogManager;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"public class FinancialPlannerLogger {","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":" private static Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":" public static void initialise() {","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" FileHandler fh \u003d new FileHandler(\"data/logger.log\");","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" LogManager.getLogManager().reset();","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" logger.addHandler(fh);","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" fh.setFormatter(new SimpleFormatter());","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.INFO, \"Logger initialised\");","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" } catch (Exception e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.SEVERE, e.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"ryan1604":23}},{"path":"src/main/java/seedu/financialplanner/commands/AbstractCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"YFshadaow"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"YFshadaow"},"content":"public abstract class AbstractCommand {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":" public abstract void execute() throws Exception;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"YFshadaow"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"YFshadaow":5}},{"path":"src/main/java/seedu/financialplanner/commands/AddCashflowCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.CashflowCategory;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.ExpenseType;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.IncomeType;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Cashflow;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"NeoMinWei"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"NeoMinWei"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":"public class AddCashflowCommand extends AbstractCommand {","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":" protected static Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":" private static Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":" protected double amount;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":" protected CashflowCategory category;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":" protected ExpenseType expenseType;","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"NeoMinWei"},"content":" protected IncomeType incomeType;","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":" protected int recur \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"NeoMinWei"},"content":" protected CashflowList cashflowList \u003d CashflowList.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":" public AddCashflowCommand(RawCommand rawCommand) throws IllegalArgumentException {","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":" String categoryString \u003d String.join(\" \", rawCommand.args);","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"YFshadaow"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing CashflowCategory\");","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":" category \u003d CashflowCategory.valueOf(categoryString.toUpperCase());","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"YFshadaow"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for CashflowCategory\");","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Entry must be either income or expense\");","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.containsKey(\"a\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Missing arguments for amount\");","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Entry must have an amount\");","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"YFshadaow"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing amount as double\");","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"YFshadaow"},"content":" amount \u003d Double.parseDouble(rawCommand.extraArgs.get(\"a\"));","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"YFshadaow"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for amount\");","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Amount must be a number\");","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"NeoMinWei"},"content":" if (amount \u003c 0) {","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid value for amount\");","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Amount cannot be negative\");","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"YFshadaow"},"content":" rawCommand.extraArgs.remove(\"a\");","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.containsKey(\"t\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Missing arguments for type\");","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Entry must have a type\");","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"NeoMinWei"},"content":" String stringType \u003d rawCommand.extraArgs.get(\"t\");","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"NeoMinWei"},"content":" if (category.equals(CashflowCategory.EXPENSE)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing ExpenseType\");","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"NeoMinWei"},"content":" expenseType \u003d ExpenseType.valueOf(stringType.toUpperCase());","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"NeoMinWei"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for ExpenseType\");","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Entry must be one of the following: \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"NeoMinWei"},"content":" \"dining, entertainment, shopping, travel, insurance, others\");","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"NeoMinWei"},"content":" } else if (category.equals(CashflowCategory.INCOME)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing IncomeType\");","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"NeoMinWei"},"content":" incomeType \u003d IncomeType.valueOf(stringType.toUpperCase());","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"NeoMinWei"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for IncomeType\");","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Entry must be one of the following: \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"NeoMinWei"},"content":" \"salary, investments, allowance, others\");","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"YFshadaow"},"content":" rawCommand.extraArgs.remove(\"t\");","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"YFshadaow"},"content":" if (rawCommand.extraArgs.containsKey(\"r\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"YFshadaow"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing recur as integer\");","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"YFshadaow"},"content":" recur \u003d Integer.parseInt(rawCommand.extraArgs.get(\"r\"));","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"YFshadaow"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for recur\");","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Recurrence must be an integer\");","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"YFshadaow"},"content":" rawCommand.extraArgs.remove(\"r\");","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"NeoMinWei"},"content":" if (recur \u003c 0) {","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid value for recur\");","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Recurring value cannot be negative\");","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"YFshadaow"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid extra arguments found\");","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":100,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":101,"author":{"gitId":"ryan1604"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":102,"author":{"gitId":"YFshadaow"},"content":" public void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"NeoMinWei"},"content":" assert category.equals(CashflowCategory.INCOME) || category.equals(CashflowCategory.EXPENSE);","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"NeoMinWei"},"content":" assert recur \u003e\u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"NeoMinWei"},"content":" assert amount \u003e\u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"NeoMinWei"},"content":" if (category.equals(CashflowCategory.EXPENSE)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":107,"author":{"gitId":"NeoMinWei"},"content":" assert expenseType.equals(ExpenseType.DINING) || expenseType.equals(ExpenseType.ENTERTAINMENT)","lastModifiedDate":"2023-10-22"},{"lineNumber":108,"author":{"gitId":"NeoMinWei"},"content":" || expenseType.equals(ExpenseType.SHOPPING) || expenseType.equals(ExpenseType.TRAVEL)","lastModifiedDate":"2023-10-22"},{"lineNumber":109,"author":{"gitId":"NeoMinWei"},"content":" || expenseType.equals(ExpenseType.INSURANCE) || expenseType.equals(ExpenseType.OTHERS)","lastModifiedDate":"2023-10-23"},{"lineNumber":110,"author":{"gitId":"NeoMinWei"},"content":" || expenseType.equals(ExpenseType.NECESSITIES);","lastModifiedDate":"2023-10-23"},{"lineNumber":111,"author":{"gitId":"NeoMinWei"},"content":" } else if (category.equals(CashflowCategory.INCOME)) {","lastModifiedDate":"2023-10-22"},{"lineNumber":112,"author":{"gitId":"NeoMinWei"},"content":" assert incomeType.equals(IncomeType.SALARY) || incomeType.equals(IncomeType.INVESTMENTS)","lastModifiedDate":"2023-10-22"},{"lineNumber":113,"author":{"gitId":"NeoMinWei"},"content":" || incomeType.equals(IncomeType.ALLOWANCE) || incomeType.equals(IncomeType.OTHERS);","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"YFshadaow"},"content":" switch (category) {","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"NeoMinWei"},"content":" case INCOME:","lastModifiedDate":"2023-10-08"},{"lineNumber":118,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.addIncome(amount, incomeType, recur);","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":120,"author":{"gitId":"NeoMinWei"},"content":" case EXPENSE:","lastModifiedDate":"2023-10-08"},{"lineNumber":121,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.addExpense(amount, expenseType, recur);","lastModifiedDate":"2023-10-22"},{"lineNumber":122,"author":{"gitId":"ryan1604"},"content":" if (Budget.hasBudget()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"NeoMinWei"},"content":" deductFromBudget(cashflowList.list.get(cashflowList.list.size() - 1));","lastModifiedDate":"2023-10-22"},{"lineNumber":124,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":125,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":126,"author":{"gitId":"NeoMinWei"},"content":" default:","lastModifiedDate":"2023-10-08"},{"lineNumber":127,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.SEVERE, \"Unreachable default case reached\");","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"NeoMinWei"},"content":" ui.showMessage(\"Unidentified entry.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":129,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":130,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":131,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":132,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":133,"author":{"gitId":"ryan1604"},"content":" private static void deductFromBudget(Cashflow entry) {","lastModifiedDate":"2023-10-16"},{"lineNumber":134,"author":{"gitId":"NeoMinWei"},"content":" double expenseAmount \u003d entry.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":135,"author":{"gitId":"ryan1604"},"content":" Budget.deduct(expenseAmount);","lastModifiedDate":"2023-10-16"},{"lineNumber":136,"author":{"gitId":"NeoMinWei"},"content":" ui.printBudgetAfterDeduction();","lastModifiedDate":"2023-10-22"},{"lineNumber":137,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":138,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"NeoMinWei":91,"ryan1604":10,"YFshadaow":37}},{"path":"src/main/java/seedu/financialplanner/commands/AddReminderCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"hshiah"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.reminder.ReminderList;","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.reminder.Reminder;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"hshiah"},"content":"public class AddReminderCommand extends AbstractCommand{","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"hshiah"},"content":" private final String type;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"hshiah"},"content":" private final String date;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"hshiah"},"content":" public AddReminderCommand(RawCommand rawCommand) throws IllegalArgumentException {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" String typeString \u003d String.join(\" \", rawCommand.args);","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" if(!rawCommand.extraArgs.containsKey(\"t\")){","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(\"Reminder must have a type\");","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"hshiah"},"content":" type \u003d rawCommand.extraArgs.get(\"t\");","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"hshiah"},"content":" rawCommand.extraArgs.remove(\"t\");","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"hshiah"},"content":" if(!rawCommand.extraArgs.containsKey(\"d\")){","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(\"Reminder must have a date\");","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"hshiah"},"content":" date \u003d rawCommand.extraArgs.get(\"d\");","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"hshiah"},"content":" rawCommand.extraArgs.remove(\"d\");","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"hshiah"},"content":" if(!rawCommand.extraArgs.isEmpty()){","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"hshiah"},"content":" String unknownExtraArgument \u003d new java.util.ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"hshiah"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"hshiah"},"content":" public void execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"hshiah"},"content":" ReminderList.INSTANCE.list.add(new Reminder(type, date));","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":" Ui.getInstance().showMessage(\"Reminder added!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NeoMinWei":1,"hshiah":31}},{"path":"src/main/java/seedu/financialplanner/commands/AddStockCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.investments.WatchList;","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"YFshadaow"},"content":"public class AddStockCommand extends AbstractCommand {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":" private final String stockCode;","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"YFshadaow"},"content":" public AddStockCommand(RawCommand rawCommand) throws IllegalArgumentException {","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.containsKey(\"s\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Stock code cannot be empty\");","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Parsing stockcode from input\");","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"YFshadaow"},"content":" stockCode \u003d rawCommand.extraArgs.get(\"s\");","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":" rawCommand.extraArgs.remove(\"s\");","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"YFshadaow"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.WARNING, \"Invalid extra arguments found\");","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":32,"author":{"gitId":"YFshadaow"},"content":" public void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":" Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"YFshadaow"},"content":" WatchList watchList \u003d WatchList.INSTANCE;","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"YFshadaow"},"content":" String stockName;","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"adding stock to watchlist\");","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-09"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" stockName \u003d watchList.addStock(stockCode);","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" assert stockName !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" ui.printAddStock(stockName);","lastModifiedDate":"2023-10-09"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-09"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.SEVERE, \"Error adding stock to watchlist\");","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"wwweert123":29,"NeoMinWei":2,"YFshadaow":16}},{"path":"src/main/java/seedu/financialplanner/commands/BudgetCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Cashflow;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"public class BudgetCommand extends AbstractCommand {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":" private static Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" private double budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" private String command;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" public BudgetCommand(RawCommand rawCommand) throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" command \u003d String.join(\" \", rawCommand.args);","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" if (!command.equals(\"set\") \u0026\u0026 !command.equals(\"update\")) {","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid arguments for budget command\");","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Please indicate whether budget is to be set or update.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" if (command.equals(\"set\") \u0026\u0026 Budget.hasBudget()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid command: Trying to set existing budget\");","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"There is an existing budget, did you mean update?\");","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" if (command.equals(\"update\") \u0026\u0026 !Budget.hasBudget()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid command: Trying to update non-existent budget\");","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"There is no budget set yet, did you mean set?\");","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" if (!rawCommand.extraArgs.containsKey(\"b\")) {","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Missing argument /b in command\");","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(\"Missing /b argument.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.INFO, \"Parsing budget as double\");","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" budget \u003d Double.parseDouble(rawCommand.extraArgs.get(\"b\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid value for budget\");","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(\"Budget must be a number.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" if (budget \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid value for budget.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Budget should be greater than 0.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" if (budget \u003e Cashflow.getBalance()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.WARNING, \"Invalid value for budget\");","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Budget should be lower than total balance.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":" assert budget \u003e 0 \u0026\u0026 budget \u003c\u003d Cashflow.getBalance() : \"Budget should be greater than 0 and less than \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" \"or equal to total balance\";","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" rawCommand.extraArgs.remove(\"b\");","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":" public void execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":" assert command.equals(\"set\") || command.equals(\"update\") : \"Command should be set or update only\";","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"NeoMinWei"},"content":" Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":" switch (command) {","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":" case \"set\":","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.INFO, \"Setting budget\");","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":" Budget.setBudget(budget);","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":" ui.showMessage(\"A monthly budget of \" + Budget.getInitialBudgetString()","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"ryan1604"},"content":" + \" has been set.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":" case \"update\":","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.INFO, \"Updating budget\");","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"NeoMinWei"},"content":" ui.printBudgetBeforeUpdate();","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" Budget.updateBudget(budget);","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"NeoMinWei"},"content":" ui.printBudgetAfterUpdate();","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"ryan1604"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"ryan1604"},"content":" logger.log(Level.SEVERE, \"Unreachable default case reached\");","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"NeoMinWei"},"content":" ui.showMessage(\"Unknown command.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NeoMinWei":5,"ryan1604":85}},{"path":"src/main/java/seedu/financialplanner/commands/DeleteCashflowCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.CashflowCategory;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"public class DeleteCashflowCommand extends AbstractCommand {","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"YFshadaow"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":" protected CashflowCategory category \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":" protected int index;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"NeoMinWei"},"content":" protected CashflowList cashflowList \u003d CashflowList.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":" public DeleteCashflowCommand(RawCommand rawCommand) throws IllegalArgumentException {","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":" String stringIndex;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"YFshadaow"},"content":" String stringCategory \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":" if (rawCommand.args.size() \u003d\u003d 1) {","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"NeoMinWei"},"content":" stringIndex \u003d rawCommand.args.get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":" } else if (rawCommand.args.size() \u003d\u003d 2) {","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"NeoMinWei"},"content":" stringCategory \u003d rawCommand.args.get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"NeoMinWei"},"content":" handleInvalidCategory(stringCategory);","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":" stringIndex \u003d rawCommand.args.get(1);","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"YFshadaow"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Incorrect arguments.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing index as integer\");","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":" index \u003d Integer.parseInt(stringIndex);","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"NeoMinWei"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid argument for index\");","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Index must be an integer\");","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"NeoMinWei"},"content":" if (index \u003d\u003d 0) {","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid value for index\");","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Index must be within the list\");","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"NeoMinWei"},"content":" private void handleInvalidCategory(String stringCategory) {","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Parsing CashflowCategory\");","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"NeoMinWei"},"content":" category \u003d CashflowCategory.valueOf(stringCategory.toUpperCase());","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"NeoMinWei"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Invalid arguments for CashflowCategory\");","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Entry must be either income or expense\");","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"NeoMinWei"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"NeoMinWei"},"content":" public void execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"NeoMinWei"},"content":" assert category.equals(CashflowCategory.INCOME) || category.equals(CashflowCategory.EXPENSE);","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"NeoMinWei"},"content":" assert index !\u003d 0;","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"YFshadaow"},"content":" if (category \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"YFshadaow"},"content":" handleDeleteCashflowWithoutCategory();","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"YFshadaow"},"content":" return;","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"NeoMinWei"},"content":" Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"NeoMinWei"},"content":" switch (category) {","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"NeoMinWei"},"content":" case INCOME:","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"NeoMinWei"},"content":" case EXPENSE:","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"NeoMinWei"},"content":" handleDeleteCashflowWithCategory();","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"NeoMinWei"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.SEVERE, \"Unreachable default case reached\");","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"NeoMinWei"},"content":" ui.showMessage(\"Unidentified entry.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"NeoMinWei"},"content":" private void handleDeleteCashflowWithoutCategory() {","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Deleting cashflow without category\");","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.delete(index);","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"NeoMinWei"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Index out of list\");","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Index must be within the list\");","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"NeoMinWei"},"content":" private void handleDeleteCashflowWithCategory() {","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Deleting cashflow with category\");","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.deleteCashflow(category, index);","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"NeoMinWei"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.WARNING, \"Index out of list\");","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException(\"Index must be within the list\");","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"NeoMinWei":84,"YFshadaow":12}},{"path":"src/main/java/seedu/financialplanner/commands/ExitCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"YFshadaow"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"YFshadaow"},"content":"public class ExitCommand extends AbstractCommand {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"YFshadaow"},"content":" public ExitCommand(RawCommand rawCommand) {","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"YFshadaow"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"YFshadaow"},"content":" public void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"YFshadaow":16}},{"path":"src/main/java/seedu/financialplanner/commands/FindCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"hshiah"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.investments.WatchList;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"hshiah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"YFshadaow"},"content":"public class FindCommand extends AbstractCommand {","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" private final String description;","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"YFshadaow"},"content":" public FindCommand(RawCommand rawCommand) {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":" this.description \u003d String.join(\" \", rawCommand.args);","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"YFshadaow"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"hshiah"},"content":" @Override","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"YFshadaow"},"content":" public void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"NeoMinWei"},"content":" CashflowList cashflowList \u003d CashflowList.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"NeoMinWei"},"content":" Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":" WatchList watchList \u003d WatchList.INSTANCE;","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"hshiah"},"content":" ArrayList\u003cString\u003e foundedFinancialList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"hshiah"},"content":" ArrayList\u003cString\u003e foundedWatchList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" for (int i \u003d 0; i \u003c cashflowList.list.size(); i++) {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"hshiah"},"content":" if (cashflowList.list.get(i).toString().contains(description)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"hshiah"},"content":" String output \u003d cashflowList.list.get(i).toString()+\" | Index: \"+(i+1);","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"hshiah"},"content":" foundedFinancialList.add(output);","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"hshiah"},"content":" if (!foundedFinancialList.isEmpty()) {","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"hshiah"},"content":" ui.showMessage(\"Here are the matching financial records in your financial list:\");","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"hshiah"},"content":" } else {","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"hshiah"},"content":" ui.showMessage(\"There is no matching financial record in your financial list.\");","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"hshiah"},"content":" for (String foundedFinancialRecord : foundedFinancialList) {","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"hshiah"},"content":" ui.showMessage(foundedFinancialRecord);","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"hshiah"},"content":" for (int i \u003d 0; i \u003c watchList.size(); i++) {","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"hshiah"},"content":" if (watchList.get(i).toString().contains(description)) {","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"hshiah"},"content":" foundedWatchList.add(watchList.get(i).toString()+\"| Index: \"+(i+1));","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":47,"author":{"gitId":"hshiah"},"content":" if (!foundedWatchList.isEmpty()) {","lastModifiedDate":"2023-10-12"},{"lineNumber":48,"author":{"gitId":"hshiah"},"content":" ui.showMessage(\"Here are the matching stock records in your stock list:\");","lastModifiedDate":"2023-10-12"},{"lineNumber":49,"author":{"gitId":"hshiah"},"content":" } else {","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"hshiah"},"content":" ui.showMessage(\"There is no matching stock record in your stock list.\");","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"hshiah"},"content":" for (String foundedStockRecord : foundedWatchList) {","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"hshiah"},"content":" ui.showMessage(foundedStockRecord);","lastModifiedDate":"2023-10-12"},{"lineNumber":54,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":56,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"NeoMinWei":2,"hshiah":43,"YFshadaow":10,"ryan1604":1}},{"path":"src/main/java/seedu/financialplanner/commands/InvalidCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"YFshadaow"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"YFshadaow"},"content":"public class InvalidCommand extends AbstractCommand {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"YFshadaow"},"content":" public InvalidCommand() {","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"YFshadaow"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"YFshadaow"},"content":" public void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":" Ui.getInstance().showMessage(\"Unknown command. Please try again.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"NeoMinWei":1,"YFshadaow":12}},{"path":"src/main/java/seedu/financialplanner/commands/ListCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"YFshadaow"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.enumerations.CashflowCategory;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.Cashflow;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.Expense;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.Income;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"YFshadaow"},"content":"import java.util.List;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":"public class ListCommand extends AbstractCommand{","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"YFshadaow"},"content":" protected CashflowCategory category \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"YFshadaow"},"content":" public ListCommand(RawCommand rawCommand) throws IllegalArgumentException{","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":" String stringCategory \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"YFshadaow"},"content":" if (rawCommand.args.size() \u003d\u003d 1) {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"YFshadaow"},"content":" stringCategory \u003d rawCommand.args.get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"YFshadaow"},"content":" } else if (rawCommand.args.size() \u003e 1) {","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Incorrect arguments.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":" if (stringCategory !\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"YFshadaow"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"YFshadaow"},"content":" category \u003d CashflowCategory.valueOf(stringCategory.toUpperCase());","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"YFshadaow"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Entry must be either income or expense\");","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"YFshadaow"},"content":" private boolean shouldPrintCashFlow(Cashflow cashflow) {","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"YFshadaow"},"content":" if (category \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"YFshadaow"},"content":" return true;","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"YFshadaow"},"content":" if (cashflow instanceof Income) {","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"YFshadaow"},"content":" return category.equals(CashflowCategory.INCOME);","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"YFshadaow"},"content":" if (cashflow instanceof Expense) {","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"YFshadaow"},"content":" return category.equals(CashflowCategory.EXPENSE);","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"YFshadaow"},"content":" return false;","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"YFshadaow"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"YFshadaow"},"content":" public void execute() throws Exception {","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"NeoMinWei"},"content":" Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"NeoMinWei"},"content":" List\u003cCashflow\u003e cashflowList \u003d CashflowList.getInstance().list;","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"YFshadaow"},"content":" List\u003cCashflow\u003e cashflowToBePrinted \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"YFshadaow"},"content":" for (Cashflow flow : cashflowList) {","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"YFshadaow"},"content":" if (!shouldPrintCashFlow(flow)) {","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"YFshadaow"},"content":" continue;","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"YFshadaow"},"content":" cashflowToBePrinted.add(flow);","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"YFshadaow"},"content":" if (cashflowToBePrinted.isEmpty()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"NeoMinWei"},"content":" ui.showMessage(\"No matching cash flow\");","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"YFshadaow"},"content":" return;","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"NeoMinWei"},"content":" ui.showMessage(String.format(\"You have %d matching cash flow:\", cashflowToBePrinted.size()));","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"YFshadaow"},"content":" for (int i \u003d 0; i \u003c cashflowToBePrinted.size(); i +\u003d 1) {","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"NeoMinWei"},"content":" ui.showMessage((i+ 1) + \": \" + cashflowToBePrinted.get(i).toString());","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"YFshadaow"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NeoMinWei":5,"YFshadaow":64}},{"path":"src/main/java/seedu/financialplanner/commands/OverviewCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Cashflow;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Income;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Expense;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"import java.text.DecimalFormat;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"public class OverviewCommand extends AbstractCommand {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" public OverviewCommand(RawCommand rawCommand) {","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" public void execute() throws Exception {","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"NeoMinWei"},"content":" CashflowList list \u003d CashflowList.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"NeoMinWei"},"content":" Ui.getInstance().showMessage(\"Here is an overview of your financials:\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" \"Total balance: \" + formatDoubleToString(Cashflow.getBalance()) + \"\\n\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" \"Highest income: \" + getHighestIncome(list) + \"\\n\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" \"Highest expense: \" + getHighestExpense(list) + \"\\n\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" \"Remaining budget for the month: \" + getBudgetDesc());","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" //todo: indicate description of income/expense","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" //todo: goal disparity","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" //todo: add educational tip","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" private static String getBudgetDesc() {","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" return Budget.getCurrentBudgetString();","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" private static String getHighestIncome(CashflowList list) {","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" double maxIncome \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" for (Cashflow entry : list.list) {","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" if (entry instanceof Income \u0026\u0026 entry.getAmount() \u003e maxIncome) {","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" maxIncome \u003d entry.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" return formatDoubleToString(maxIncome);","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" private static String getHighestExpense(CashflowList list) {","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" double maxExpense \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" for (Cashflow entry : list.list) {","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" if (entry instanceof Expense \u0026\u0026 entry.getAmount() \u003e maxExpense) {","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" maxExpense \u003d entry.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":" return formatDoubleToString(maxExpense);","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" private static String formatDoubleToString(double amount) {","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":" return decimalFormat.format(Cashflow.round(amount, 2));","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"NeoMinWei":2,"ryan1604":61}},{"path":"src/main/java/seedu/financialplanner/commands/RawCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"YFshadaow"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"YFshadaow"},"content":"import java.util.List;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"YFshadaow"},"content":"import java.util.Map;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"YFshadaow"},"content":"public class RawCommand {","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"YFshadaow"},"content":" public final List\u003cString\u003e args \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"YFshadaow"},"content":" public final Map\u003cString, String\u003e extraArgs \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"YFshadaow"},"content":" protected String commandName;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":" public RawCommand(String name, List\u003cString\u003e args, Map\u003cString, String\u003e extraArgs) {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"YFshadaow"},"content":" this.commandName \u003d name;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"YFshadaow"},"content":" this.args.addAll(args);","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":" this.extraArgs.putAll(extraArgs);","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"YFshadaow"},"content":" @SuppressWarnings(\"unused\")","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"YFshadaow"},"content":" public String getCommandName() {","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"YFshadaow"},"content":" return commandName;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":" @SuppressWarnings(\"unused\")","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"YFshadaow"},"content":" public void setCommandName(String commandName) {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"YFshadaow"},"content":" this.commandName \u003d commandName;","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"YFshadaow"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"YFshadaow":28}},{"path":"src/main/java/seedu/financialplanner/commands/SetGoalCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"hshiah"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.goal.Goal;","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.goal.GoalList;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"hshiah"},"content":"public class SetGoalCommand extends AbstractCommand{","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"hshiah"},"content":" private final String goal;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":" private int amount;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"hshiah"},"content":" public SetGoalCommand(RawCommand rawCommand) throws IllegalArgumentException {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" String labelString \u003d String.join(\" \", rawCommand.args);","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" if(!rawCommand.extraArgs.containsKey(\"g\")){","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(\"Goal must have an amount\");","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"hshiah"},"content":" try{","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"hshiah"},"content":" amount \u003d Integer.parseInt(rawCommand.extraArgs.get(\"g\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"hshiah"},"content":" } catch (IllegalArgumentException e){","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(\"Amount must be a number\");","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"hshiah"},"content":" rawCommand.extraArgs.remove(\"g\");","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"hshiah"},"content":" if(!rawCommand.extraArgs.containsKey(\"l\")){","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(\"Please specify the content of the goal\");","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"hshiah"},"content":" goal \u003d rawCommand.extraArgs.get(\"l\");","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"hshiah"},"content":" rawCommand.extraArgs.remove(\"l\");","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"hshiah"},"content":" if(!rawCommand.extraArgs.isEmpty()){","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"hshiah"},"content":" String unknownExtraArgument \u003d new java.util.ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"hshiah"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"hshiah"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"hshiah"},"content":" public void execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"hshiah"},"content":" GoalList.INSTANCE.list.add(new Goal(goal, amount));","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"NeoMinWei"},"content":" Ui.getInstance().showMessage(\"Set Goal Successfully!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NeoMinWei":1,"hshiah":35}},{"path":"src/main/java/seedu/financialplanner/commands/VisCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.visualisations.Categorizer;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.visualisations.Visualizer;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"public class VisCommand extends AbstractCommand {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":" private String type;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":" private String chart;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":" public VisCommand(RawCommand rawCommand) throws IllegalArgumentException {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":" if (!rawCommand.extraArgs.containsKey(\"t\")) {","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":" throw new IllegalArgumentException(\"Entry type must be defined\");","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":" if (!rawCommand.extraArgs.containsKey(\"c\")) {","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" throw new IllegalArgumentException(\"Chart type must be defined\");","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Parsing entry type and chart type\");","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" this.type \u003d rawCommand.extraArgs.get(\"t\");","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" rawCommand.extraArgs.remove(\"t\");","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" this.chart \u003d rawCommand.extraArgs.get(\"c\");","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" rawCommand.extraArgs.remove(\"c\");","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.WARNING, \"Invalid extra arguments found\");","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" public void execute() throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" assert !chart.isEmpty();","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" assert !type.isEmpty();","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"NeoMinWei"},"content":" Visualizer.displayChart(chart, Categorizer.sortType(CashflowList.getInstance(), type));","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"wwweert123":41,"NeoMinWei":1}},{"path":"src/main/java/seedu/financialplanner/commands/WatchListCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.JSONArray;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.JSONObject;","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.investments.WatchList;","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"YFshadaow"},"content":"public class WatchListCommand extends AbstractCommand {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":" public WatchListCommand(RawCommand rawCommand) throws IllegalArgumentException{","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"YFshadaow"},"content":" if (!rawCommand.extraArgs.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.WARNING, \"Invalid extra arguments found\");","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":" String unknownExtraArgument \u003d new ArrayList\u003c\u003e(rawCommand.extraArgs.keySet()).get(0);","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":" assert unknownExtraArgument !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(String.format(\"Unknown extra argument: %s\", unknownExtraArgument));","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":" public void execute() {","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"NeoMinWei"},"content":" Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":" JSONArray stocks \u003d WatchList.INSTANCE.fetchFMPStockPrices();","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" assert !(stocks \u003d\u003d null);","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":" ui.printWatchListHeader();","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Printing watchlist\");","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" for (Object o : stocks) {","lastModifiedDate":"2023-10-09"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":" JSONObject stock \u003d (JSONObject) o;","lastModifiedDate":"2023-10-09"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":" ui.printStockInfo(stock);","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"wwweert123":20,"NeoMinWei":4,"YFshadaow":10}},{"path":"src/main/java/seedu/financialplanner/enumerations/CashflowCategory.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.enumerations;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"public enum CashflowCategory {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":" INCOME, EXPENSE","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NeoMinWei":4,"YFshadaow":1}},{"path":"src/main/java/seedu/financialplanner/enumerations/ExpenseType.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.enumerations;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"public enum ExpenseType {","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":" DINING, ENTERTAINMENT, SHOPPING, TRAVEL, INSURANCE, NECESSITIES, OTHERS","lastModifiedDate":"2023-10-23"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"NeoMinWei":5}},{"path":"src/main/java/seedu/financialplanner/enumerations/IncomeType.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.enumerations;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"public enum IncomeType {","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":" SALARY, INVESTMENTS, ALLOWANCE, OTHERS","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"NeoMinWei":5}},{"path":"src/main/java/seedu/financialplanner/exceptions/FinancialPlannerException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.exceptions;","lastModifiedDate":"2023-10-07"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"public class FinancialPlannerException extends Exception {","lastModifiedDate":"2023-10-07"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":" public FinancialPlannerException(String message) {","lastModifiedDate":"2023-10-07"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":" super(message);","lastModifiedDate":"2023-10-07"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-07"}],"authorContributionMap":{"ryan1604":7}},{"path":"src/main/java/seedu/financialplanner/goal/Goal.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"hshiah"},"content":"package seedu.financialplanner.goal;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"hshiah"},"content":"public class Goal {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"hshiah"},"content":" private String label;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"hshiah"},"content":" private int amount;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"hshiah"},"content":" private boolean isDone \u003d false;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"hshiah"},"content":" public Goal(String label, int amount) {","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":" this.label \u003d label;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"hshiah"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":" String status \u003d isDone ? \"Done\" : \"Not Done\";","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":" return \"Goal: \"+this.label + \" | \" + this.amount + \" | \" + status;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"hshiah"},"content":" public void markAsDone() {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"hshiah"},"content":" //TODO edit the expense to mark the goal as done","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"hshiah"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"hshiah"},"content":" //TODO delete the Reminder","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"hshiah"},"content":" public String formatString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"hshiah"},"content":" String status \u003d isDone ? \"Done\" : \"Not Done\";","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"hshiah"},"content":" return this.label + \" | \" + this.amount + \" | \" + this.isDone;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"hshiah":24}},{"path":"src/main/java/seedu/financialplanner/goal/GoalList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"hshiah"},"content":"package seedu.financialplanner.goal;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"hshiah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"hshiah"},"content":"public class GoalList {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"hshiah"},"content":" public static final GoalList INSTANCE \u003d new GoalList();","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"hshiah"},"content":" public ArrayList\u003cGoal\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"hshiah"},"content":" private GoalList() {","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"hshiah"},"content":" public void load(Goal goal) {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" list.add(goal);","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":" //TODO deleteGoal","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"hshiah":13}},{"path":"src/main/java/seedu/financialplanner/investments/Stock.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"package seedu.financialplanner.investments;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.JSONArray;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.JSONObject;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.parser.JSONParser;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.parser.ParseException;","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"import java.net.URI;","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpClient;","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpRequest;","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpResponse;","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"import java.time.Duration;","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"public class Stock {","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":" private String symbol;","lastModifiedDate":"2023-10-08"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" private String market;","lastModifiedDate":"2023-10-08"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":" private String stockName;","lastModifiedDate":"2023-10-08"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" public Stock(String symbol) throws FinancialPlannerException {","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" this.symbol \u003d symbol;","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" this.stockName \u003d getStockNameFromAPI(symbol);","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" public String getStockName() {","lastModifiedDate":"2023-10-09"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":" return stockName;","lastModifiedDate":"2023-10-09"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" public String getStockNameFromAPI(String symbol) throws FinancialPlannerException {","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" final String API_ENDPOINT \u003d \"https://www.alphavantage.co/query?function\u003dSYMBOL_SEARCH\u0026keywords\u003d\";","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" final String API_KEY \u003d \"LNKL0548PHY2F0QU\";","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" String requestURI \u003d String.format(\"%s%s\u0026apikey\u003d%s\", API_ENDPOINT,symbol,API_KEY);","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":" HttpClient client \u003d HttpClient.newHttpClient();","lastModifiedDate":"2023-10-08"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" HttpRequest request \u003d HttpRequest.newBuilder(URI.create(requestURI))","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" .header(\"accept\", \"application/json\")","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" .GET()","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" .timeout(Duration.ofSeconds(10))","lastModifiedDate":"2023-10-08"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" .build();","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Requesting API for stock info\");","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" HttpResponse\u003cString\u003e response \u003d client.send(request, HttpResponse.BodyHandlers.ofString());","lastModifiedDate":"2023-10-08"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" Object obj \u003d new JSONParser().parse(response.body());","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":48,"author":{"gitId":"wwweert123"},"content":" JSONObject jsonObject \u003d (JSONObject) obj;","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"wwweert123"},"content":" JSONArray ja \u003d (JSONArray) jsonObject.get(\"bestMatches\");","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"wwweert123"},"content":" if (ja \u003d\u003d null) {","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"API limit Reached\");","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"wwweert123"},"content":" if (ja.isEmpty()) {","lastModifiedDate":"2023-10-09"},{"lineNumber":54,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Stock not found\");","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":56,"author":{"gitId":"wwweert123"},"content":" JSONObject stock \u003d (JSONObject) ja.get(0);","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"wwweert123"},"content":" String symbolFound \u003d (String) stock.get(\"1. symbol\");","lastModifiedDate":"2023-10-13"},{"lineNumber":58,"author":{"gitId":"wwweert123"},"content":" // TODO: Might need to use AMEX when NYSE is used","lastModifiedDate":"2023-10-09"},{"lineNumber":59,"author":{"gitId":"wwweert123"},"content":" // TODO: Need to check if it is added already","lastModifiedDate":"2023-10-09"},{"lineNumber":60,"author":{"gitId":"wwweert123"},"content":" // TODO: add a cap to adding","lastModifiedDate":"2023-10-09"},{"lineNumber":61,"author":{"gitId":"wwweert123"},"content":" // TODO: Separate based on market","lastModifiedDate":"2023-10-09"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":" // TODO: add other info","lastModifiedDate":"2023-10-09"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" // TODO: testing","lastModifiedDate":"2023-10-09"},{"lineNumber":64,"author":{"gitId":"wwweert123"},"content":" if (!symbolFound.equals(symbol)) {","lastModifiedDate":"2023-10-09"},{"lineNumber":65,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Stock not found\");","lastModifiedDate":"2023-10-09"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":67,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":" assert stock.get(\"2. name\") !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"wwweert123"},"content":" market \u003d (String) stock.get(\"4. region\");","lastModifiedDate":"2023-10-13"},{"lineNumber":70,"author":{"gitId":"wwweert123"},"content":" return (String) stock.get(\"2. name\");","lastModifiedDate":"2023-10-13"},{"lineNumber":71,"author":{"gitId":"wwweert123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":73,"author":{"gitId":"wwweert123"},"content":" } catch (InterruptedException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"wwweert123"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":78,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":79,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":80,"author":{"gitId":"wwweert123"},"content":" public String getSymbol() {","lastModifiedDate":"2023-10-08"},{"lineNumber":81,"author":{"gitId":"wwweert123"},"content":" return symbol;","lastModifiedDate":"2023-10-08"},{"lineNumber":82,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":83,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":84,"author":{"gitId":"wwweert123"},"content":" public void setSymbol(String symbol) {","lastModifiedDate":"2023-10-08"},{"lineNumber":85,"author":{"gitId":"wwweert123"},"content":" this.symbol \u003d symbol;","lastModifiedDate":"2023-10-08"},{"lineNumber":86,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":87,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":88,"author":{"gitId":"wwweert123"},"content":" @Override","lastModifiedDate":"2023-10-08"},{"lineNumber":89,"author":{"gitId":"wwweert123"},"content":" public String toString() {","lastModifiedDate":"2023-10-08"},{"lineNumber":90,"author":{"gitId":"wwweert123"},"content":" return symbol + \",\";","lastModifiedDate":"2023-10-08"},{"lineNumber":91,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":92,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"wwweert123":92}},{"path":"src/main/java/seedu/financialplanner/investments/WatchList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"package seedu.financialplanner.investments;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.JSONArray;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.parser.JSONParser;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.parser.ParseException;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import java.net.URI;","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpClient;","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpRequest;","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"import java.net.http.HttpResponse;","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"import java.time.Duration;","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"public class WatchList {","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"YFshadaow"},"content":" public static final WatchList INSTANCE \u003d new WatchList();","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" private static Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":" private final ArrayList\u003cStock\u003e stocks;","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" private final String API_ENDPOINT \u003d \"https://financialmodelingprep.com/api/v3/quote/\";","lastModifiedDate":"2023-10-08"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" private final String API_KEY \u003d \"iFumtYryBCbHpS3sDqLdVKi2SdP63vSV\";","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"YFshadaow"},"content":" private WatchList() {","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" stocks \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-09"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-09"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" Stock apple \u003d new Stock(\"AAPL\");","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" assert apple.getSymbol() !\u003d null \u0026\u0026 apple.getStockName() !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":" stocks.add(apple);","lastModifiedDate":"2023-10-09"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" Stock meta \u003d new Stock(\"META\");","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" assert meta.getSymbol() !\u003d null \u0026\u0026 meta.getStockName() !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" stocks.add(meta);","lastModifiedDate":"2023-10-09"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":" Stock google \u003d new Stock(\"GOOGL\");","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" assert google.getSymbol() !\u003d null \u0026\u0026 google.getStockName() !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" stocks.add(google);","lastModifiedDate":"2023-10-09"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" } catch (FinancialPlannerException e) {","lastModifiedDate":"2023-10-09"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-09"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" public JSONArray fetchFMPStockPrices() {","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" HttpClient client \u003d HttpClient.newHttpClient();","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" StringBuilder queryStocks \u003d new StringBuilder();","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"wwweert123"},"content":" assert !stocks.isEmpty();","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"wwweert123"},"content":" for (Stock stock : stocks) {","lastModifiedDate":"2023-10-08"},{"lineNumber":50,"author":{"gitId":"wwweert123"},"content":" queryStocks.append(stock.toString());","lastModifiedDate":"2023-10-08"},{"lineNumber":51,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":52,"author":{"gitId":"wwweert123"},"content":" String requestURI \u003d String.format(\"%s%s?apikey\u003d%s\", API_ENDPOINT, queryStocks, API_KEY);","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"wwweert123"},"content":" HttpRequest request \u003d HttpRequest.newBuilder(URI.create(requestURI))","lastModifiedDate":"2023-10-08"},{"lineNumber":54,"author":{"gitId":"wwweert123"},"content":" .header(\"accept\", \"application/json\")","lastModifiedDate":"2023-10-08"},{"lineNumber":55,"author":{"gitId":"wwweert123"},"content":" .GET()","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"wwweert123"},"content":" .timeout(Duration.ofSeconds(10))","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"wwweert123"},"content":" .build();","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"wwweert123"},"content":" Object obj;","lastModifiedDate":"2023-10-09"},{"lineNumber":59,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Requesting API endpoint FMP\");","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"wwweert123"},"content":" try {","lastModifiedDate":"2023-10-08"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":" HttpResponse\u003cString\u003e response \u003d client.send(request, HttpResponse.BodyHandlers.ofString());","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" // System.out.println(response.body());","lastModifiedDate":"2023-10-08"},{"lineNumber":64,"author":{"gitId":"wwweert123"},"content":" obj \u003d new JSONParser().parse(response.body());","lastModifiedDate":"2023-10-09"},{"lineNumber":65,"author":{"gitId":"wwweert123"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.SEVERE, \"Cant request API endpoint\");","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":" } catch (InterruptedException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":69,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.SEVERE, \"Interrupted\");","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":71,"author":{"gitId":"wwweert123"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.SEVERE, \"Could not parse to JSON\");","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"wwweert123"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"wwweert123"},"content":" return (JSONArray) obj;","lastModifiedDate":"2023-10-09"},{"lineNumber":76,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":78,"author":{"gitId":"wwweert123"},"content":" public String addStock(String stockCode) throws FinancialPlannerException {","lastModifiedDate":"2023-10-13"},{"lineNumber":79,"author":{"gitId":"wwweert123"},"content":" Stock newStock \u003d null;","lastModifiedDate":"2023-10-09"},{"lineNumber":80,"author":{"gitId":"wwweert123"},"content":" newStock \u003d new Stock(stockCode);","lastModifiedDate":"2023-10-13"},{"lineNumber":81,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"wwweert123"},"content":" assert newStock.getSymbol() !\u003d null \u0026\u0026 newStock.getStockName() !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"wwweert123"},"content":" stocks.add(newStock);","lastModifiedDate":"2023-10-09"},{"lineNumber":84,"author":{"gitId":"wwweert123"},"content":" return newStock.getStockName();","lastModifiedDate":"2023-10-09"},{"lineNumber":85,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":86,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":87,"author":{"gitId":"hshiah"},"content":" public int size() {","lastModifiedDate":"2023-10-12"},{"lineNumber":88,"author":{"gitId":"hshiah"},"content":" return stocks.size();","lastModifiedDate":"2023-10-12"},{"lineNumber":89,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":90,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":91,"author":{"gitId":"hshiah"},"content":" public Stock get(int index) {","lastModifiedDate":"2023-10-12"},{"lineNumber":92,"author":{"gitId":"hshiah"},"content":" return stocks.get(index);","lastModifiedDate":"2023-10-12"},{"lineNumber":93,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":94,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"wwweert123":83,"YFshadaow":3,"hshiah":8}},{"path":"src/main/java/seedu/financialplanner/list/Budget.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.list;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"import java.text.DecimalFormat;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"public abstract class Budget {","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":" private static final int MONTH \u003d 30;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":" private static double initialBudget \u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":" private static double currentBudget \u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":" public static void setBudget(double amount) {","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":" initialBudget \u003d amount;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":" currentBudget \u003d amount;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":" assert initialBudget \u003d\u003d currentBudget : \"Initial and current budget should be the same\";","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" assert initialBudget !\u003d 0 \u0026\u0026 currentBudget !\u003d 0 : \"Initial and current budget should not be 0\";","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" public static double getInitialBudget() {","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" return initialBudget;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" public static void updateBudget(double budget) {","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" double diff;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" if (budget \u003e initialBudget) {","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" diff \u003d budget - initialBudget;","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" initialBudget \u003d budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" currentBudget +\u003d diff;","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" } else if (budget \u003c initialBudget) {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" diff \u003d initialBudget - budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" initialBudget \u003d budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" currentBudget -\u003d diff;","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" assert initialBudget \u003d\u003d budget : \"Initial budget should be equal to updated budget\";","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" public static double getCurrentBudget() {","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" return currentBudget;","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" public static String getCurrentBudgetString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" return decimalFormat.format(Cashflow.round(currentBudget, 2));","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" public static String getInitialBudgetString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" return decimalFormat.format(Cashflow.round(initialBudget, 2));","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" public static void deduct(double amount) {","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" Budget.currentBudget -\u003d amount;","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"ryan1604"},"content":" public static void load(double initial, double current) {","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" initialBudget \u003d initial;","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":" currentBudget \u003d current;","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" public static boolean hasBudget() {","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" return initialBudget !\u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" public static String formatString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":" return \"B | \" + initialBudget + \" | \" + currentBudget;","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"ryan1604":65}},{"path":"src/main/java/seedu/financialplanner/list/Cashflow.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.list;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.ExpenseType;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.IncomeType;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import java.math.BigDecimal;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import java.math.RoundingMode;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"import java.text.DecimalFormat;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"public abstract class Cashflow {","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"NeoMinWei"},"content":" protected static double balance \u003d 0;","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"NeoMinWei"},"content":" protected double amount;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":" protected int recur;","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":" public Cashflow(double amount, int recur) {","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":" this.recur \u003d recur;","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":" public void deleteCashflowvalue() {","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"NeoMinWei"},"content":" //@author mhadidg-reused","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"NeoMinWei"},"content":" //Reused from https://stackoverflow.com/questions/2808535/round-a-double-to-2-decimal-places","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"NeoMinWei"},"content":" public static double round(double value, int places) {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":" if (places \u003c 0) {","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException();","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":" BigDecimal bd \u003d BigDecimal.valueOf(value);","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":" bd \u003d bd.setScale(places, RoundingMode.HALF_UP);","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"NeoMinWei"},"content":" return bd.doubleValue();","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"NeoMinWei"},"content":" //@author mhadidg","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"NeoMinWei"},"content":" //@author Nick Bolton-reused","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"NeoMinWei"},"content":" //Reused from","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"NeoMinWei"},"content":" //https://stackoverflow.com/questions/1892765/how-to-capitalize-the-first-character-of-each-word-in-a-string","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"NeoMinWei"},"content":" public String capitalize(String line) {","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"NeoMinWei"},"content":" return Character.toUpperCase(line.charAt(0)) + line.substring(1);","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"NeoMinWei"},"content":" //@author Nick Bolton","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"NeoMinWei"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"NeoMinWei"},"content":" DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"NeoMinWei"},"content":" String string \u003d \" Amount: \" + decimalFormat.format(round(amount, 2));","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"NeoMinWei"},"content":" if (recur !\u003d 0) {","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"NeoMinWei"},"content":" string +\u003d System.lineSeparator() + \" Recurring every: \" + recur + \" days\";","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"NeoMinWei"},"content":" return string;","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"NeoMinWei"},"content":" public String formatBalance() {","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"NeoMinWei"},"content":" DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"NeoMinWei"},"content":" return decimalFormat.format(round(Cashflow.balance, 2));","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":62,"author":{"gitId":"NeoMinWei"},"content":" public double getAmount() {","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"NeoMinWei"},"content":" return this.amount;","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":" public static double getBalance() {","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" return balance;","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":" public String formatString() {","lastModifiedDate":"2023-10-10"},{"lineNumber":71,"author":{"gitId":"NeoMinWei"},"content":" return \" | \" + this.recur;","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":73,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"NeoMinWei"},"content":" public abstract ExpenseType getExpenseType();","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":" public abstract IncomeType getIncomeType();","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"wwweert123":2,"NeoMinWei":68,"ryan1604":7}},{"path":"src/main/java/seedu/financialplanner/list/CashflowList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.list;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.CashflowCategory;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.ExpenseType;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.IncomeType;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":"public class CashflowList {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"NeoMinWei"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":" private static CashflowList cashflowList \u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"YFshadaow"},"content":" public final ArrayList\u003cCashflow\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":" protected Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":" private CashflowList() {","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":" public static CashflowList getInstance() {","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":" if (cashflowList \u003d\u003d null) {","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"NeoMinWei"},"content":" cashflowList \u003d new CashflowList();","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"NeoMinWei"},"content":" return cashflowList;","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":" public void addIncome(double value, IncomeType type, int recur) {","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Adding income\");","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"NeoMinWei"},"content":" int existingListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":" Income toAdd \u003d new Income(value, type, recur);","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"NeoMinWei"},"content":" list.add(toAdd);","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":" ui.printAddedCashflow(toAdd);","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"NeoMinWei"},"content":" int newListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"NeoMinWei"},"content":" assert newListSize \u003d\u003d existingListSize + 1;","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"NeoMinWei"},"content":" public void addExpense(double value, ExpenseType type, int recur) {","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"NeoMinWei"},"content":" logger.log(Level.INFO, \"Adding expense\");","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"NeoMinWei"},"content":" int existingListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"NeoMinWei"},"content":" Expense toAdd \u003d new Expense(value, type, recur);","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"NeoMinWei"},"content":" list.add(toAdd);","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"NeoMinWei"},"content":" ui.printAddedCashflow(toAdd);","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"NeoMinWei"},"content":" int newListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"NeoMinWei"},"content":" assert newListSize \u003d\u003d existingListSize + 1;","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":51,"author":{"gitId":"NeoMinWei"},"content":" public void delete(int index) {","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"NeoMinWei"},"content":" int existingListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"NeoMinWei"},"content":" int listIndex \u003d index - 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"NeoMinWei"},"content":" Cashflow toRemove \u003d list.get(listIndex);","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"NeoMinWei"},"content":" list.remove(listIndex);","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"NeoMinWei"},"content":" toRemove.deleteCashflowvalue();","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"NeoMinWei"},"content":" ui.printDeletedCashflow(toRemove);","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"NeoMinWei"},"content":" int newListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"NeoMinWei"},"content":" assert newListSize \u003d\u003d existingListSize - 1;","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"NeoMinWei"},"content":" //helper method to find the index of a given cashflow in the overall list","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"NeoMinWei"},"content":" //given its index in its respective list. e.g. \"income 3\" is the third income","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"NeoMinWei"},"content":" //in the overall list","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"NeoMinWei"},"content":" private int cashflowIndexFinder(CashflowCategory category, int cashflowIndex) {","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"NeoMinWei"},"content":" assert category.equals(CashflowCategory.INCOME) || category.equals(CashflowCategory.EXPENSE);","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"NeoMinWei"},"content":" switch (category) {","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"NeoMinWei"},"content":" case INCOME:","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"NeoMinWei"},"content":" return findCashflowIndexFromIncomeIndex(cashflowIndex);","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"NeoMinWei"},"content":" case EXPENSE:","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"NeoMinWei"},"content":" return findCashflowIndexFromExpenseIndex(cashflowIndex);","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"NeoMinWei"},"content":" default:","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"NeoMinWei"},"content":" return -1;","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"NeoMinWei"},"content":" private int findCashflowIndexFromIncomeIndex(int cashflowIndex) {","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"NeoMinWei"},"content":" int cashflowCounter \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"NeoMinWei"},"content":" int overallCashflowIndex \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"NeoMinWei"},"content":" for (Cashflow entry : list) {","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"NeoMinWei"},"content":" if (entry instanceof Income) {","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"NeoMinWei"},"content":" cashflowCounter +\u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"NeoMinWei"},"content":" if (cashflowCounter \u003d\u003d cashflowIndex) {","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"NeoMinWei"},"content":" overallCashflowIndex +\u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"NeoMinWei"},"content":" return overallCashflowIndex;","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"NeoMinWei"},"content":" private int findCashflowIndexFromExpenseIndex(int cashflowIndex) {","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"NeoMinWei"},"content":" int cashflowCounter \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"NeoMinWei"},"content":" int overallCashflowIndex \u003d 0;","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"NeoMinWei"},"content":" for (Cashflow entry : list) {","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"NeoMinWei"},"content":" if (entry instanceof Expense) {","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"NeoMinWei"},"content":" cashflowCounter +\u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"NeoMinWei"},"content":" if (cashflowCounter \u003d\u003d cashflowIndex) {","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"NeoMinWei"},"content":" break;","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"NeoMinWei"},"content":" overallCashflowIndex +\u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"NeoMinWei"},"content":" return overallCashflowIndex;","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"NeoMinWei"},"content":" public void deleteCashflow(CashflowCategory category, int index) {","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"NeoMinWei"},"content":" int existingListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"NeoMinWei"},"content":" int listIndex \u003d cashflowIndexFinder(category, index);","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"NeoMinWei"},"content":" Cashflow toRemove \u003d list.get(listIndex);","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"NeoMinWei"},"content":" list.remove(listIndex);","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"NeoMinWei"},"content":" toRemove.deleteCashflowvalue();","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"NeoMinWei"},"content":" ui.printDeletedCashflow(toRemove);","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":120,"author":{"gitId":"NeoMinWei"},"content":" int newListSize \u003d list.size();","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"NeoMinWei"},"content":" assert newListSize \u003d\u003d existingListSize - 1;","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"ryan1604"},"content":" public void load(Cashflow entry) {","lastModifiedDate":"2023-10-10"},{"lineNumber":126,"author":{"gitId":"ryan1604"},"content":" list.add(entry);","lastModifiedDate":"2023-10-10"},{"lineNumber":127,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":128,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":129,"author":{"gitId":"ryan1604"},"content":" //temp method","lastModifiedDate":"2023-10-12"},{"lineNumber":130,"author":{"gitId":"ryan1604"},"content":" public String getList() {","lastModifiedDate":"2023-10-12"},{"lineNumber":131,"author":{"gitId":"ryan1604"},"content":" String output \u003d \"\";","lastModifiedDate":"2023-10-12"},{"lineNumber":132,"author":{"gitId":"ryan1604"},"content":" for (Cashflow entry : list) {","lastModifiedDate":"2023-10-12"},{"lineNumber":133,"author":{"gitId":"ryan1604"},"content":" output +\u003d entry.formatString() + \"\\n\";","lastModifiedDate":"2023-10-13"},{"lineNumber":134,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":135,"author":{"gitId":"ryan1604"},"content":" return output;","lastModifiedDate":"2023-10-12"},{"lineNumber":136,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":137,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"NeoMinWei":119,"YFshadaow":3,"ryan1604":15}},{"path":"src/main/java/seedu/financialplanner/list/Expense.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.list;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.ExpenseType;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.IncomeType;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"public class Expense extends Cashflow {","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":" protected ExpenseType type;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":" public Expense(double amount, ExpenseType type, int recur) {","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":" super(amount, recur);","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":" this.type \u003d type;","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"NeoMinWei"},"content":" addExpenseValue();","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"NeoMinWei"},"content":" @Override","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":" public ExpenseType getExpenseType() {","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":" return type;","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":" @Override","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":" public IncomeType getIncomeType() {","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"NeoMinWei"},"content":" return null;","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"NeoMinWei"},"content":" private void addExpenseValue() {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":" balance -\u003d this.amount;","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"NeoMinWei"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":" public void deleteCashflowvalue() {","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":" balance +\u003d this.amount;","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"NeoMinWei"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"NeoMinWei"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"NeoMinWei"},"content":" return \"Expense\" + System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"NeoMinWei"},"content":" \" Type: \" + capitalize(type.toString().toLowerCase()) + System.lineSeparator() + super.toString();","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" public String formatString() {","lastModifiedDate":"2023-10-10"},{"lineNumber":42,"author":{"gitId":"NeoMinWei"},"content":" return \"E | \" + this.amount + \" | \" + this.type + super.formatString();","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":44,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"NeoMinWei":39,"ryan1604":5,"hshiah":1}},{"path":"src/main/java/seedu/financialplanner/list/Income.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.list;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.ExpenseType;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.IncomeType;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"public class Income extends Cashflow{","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":" protected IncomeType type;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":" public Income(double amount, IncomeType type, int recur) {","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":" super(amount, recur);","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":" this.type \u003d type;","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"NeoMinWei"},"content":" addIncomeValue();","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"NeoMinWei"},"content":" @Override","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":" public IncomeType getIncomeType() {","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":" return type;","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":" @Override","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":" public ExpenseType getExpenseType() {","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"NeoMinWei"},"content":" return null;","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"NeoMinWei"},"content":" private void addIncomeValue() {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":" balance +\u003d this.amount;","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"NeoMinWei"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":" public void deleteCashflowvalue() {","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":" balance -\u003d this.amount;","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"NeoMinWei"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"NeoMinWei"},"content":" public String toString() {","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"NeoMinWei"},"content":" return \"Income\" + System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"NeoMinWei"},"content":" \" Type: \" + capitalize(type.toString().toLowerCase()) + System.lineSeparator() + super.toString();","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" public String formatString() {","lastModifiedDate":"2023-10-10"},{"lineNumber":41,"author":{"gitId":"NeoMinWei"},"content":" return \"I | \" + this.amount + \" | \" + this.type + super.formatString();","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":43,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"NeoMinWei":39,"ryan1604":4,"hshiah":1}},{"path":"src/main/java/seedu/financialplanner/reminder/Reminder.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"hshiah"},"content":"package seedu.financialplanner.reminder;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"hshiah"},"content":"public class Reminder {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"hshiah"},"content":" private String type;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"hshiah"},"content":" private String date;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"hshiah"},"content":" private boolean isDone \u003d false;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"hshiah"},"content":" public Reminder(String type, String date) {","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":" this.type \u003d type;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"hshiah"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":" String status \u003d isDone ? \"Done\" : \"Not Done\";","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"hshiah"},"content":" return \"Reminder: \"+this.type + \" | \" + this.date + \" | \" + status;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"hshiah"},"content":" public void markAsDone() {","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"hshiah"},"content":" this.isDone \u003d true;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"hshiah"},"content":" /*","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"hshiah"},"content":" * Returns a string that can be saved to a file.","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"hshiah"},"content":" * Format: type | date | isDone","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"hshiah"},"content":" * Example: \"Reminder: Birthday | 2020-10-10 | false\"","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"hshiah"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"hshiah"},"content":" public String formatString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"hshiah"},"content":" String status \u003d isDone ? \"Done\" : \"Not Done\";","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"hshiah"},"content":" return this.type + \" | \" + this.date + \" | \" + this.isDone;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"hshiah":29}},{"path":"src/main/java/seedu/financialplanner/reminder/ReminderList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"hshiah"},"content":"package seedu.financialplanner.reminder;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"hshiah"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"hshiah"},"content":"public class ReminderList {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"hshiah"},"content":" public static final ReminderList INSTANCE \u003d new ReminderList();","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"hshiah"},"content":" public ArrayList\u003cReminder\u003e list \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"hshiah"},"content":" private ReminderList() {","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"hshiah"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"hshiah"},"content":" public void load(Reminder reminder) {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"hshiah"},"content":" list.add(reminder);","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"hshiah"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"hshiah"},"content":" //TODO deleteReminder","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"hshiah"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"hshiah":13}},{"path":"src/main/java/seedu/financialplanner/storage/LoadData.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.storage;","lastModifiedDate":"2023-10-10"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.ExpenseType;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.IncomeType;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Cashflow;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Income;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Expense;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-10"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"import java.io.FileReader;","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-10"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-10"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":"public abstract class LoadData {","lastModifiedDate":"2023-10-10"},{"lineNumber":18,"author":{"gitId":"YFshadaow"},"content":" public static void load(CashflowList cashflowList, Ui ui, String filePath) throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" Scanner inputFile \u003d new Scanner(new FileReader(filePath));","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" String line;","lastModifiedDate":"2023-10-10"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(\"Loading existing file...\");","lastModifiedDate":"2023-10-10"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" while(inputFile.hasNext()) {","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" line \u003d inputFile.nextLine();","lastModifiedDate":"2023-10-10"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" String[] split \u003d line.split(\"\\\\|\");","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" String type \u003d split[0].trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" switch (type) {","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" case \"I\":","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" case \"E\":","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" final Cashflow entry \u003d getEntry(type, split);","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"YFshadaow"},"content":" cashflowList.load(entry);","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" case \"B\":","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" loadBudget(split);","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Error loading file\");","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" inputFile.close();","lastModifiedDate":"2023-10-10"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-10"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(\"File not found. Creating new file...\");","lastModifiedDate":"2023-10-10"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" } catch (NumberFormatException | ArrayIndexOutOfBoundsException | FinancialPlannerException e) {","lastModifiedDate":"2023-10-10"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" handleCorruptedFile(cashflowList, ui);","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" private static void handleCorruptedFile(CashflowList cashflowList, Ui ui) throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(\"File appears to be corrupted. Do you want to create a new file? (Y/N)\");","lastModifiedDate":"2023-10-10"},{"lineNumber":52,"author":{"gitId":"ryan1604"},"content":" if (createNewFile(ui)) {","lastModifiedDate":"2023-10-10"},{"lineNumber":53,"author":{"gitId":"YFshadaow"},"content":" cashflowList.list.clear();","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"ryan1604"},"content":" } else {","lastModifiedDate":"2023-10-10"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Please fix the corrupted file, \" +","lastModifiedDate":"2023-10-10"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" \"which can be found in data/data.txt.\");","lastModifiedDate":"2023-10-10"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" private static void loadBudget(String[] split) {","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":" double initial \u003d Double.parseDouble(split[1].trim());","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"ryan1604"},"content":" double current \u003d Double.parseDouble(split[2].trim());","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"ryan1604"},"content":" Budget.load(initial, current);","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"ryan1604"},"content":" private static boolean createNewFile(Ui ui) {","lastModifiedDate":"2023-10-10"},{"lineNumber":67,"author":{"gitId":"ryan1604"},"content":" String line \u003d ui.input();","lastModifiedDate":"2023-10-10"},{"lineNumber":68,"author":{"gitId":"ryan1604"},"content":" while (!line.equalsIgnoreCase(\"y\") \u0026\u0026 !line.equalsIgnoreCase(\"n\")) {","lastModifiedDate":"2023-10-10"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":" ui.showMessage(\"Unknown input. Please enter Y or N only.\");","lastModifiedDate":"2023-10-10"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":" line \u003d ui.input();","lastModifiedDate":"2023-10-10"},{"lineNumber":71,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":73,"author":{"gitId":"ryan1604"},"content":" return line.equalsIgnoreCase(\"y\");","lastModifiedDate":"2023-10-10"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":" private static Cashflow getEntry(String type, String[] split)","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"NeoMinWei"},"content":" throws FinancialPlannerException, IllegalArgumentException {","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"ryan1604"},"content":" double value;","lastModifiedDate":"2023-10-10"},{"lineNumber":79,"author":{"gitId":"ryan1604"},"content":" int recur;","lastModifiedDate":"2023-10-10"},{"lineNumber":80,"author":{"gitId":"ryan1604"},"content":" Cashflow entry;","lastModifiedDate":"2023-10-10"},{"lineNumber":81,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":82,"author":{"gitId":"ryan1604"},"content":" switch (type) {","lastModifiedDate":"2023-10-10"},{"lineNumber":83,"author":{"gitId":"ryan1604"},"content":" case \"I\":","lastModifiedDate":"2023-10-10"},{"lineNumber":84,"author":{"gitId":"ryan1604"},"content":" value \u003d Double.parseDouble(split[1].trim());","lastModifiedDate":"2023-10-10"},{"lineNumber":85,"author":{"gitId":"ryan1604"},"content":" recur \u003d Integer.parseInt(split[3].trim());","lastModifiedDate":"2023-10-10"},{"lineNumber":86,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"NeoMinWei"},"content":" IncomeType incomeType \u003d IncomeType.valueOf(split[2].trim().toUpperCase());","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"NeoMinWei"},"content":" entry \u003d new Income(value, incomeType, recur);","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"NeoMinWei"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":90,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException();","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-10"},{"lineNumber":93,"author":{"gitId":"ryan1604"},"content":" case \"E\":","lastModifiedDate":"2023-10-10"},{"lineNumber":94,"author":{"gitId":"ryan1604"},"content":" value \u003d Double.parseDouble(split[1].trim());","lastModifiedDate":"2023-10-10"},{"lineNumber":95,"author":{"gitId":"ryan1604"},"content":" recur \u003d Integer.parseInt(split[3].trim());","lastModifiedDate":"2023-10-10"},{"lineNumber":96,"author":{"gitId":"NeoMinWei"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"NeoMinWei"},"content":" ExpenseType expenseType \u003d ExpenseType.valueOf(split[2].trim().toUpperCase());","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"NeoMinWei"},"content":" entry \u003d new Expense(value, expenseType, recur);","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"NeoMinWei"},"content":" } catch (IllegalArgumentException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"NeoMinWei"},"content":" throw new IllegalArgumentException();","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"ryan1604"},"content":" break;","lastModifiedDate":"2023-10-10"},{"lineNumber":103,"author":{"gitId":"ryan1604"},"content":" default:","lastModifiedDate":"2023-10-10"},{"lineNumber":104,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Error loading file\");","lastModifiedDate":"2023-10-10"},{"lineNumber":105,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":106,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":107,"author":{"gitId":"ryan1604"},"content":" return entry;","lastModifiedDate":"2023-10-10"},{"lineNumber":108,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":109,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"NeoMinWei":16,"ryan1604":90,"YFshadaow":3}},{"path":"src/main/java/seedu/financialplanner/storage/SaveData.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.storage;","lastModifiedDate":"2023-10-10"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Cashflow;","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-10"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"public abstract class SaveData {","lastModifiedDate":"2023-10-10"},{"lineNumber":12,"author":{"gitId":"YFshadaow"},"content":" public static void save(CashflowList cashflowList, String filePath) throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" FileWriter fw \u003d new FileWriter(filePath);","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"YFshadaow"},"content":" for (Cashflow entry : cashflowList.list) {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" fw.write(entry.formatString() + \"\\n\");","lastModifiedDate":"2023-10-10"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" fw.write(Budget.formatString() + \"\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" fw.close();","lastModifiedDate":"2023-10-10"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-10"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" throw new FinancialPlannerException(\"Error saving file.\");","lastModifiedDate":"2023-10-10"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"ryan1604":21,"YFshadaow":3}},{"path":"src/main/java/seedu/financialplanner/storage/Storage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.storage;","lastModifiedDate":"2023-10-10"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-10-10"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"YFshadaow"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"public class Storage {","lastModifiedDate":"2023-10-10"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":" public static final Storage INSTANCE \u003d new Storage();","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":" private final Path path \u003d Paths.get(\"data\");","lastModifiedDate":"2023-10-10"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":" private Storage() {","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" if (!Files.exists(path)) {","lastModifiedDate":"2023-10-10"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" try {","lastModifiedDate":"2023-10-10"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" System.out.println(\"Directory doesn\u0027t exist. Creating directory...\");","lastModifiedDate":"2023-10-10"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" Files.createDirectory(path);","lastModifiedDate":"2023-10-10"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-10"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" System.out.println(\"Error creating directory: \" + e.getMessage());","lastModifiedDate":"2023-10-10"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":27,"author":{"gitId":"YFshadaow"},"content":" public void load(CashflowList list, Ui ui, String filePath) throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" LoadData.load(list, ui, filePath);","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"YFshadaow"},"content":" public void save(CashflowList list, String filePath) throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" SaveData.save(list, filePath);","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"ryan1604":28,"YFshadaow":6}},{"path":"src/main/java/seedu/financialplanner/utils/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.utils;","lastModifiedDate":"2023-10-07"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":3,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.commands.AbstractCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.commands.AddStockCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.commands.OverviewCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.commands.AddCashflowCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.commands.DeleteCashflowCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.commands.ExitCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.commands.FindCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.commands.InvalidCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.commands.ListCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.commands.RawCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.commands.WatchListCommand;","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.commands.VisCommand;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.commands.BudgetCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.commands.AddReminderCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"hshiah"},"content":"import seedu.financialplanner.commands.SetGoalCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"YFshadaow"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"YFshadaow"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":"import java.util.Iterator;","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":"import java.util.List;","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"YFshadaow"},"content":"import java.util.Map;","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":"public class Parser {","lastModifiedDate":"2023-10-07"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" private static final String EXIT_COMMAND \u003d \"exit\";","lastModifiedDate":"2023-10-07"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" private static final String WATCHLIST_COMMAND \u003d \"watchlist\";","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":" private static final String ADD_CASHFLOW_COMMAND \u003d \"add\";","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":" private static final String DELETE_CASHFLOW_COMMAND \u003d \"delete\";","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" private static final String ADD_STOCK_COMMAND \u003d \"addstock\";","lastModifiedDate":"2023-10-09"},{"lineNumber":33,"author":{"gitId":"hshiah"},"content":" private static final String FIND_COMMAND \u003d \"find\";","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" private static final String OVERVIEW_COMMAND \u003d \"overview\";","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" private static final String BUDGET_COMMAND \u003d \"budget\";","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":" private static final String VISUALIZATION_COMMAND \u003d \"vis\";","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"hshiah"},"content":" private static final String ADD_REMINDER_COMMAND \u003d \"addreminder\";","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"YFshadaow"},"content":" private static final String LIST_COMMAND \u003d \"list\";","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"hshiah"},"content":" private static final String SET_GOAL_COMMAND \u003d \"set\";","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":" public static AbstractCommand parseCommand(String input) throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"YFshadaow"},"content":" RawCommand rawCommand \u003d parseRawCommand(input);","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"YFshadaow"},"content":" return parseCommand(rawCommand);","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" public static AbstractCommand parseCommand(RawCommand rawCommand) throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"YFshadaow"},"content":" switch (rawCommand.getCommandName()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" case EXIT_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"YFshadaow"},"content":" return new ExitCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" case WATCHLIST_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"YFshadaow"},"content":" return new WatchListCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"NeoMinWei"},"content":" case ADD_CASHFLOW_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"NeoMinWei"},"content":" return new AddCashflowCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"NeoMinWei"},"content":" case DELETE_CASHFLOW_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"NeoMinWei"},"content":" return new DeleteCashflowCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" case ADD_STOCK_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"YFshadaow"},"content":" return new AddStockCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":" case FIND_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"YFshadaow"},"content":" return new FindCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" case BUDGET_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"ryan1604"},"content":" return new BudgetCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":" case VISUALIZATION_COMMAND:","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" return new VisCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" case OVERVIEW_COMMAND:","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":" return new OverviewCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"hshiah"},"content":" case ADD_REMINDER_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"hshiah"},"content":" return new AddReminderCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"YFshadaow"},"content":" case LIST_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"YFshadaow"},"content":" return new ListCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"hshiah"},"content":" case SET_GOAL_COMMAND:","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"hshiah"},"content":" return new SetGoalCommand(rawCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"ryan1604"},"content":" default:","lastModifiedDate":"2023-10-07"},{"lineNumber":73,"author":{"gitId":"YFshadaow"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":75,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":76,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"YFshadaow"},"content":" public static RawCommand parseRawCommand(String input) throws IllegalArgumentException{","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"YFshadaow"},"content":" Iterator\u003cString\u003e iterator \u003d Arrays.stream(input.split(\" \")).iterator();","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"YFshadaow"},"content":" if (!iterator.hasNext()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Command cannot be empty\");","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":82,"author":{"gitId":"YFshadaow"},"content":" String commandName \u003d iterator.next();","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"YFshadaow"},"content":" List\u003cString\u003e args \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"YFshadaow"},"content":" Map\u003cString, String\u003e extraArgs \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"YFshadaow"},"content":" List\u003cString\u003e extraArgumentContentBuffer \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"YFshadaow"},"content":" String currentExtraArgumentName \u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"YFshadaow"},"content":" while (iterator.hasNext()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"YFshadaow"},"content":" String next \u003d iterator.next();","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"YFshadaow"},"content":" if (next.startsWith(\"/\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"YFshadaow"},"content":" // Save previous extra argument when next extra argument is found","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"YFshadaow"},"content":" if (currentExtraArgumentName !\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"NeoMinWei"},"content":" savePreviousExtraArgument(extraArgs, currentExtraArgumentName, extraArgumentContentBuffer);","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"YFshadaow"},"content":" if (next.length() \u003d\u003d 1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(\"Extra argument name cannot be empty\");","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"YFshadaow"},"content":" currentExtraArgumentName \u003d next.substring(1);","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"NeoMinWei"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"YFshadaow"},"content":" if (currentExtraArgumentName \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"YFshadaow"},"content":" args.add(next);","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"YFshadaow"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"YFshadaow"},"content":" extraArgumentContentBuffer.add(next);","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"YFshadaow"},"content":" // Save previous extra argument at the very end","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"YFshadaow"},"content":" if (currentExtraArgumentName !\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"NeoMinWei"},"content":" savePreviousExtraArgument(extraArgs, currentExtraArgumentName, extraArgumentContentBuffer);","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"NeoMinWei"},"content":" return new RawCommand(commandName, args, extraArgs);","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"NeoMinWei"},"content":" private static void savePreviousExtraArgument(Map\u003cString, String\u003e extraArgs","lastModifiedDate":"2023-10-16"},{"lineNumber":119,"author":{"gitId":"NeoMinWei"},"content":" , String currentExtraArgumentName, List\u003cString\u003e extraArgumentContentBuffer) {","lastModifiedDate":"2023-10-16"},{"lineNumber":120,"author":{"gitId":"YFshadaow"},"content":" if (extraArgs.containsKey(currentExtraArgumentName)) {","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"YFshadaow"},"content":" throw new IllegalArgumentException(","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"YFshadaow"},"content":" String.format(\"Duplicate extra argument name: %s\", currentExtraArgumentName));","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"YFshadaow"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"YFshadaow"},"content":" extraArgs.put(currentExtraArgumentName, String.join(\" \", extraArgumentContentBuffer));","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"YFshadaow"},"content":" extraArgumentContentBuffer.clear();","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":128,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-07"}],"authorContributionMap":{"wwweert123":10,"NeoMinWei":24,"ryan1604":24,"YFshadaow":61,"hshiah":9}},{"path":"src/main/java/seedu/financialplanner/utils/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.utils;","lastModifiedDate":"2023-10-07"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"import org.apache.commons.lang3.StringUtils;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.JSONObject;","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Budget;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.list.Cashflow;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-07"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"public class Ui {","lastModifiedDate":"2023-10-07"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":" private static Ui ui \u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"YFshadaow"},"content":" private Scanner Scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"YFshadaow"},"content":" private Ui() {","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":" public static Ui getInstance() {","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":" if (ui \u003d\u003d null) {","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":" return ui;","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"YFshadaow"},"content":" public static void printCorruptedFileError(String message) {","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"YFshadaow"},"content":" System.out.println(message);","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":26,"author":{"gitId":"YFshadaow"},"content":" public Scanner getScanner() {","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"YFshadaow"},"content":" return Scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"YFshadaow"},"content":" public void setScanner(Scanner scanner) {","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"YFshadaow"},"content":" this.Scanner \u003d scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"YFshadaow"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" public void showMessage(String message) {","lastModifiedDate":"2023-10-07"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" System.out.println(message);","lastModifiedDate":"2023-10-07"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" public void welcomeMessage() {","lastModifiedDate":"2023-10-07"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Welcome to your Financial Planner. Type something to get started.\");","lastModifiedDate":"2023-10-09"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":42,"author":{"gitId":"ryan1604"},"content":" public void exitMessage() {","lastModifiedDate":"2023-10-07"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Exiting Financial Planner. Goodbye.\");","lastModifiedDate":"2023-10-09"},{"lineNumber":44,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-07"},{"lineNumber":46,"author":{"gitId":"ryan1604"},"content":" public String input() {","lastModifiedDate":"2023-10-07"},{"lineNumber":47,"author":{"gitId":"YFshadaow"},"content":" return Scanner.nextLine().trim();","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-07"},{"lineNumber":49,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":50,"author":{"gitId":"wwweert123"},"content":" public void printWatchListHeader() {","lastModifiedDate":"2023-10-09"},{"lineNumber":51,"author":{"gitId":"wwweert123"},"content":" System.out.print(\"Symbol\");","lastModifiedDate":"2023-10-09"},{"lineNumber":52,"author":{"gitId":"wwweert123"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-10-09"},{"lineNumber":53,"author":{"gitId":"wwweert123"},"content":" System.out.print(\"Price\");","lastModifiedDate":"2023-10-09"},{"lineNumber":54,"author":{"gitId":"wwweert123"},"content":" System.out.print(\" \");","lastModifiedDate":"2023-10-09"},{"lineNumber":55,"author":{"gitId":"wwweert123"},"content":" System.out.print(\"Company Name\");","lastModifiedDate":"2023-10-09"},{"lineNumber":56,"author":{"gitId":"wwweert123"},"content":" System.out.println();","lastModifiedDate":"2023-10-09"},{"lineNumber":57,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":58,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":59,"author":{"gitId":"wwweert123"},"content":" public void printStockInfo(JSONObject stock) {","lastModifiedDate":"2023-10-09"},{"lineNumber":60,"author":{"gitId":"wwweert123"},"content":" String symbol \u003d StringUtils.rightPad((String) stock.get(\"symbol\"), 10);","lastModifiedDate":"2023-10-09"},{"lineNumber":61,"author":{"gitId":"wwweert123"},"content":" String price \u003d StringUtils.rightPad(stock.get(\"price\").toString(), 10);","lastModifiedDate":"2023-10-09"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":" String name \u003d StringUtils.rightPad((String) stock.get(\"name\"), 10);","lastModifiedDate":"2023-10-09"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" System.out.println(symbol + price + name);","lastModifiedDate":"2023-10-09"},{"lineNumber":64,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":" public void printAddStock(String stockName) {","lastModifiedDate":"2023-10-09"},{"lineNumber":67,"author":{"gitId":"wwweert123"},"content":" System.out.println(\"You have successfully added:\");","lastModifiedDate":"2023-10-09"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":" System.out.println(stockName);","lastModifiedDate":"2023-10-09"},{"lineNumber":69,"author":{"gitId":"wwweert123"},"content":" System.out.println(\"Use Watchlist to view it!\");","lastModifiedDate":"2023-10-09"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":71,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":72,"author":{"gitId":"NeoMinWei"},"content":" public void printAddedCashflow(Cashflow entry) {","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"NeoMinWei"},"content":" System.out.print(\"You have added an \");","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(entry);","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(\"to the Financial Planner.\");","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(\"Balance: \" + entry.formatBalance());","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"NeoMinWei"},"content":" public void printDeletedCashflow(Cashflow entry) {","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"NeoMinWei"},"content":" System.out.print(\"You have removed an \");","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(entry);","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(\"from the Financial Planner.\");","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"NeoMinWei"},"content":" System.out.println(\"Balance: \" + entry.formatBalance());","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"ryan1604"},"content":" public void printBudgetBeforeUpdate() {","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"ryan1604"},"content":" showMessage(\"Budget has been updated:\\nOld initial budget: \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"ryan1604"},"content":" Budget.getInitialBudgetString() + \"\\nOld current budget: \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"ryan1604"},"content":" Budget.getCurrentBudgetString());","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"ryan1604"},"content":" public void printBudgetAfterUpdate() {","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"ryan1604"},"content":" showMessage(\"New initial budget: \" + Budget.getInitialBudgetString() +","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"ryan1604"},"content":" \"\\nNew current budget: \" + Budget.getCurrentBudgetString());","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"ryan1604"},"content":" if (Budget.getCurrentBudget() \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"ryan1604"},"content":" showMessage(\"You have exceeded your budget, please update to a larger budget or \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"ryan1604"},"content":" \"reset the current budget to initial budget.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"ryan1604"},"content":" public void printBudgetAfterDeduction() {","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"ryan1604"},"content":" String message \u003d \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"ryan1604"},"content":" if (Budget.getCurrentBudget() \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"ryan1604"},"content":" message +\u003d \"You have exceeded your current budget by: \";","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"ryan1604"},"content":" } else if (Budget.getCurrentBudget() \u003e 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"ryan1604"},"content":" message +\u003d \"Your remaining budget for the month is: \";","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"ryan1604"},"content":" message +\u003d Budget.getCurrentBudgetString();","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"ryan1604"},"content":" showMessage(message);","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-07"}],"authorContributionMap":{"wwweert123":24,"NeoMinWei":21,"ryan1604":51,"YFshadaow":15}},{"path":"src/main/java/seedu/financialplanner/visualisations/Categorizer.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"package seedu.financialplanner.visualisations;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.list.Cashflow;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.list.Expense;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.list.Income;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"import java.util.Map;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"public class Categorizer {","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":" public static Map\u003cString, Double\u003e sortType(CashflowList cashflowList, String type)","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":" throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":" switch (type) {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":" case \"expense\":","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"categorizing expenses\");","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" return sortExpenses(cashflowList);","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":" case \"income\":","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"categorizing income\");","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" return sortIncome(cashflowList);","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Type not found\");","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" public static Map\u003cString, Double\u003e sortExpenses(CashflowList cashflowList) {","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":" Map\u003cString, Double\u003e expensesByCat \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" for (Cashflow e: cashflowList.list) {","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" if (e instanceof Expense) {","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":" String key \u003d e.getExpenseType().toString().toLowerCase();","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"NeoMinWei"},"content":" double value \u003d expensesByCat.getOrDefault(key, 0.0) + e.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":" assert value \u003e\u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":" expensesByCat.put(key, value);","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" return expensesByCat;","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" public static Map\u003cString, Double\u003e sortIncome(CashflowList cashflowList) {","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":" Map\u003cString, Double\u003e incomeByCat \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" for (Cashflow e: cashflowList.list) {","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" if (e instanceof Income) {","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"NeoMinWei"},"content":" String key \u003d e.getIncomeType().toString().toLowerCase();","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"NeoMinWei"},"content":" double value \u003d incomeByCat.getOrDefault(key, 0.0) + e.getAmount();","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"wwweert123"},"content":" assert value \u003e\u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"wwweert123"},"content":" incomeByCat.put(key, value);","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"wwweert123"},"content":" return incomeByCat;","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"wwweert123":50,"NeoMinWei":4}},{"path":"src/main/java/seedu/financialplanner/visualisations/Visualizer.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"package seedu.financialplanner.visualisations;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import org.knowm.xchart.CategoryChart;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import org.knowm.xchart.CategoryChartBuilder;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"import org.knowm.xchart.PieChart;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"import org.knowm.xchart.PieChartBuilder;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import org.knowm.xchart.SwingWrapper;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"import org.knowm.xchart.style.Styler;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":"import javax.swing.JFrame;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":"import java.awt.Color;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"wwweert123"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":"import java.util.List;","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":"import java.util.Map;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":"public class Visualizer {","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":" private static final Logger logger \u003d Logger.getLogger(\"Financial Planner Logger\");","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":" public static void displayChart(String chartType, Map\u003cString, Double\u003e expensesByCat)","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" throws FinancialPlannerException {","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" switch (chartType) {","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"wwweert123"},"content":" case \"pie\":","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" displayPieChart(expensesByCat);","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" break;","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" case \"bar\":","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":" displayBarChart(expensesByCat);","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":" break;","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"wwweert123"},"content":" default:","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"wwweert123"},"content":" throw new FinancialPlannerException(\"Chart Type Not Found\");","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"wwweert123"},"content":" public static void displayPieChart (Map\u003cString, Double\u003e expensesByCat) {","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"wwweert123"},"content":" PieChart chart \u003d new PieChartBuilder().width(800).height(600).title(\"Test\").build();","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"wwweert123"},"content":" // Customize Chart","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"wwweert123"},"content":" Color[] sliceColors \u003d new Color[] {","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"wwweert123"},"content":" new Color(224, 68, 14),","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"wwweert123"},"content":" new Color(230, 105, 62),","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"wwweert123"},"content":" new Color(236, 143, 110),","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"wwweert123"},"content":" new Color(243, 180, 159),","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"wwweert123"},"content":" new Color(246, 199, 182)","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"wwweert123"},"content":" };","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"wwweert123"},"content":" chart.getStyler().setSeriesColors(sliceColors);","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"wwweert123"},"content":" for (Map.Entry\u003cString, Double\u003e set: expensesByCat.entrySet()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"wwweert123"},"content":" chart.addSeries(set.getKey(), set.getValue());","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Displaying Pie Chart\");","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"wwweert123"},"content":" // Show it","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"wwweert123"},"content":" JFrame swHR \u003d new SwingWrapper\u003c\u003e(chart).displayChart();","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"wwweert123"},"content":" javax.swing.SwingUtilities.invokeLater(","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"wwweert123"},"content":" ()-\u003eswHR.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"wwweert123"},"content":" );","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"wwweert123"},"content":" public static void displayBarChart (Map\u003cString, Double\u003e expensesByCat) {","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"wwweert123"},"content":" CategoryChart chart \u003d new CategoryChartBuilder().width(800).height(600)","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"wwweert123"},"content":" .title(\"Expenses\").xAxisTitle(\"Type\").yAxisTitle(\"Value\").build();","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"wwweert123"},"content":" // Customize Chart","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"wwweert123"},"content":" chart.getStyler().setLegendPosition(Styler.LegendPosition.InsideNW);","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"wwweert123"},"content":" chart.getStyler().setHasAnnotations(true);","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"wwweert123"},"content":" assert !expensesByCat.isEmpty();","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"wwweert123"},"content":" // Series","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"wwweert123"},"content":" List\u003cDouble\u003e values \u003d new ArrayList\u003cDouble\u003e(expensesByCat.values());","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"wwweert123"},"content":" List\u003cString\u003e keys \u003d new ArrayList\u003cString\u003e(expensesByCat.keySet());","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"wwweert123"},"content":" chart.addSeries(\"Expense\", keys, values);","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"wwweert123"},"content":" logger.log(Level.INFO, \"Displaying Bar Chart\");","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"wwweert123"},"content":" JFrame swHR \u003d new SwingWrapper\u003c\u003e(chart).displayChart();","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"wwweert123"},"content":" javax.swing.SwingUtilities.invokeLater(","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"wwweert123"},"content":" ()-\u003eswHR.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"wwweert123"},"content":" );","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"wwweert123":80}},{"path":"src/test/java/seedu/financialplanner/FinancialPlannerTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner;","lastModifiedDate":"2023-10-07"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"class FinancialPlannerTest {","lastModifiedDate":"2023-10-07"},{"lineNumber":8,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":" public void sampleTest() {","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":" assertTrue(true);","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"-":10,"ryan1604":2}},{"path":"src/test/java/seedu/financialplanner/commands/AddCashflowCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.commands;","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.ExpenseType;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.IncomeType;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.investments.WatchList;","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.utils.Parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"NeoMinWei"},"content":"class AddCashflowCommandTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":" private Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"NeoMinWei"},"content":" private CashflowList cashflowList \u003d CashflowList.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"YFshadaow"},"content":" private WatchList watchList \u003d WatchList.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":" void testExecute() {","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.list.clear();","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"NeoMinWei"},"content":" AddCashflowCommand testEntry \u003d new AddCashflowCommand(Parser","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"NeoMinWei"},"content":" .parseRawCommand(\"add income /a 300 /t salary /r 30\"));","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"YFshadaow"},"content":" testEntry.execute();","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"YFshadaow"},"content":" assertEquals(300, testEntry.amount);","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(IncomeType.SALARY, testEntry.incomeType);","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(30, testEntry.recur);","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"NeoMinWei"},"content":" testEntry \u003d new AddCashflowCommand(Parser.parseRawCommand(\"add expense /a 15 /t dining\"));","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"YFshadaow"},"content":" testEntry.execute();","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"YFshadaow"},"content":" assertEquals(15, testEntry.amount);","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(ExpenseType.DINING, testEntry.expenseType);","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(0, testEntry.recur);","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"NeoMinWei":27,"YFshadaow":8}},{"path":"src/test/java/seedu/financialplanner/investments/WatchListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"wwweert123"},"content":"package seedu.financialplanner.investments;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.JSONArray;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"wwweert123"},"content":"import org.json.simple.JSONObject;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"wwweert123"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"wwweert123"},"content":"import static org.junit.jupiter.api.Assertions.assertNotNull;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"wwweert123"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"wwweert123"},"content":"class WatchListTest {","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"wwweert123"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"wwweert123"},"content":" void fetchFMPStockPrices() {","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"YFshadaow"},"content":" WatchList wl \u003d WatchList.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"wwweert123"},"content":" JSONArray obj \u003d wl.fetchFMPStockPrices();","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"wwweert123"},"content":" JSONObject apple \u003d (JSONObject) obj.get(0);","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"wwweert123"},"content":" assertNotNull(apple.get(\"price\"));","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"wwweert123"},"content":" JSONObject meta \u003d (JSONObject) obj.get(1);","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"wwweert123"},"content":" assertNotNull(meta.get(\"price\"));","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"wwweert123"},"content":" JSONObject google \u003d (JSONObject) obj.get(2);","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"wwweert123"},"content":" assertNotNull(google.get(\"price\"));","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"wwweert123"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"wwweert123"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"wwweert123"},"content":" void addStock() throws Exception {","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"YFshadaow"},"content":" WatchList wl \u003d WatchList.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"wwweert123"},"content":" String market \u003d \"NYSE\";","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"wwweert123"},"content":" String stockCode \u003d \"GME\";","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"wwweert123"},"content":" assertEquals(\"Gamestop Corporation - Class A\", wl.addStock(stockCode));","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"wwweert123"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"wwweert123"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"wwweert123":29,"YFshadaow":2}},{"path":"src/test/java/seedu/financialplanner/list/BudgetTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.list;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.Order;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.TestMethodOrder;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.commands.AddCashflowCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"import static org.junit.jupiter.api.Assertions.assertFalse;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"@TestMethodOrder(OrderAnnotation.class)","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"public class BudgetTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ryan1604"},"content":" @Order(1)","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":" public void testSetBudget() {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":" assertFalse(Budget.hasBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":" Budget.setBudget(500);","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" assertTrue(Budget.hasBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":" assertEquals(500, Budget.getInitialBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" assertEquals(500, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" @Order(2)","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" public void testNewExpense() {","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"NeoMinWei"},"content":" AddCashflowCommand testExpense \u003d new AddCashflowCommand(Parser.parseRawCommand(\"add expense /a 50 /t dining\"));","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"ryan1604"},"content":" testExpense.execute();","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"ryan1604"},"content":" assertEquals(450, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"ryan1604"},"content":" @Order(3)","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"ryan1604"},"content":" public void testUpdateBudget() {","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" Budget.updateBudget(1000);","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":" assertEquals(1000, Budget.getInitialBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" assertEquals(950, Budget.getCurrentBudget());","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NeoMinWei":2,"ryan1604":39}},{"path":"src/test/java/seedu/financialplanner/list/CashflowListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"NeoMinWei"},"content":"package seedu.financialplanner.list;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"NeoMinWei"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.CashflowCategory;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.ExpenseType;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.IncomeType;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"NeoMinWei"},"content":"import java.text.DecimalFormat;","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"NeoMinWei"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"NeoMinWei"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"NeoMinWei"},"content":"class CashflowListTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"NeoMinWei"},"content":" private CashflowList testList \u003d CashflowList.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":" private DecimalFormat decimalFormat \u003d new DecimalFormat(\"####0.00\");","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"NeoMinWei"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"NeoMinWei"},"content":" void testAddIncomeAndExpense() {","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"NeoMinWei"},"content":" testList.list.clear();","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"YFshadaow"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":" Cashflow.balance \u003d 0;","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"NeoMinWei"},"content":" testList.addIncome(15, IncomeType.SALARY, 30);","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"NeoMinWei"},"content":" Cashflow testIncome \u003d testList.list.get(0);","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"NeoMinWei"},"content":" double roundedValue \u003d Cashflow.round(testIncome.amount, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"NeoMinWei"},"content":" double roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":" assertTrue(testIncome instanceof Income);","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"15.00\", decimalFormat.format(roundedValue));","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(IncomeType.SALARY, testIncome.getIncomeType());","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(30, testIncome.recur);","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"15.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"NeoMinWei"},"content":" testList.addIncome(15.999, IncomeType.INVESTMENTS, 0);","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"NeoMinWei"},"content":" testIncome \u003d testList.list.get(1);","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"NeoMinWei"},"content":" roundedValue \u003d Cashflow.round(testIncome.amount, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"NeoMinWei"},"content":" assertTrue(testIncome instanceof Income);","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"16.00\", decimalFormat.format(roundedValue));","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(IncomeType.INVESTMENTS, testIncome.getIncomeType());","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(0, testIncome.recur);","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"31.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"NeoMinWei"},"content":" testList.addExpense(10, ExpenseType.DINING, 0);","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"NeoMinWei"},"content":" Cashflow testExpense \u003d testList.list.get(2);","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"NeoMinWei"},"content":" roundedValue \u003d Cashflow.round(testExpense.amount, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"NeoMinWei"},"content":" assertTrue(testExpense instanceof Expense);","lastModifiedDate":"2023-10-12"},{"lineNumber":47,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"10.00\", decimalFormat.format(roundedValue));","lastModifiedDate":"2023-10-12"},{"lineNumber":48,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(ExpenseType.DINING, testExpense.getExpenseType());","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(0, testExpense.recur);","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"21.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"NeoMinWei"},"content":" testList.addExpense(19.999, ExpenseType.ENTERTAINMENT, 30);","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"NeoMinWei"},"content":" testExpense \u003d testList.list.get(3);","lastModifiedDate":"2023-10-12"},{"lineNumber":54,"author":{"gitId":"NeoMinWei"},"content":" roundedValue \u003d Cashflow.round(testExpense.amount, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"NeoMinWei"},"content":" assertTrue(testExpense instanceof Expense);","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"20.00\", decimalFormat.format(roundedValue));","lastModifiedDate":"2023-10-12"},{"lineNumber":58,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(ExpenseType.ENTERTAINMENT, testExpense.getExpenseType());","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(30, testExpense.recur);","lastModifiedDate":"2023-10-12"},{"lineNumber":60,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"1.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":62,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"NeoMinWei"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"NeoMinWei"},"content":" void testDeleteIncomeAndExpense() {","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"NeoMinWei"},"content":" testList.deleteCashflow(CashflowCategory.INCOME, 2);","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(3, testList.list.size());","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"NeoMinWei"},"content":" double roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"-15.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"NeoMinWei"},"content":" testList.delete(1);","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(2, testList.list.size());","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"-30.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"NeoMinWei"},"content":" testList.deleteCashflow(CashflowCategory.EXPENSE, 2);","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(1, testList.list.size());","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"-10.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"NeoMinWei"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"NeoMinWei"},"content":" testList.delete(1);","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(0, testList.list.size());","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"NeoMinWei"},"content":" roundedBalance \u003d Cashflow.round(Cashflow.balance, 2);","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"NeoMinWei"},"content":" assertEquals(\"0.00\", decimalFormat.format(roundedBalance));","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"NeoMinWei"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"NeoMinWei"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"NeoMinWei":82,"ryan1604":2,"YFshadaow":1}},{"path":"src/test/java/seedu/financialplanner/storage/StorageTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ryan1604"},"content":"package seedu.financialplanner.storage;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"ryan1604"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.ExpenseType;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"NeoMinWei"},"content":"import seedu.financialplanner.enumerations.IncomeType;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.exceptions.FinancialPlannerException;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Expense;","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"YFshadaow"},"content":"import seedu.financialplanner.list.CashflowList;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.list.Income;","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"ryan1604"},"content":"import seedu.financialplanner.utils.Ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"ryan1604"},"content":"import java.io.ByteArrayInputStream;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"ryan1604"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"ryan1604"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"ryan1604"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"YFshadaow"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"ryan1604"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"ryan1604"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"ryan1604"},"content":"public class StorageTest {","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"ryan1604"},"content":" @TempDir","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"ryan1604"},"content":" public static Path testFolder;","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"NeoMinWei"},"content":" protected CashflowList cashflowList \u003d CashflowList.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"NeoMinWei"},"content":" protected Ui ui \u003d Ui.getInstance();","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"ryan1604"},"content":" public void loadValidData() throws FinancialPlannerException {","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"YFshadaow"},"content":" Storage storage \u003d Storage.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"YFshadaow"},"content":" cashflowList.list.clear();","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"NeoMinWei"},"content":" storage.load(cashflowList, ui, \"src/test/testData/ValidData.txt\");","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"YFshadaow"},"content":" String actual \u003d cashflowList.getList();","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"YFshadaow"},"content":" cashflowList.list.clear();","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"YFshadaow"},"content":" getTestData();","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"YFshadaow"},"content":" String expected \u003d cashflowList.getList();","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"YFshadaow"},"content":" assertEquals(expected, actual);","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"ryan1604"},"content":" public void loadInvalidData_userInputNo() {","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"YFshadaow"},"content":" Storage storage \u003d Storage.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.list.clear();","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"ryan1604"},"content":" ByteArrayInputStream in \u003d new ByteArrayInputStream(\"n\".getBytes());","lastModifiedDate":"2023-10-13"},{"lineNumber":44,"author":{"gitId":"NeoMinWei"},"content":" ui.setScanner(new Scanner(in));","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"ryan1604"},"content":" assertThrows(FinancialPlannerException.class,","lastModifiedDate":"2023-10-13"},{"lineNumber":46,"author":{"gitId":"NeoMinWei"},"content":" () -\u003e storage.load(cashflowList, ui, \"src/test/testData/InvalidData.txt\"));","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":49,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":50,"author":{"gitId":"ryan1604"},"content":" public void saveValidData() throws FinancialPlannerException, IOException {","lastModifiedDate":"2023-10-13"},{"lineNumber":51,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.list.clear();","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"YFshadaow"},"content":" getTestData();","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"YFshadaow"},"content":" Storage storage \u003d Storage.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":54,"author":{"gitId":"NeoMinWei"},"content":" storage.save(cashflowList, String.valueOf(testFolder.resolve(\"temp.txt\")));","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"ryan1604"},"content":" assertEquals(Files.readAllLines(Path.of(\"src/test/testData/ValidData.txt\")),","lastModifiedDate":"2023-10-13"},{"lineNumber":56,"author":{"gitId":"ryan1604"},"content":" Files.readAllLines(testFolder.resolve(\"temp.txt\")));","lastModifiedDate":"2023-10-13"},{"lineNumber":57,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":58,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":59,"author":{"gitId":"ryan1604"},"content":" @Test","lastModifiedDate":"2023-10-13"},{"lineNumber":60,"author":{"gitId":"ryan1604"},"content":" public void saveNonExistentFile() {","lastModifiedDate":"2023-10-13"},{"lineNumber":61,"author":{"gitId":"YFshadaow"},"content":" getTestData();","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"YFshadaow"},"content":" Storage storage \u003d Storage.INSTANCE;","lastModifiedDate":"2023-10-13"},{"lineNumber":63,"author":{"gitId":"NeoMinWei"},"content":" assertThrows(FinancialPlannerException.class, () -\u003e storage.save(cashflowList, \"\"));","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":65,"author":{"gitId":"ryan1604"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":66,"author":{"gitId":"YFshadaow"},"content":" private void getTestData() {","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.load(new Income(123.12, IncomeType.ALLOWANCE, 0));","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"NeoMinWei"},"content":" cashflowList.load(new Expense(100, ExpenseType.SHOPPING, 30));","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"ryan1604"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":70,"author":{"gitId":"ryan1604"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"NeoMinWei":13,"ryan1604":42,"YFshadaow":15}}] diff --git a/AY2324S1-CS2113-T18-2_tp_master/commits.json b/AY2324S1-CS2113-T18-2_tp_master/commits.json index 92a8a61..e6ac692 100644 --- a/AY2324S1-CS2113-T18-2_tp_master/commits.json +++ b/AY2324S1-CS2113-T18-2_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"wwweert123":[{"date":"2023-10-05","commitResults":[{"hash":"491c9238e3c2b52f8ddaa10ba332e9566a8b7e9e","isMergeCommit":false,"messageTitle":"Add aboutus links and add my my own md file","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":12,"deletions":7}}},{"hash":"2712d42c6b6d4552c9a0ea7bcc75de166bdf1546","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp into Frederick-AboutUs","messageBody":"# Conflicts:\n#\tdocs/AboutUs.md\n","fileTypesAndContributionMap":{}},{"hash":"11db7a69a38c31d6f7658163f69ac8726f80a0b0","isMergeCommit":true,"messageTitle":"Merge pull request #3 from wwweert123/Frederick-AboutUs","messageBody":"Add aboutus links and add my my own md file","fileTypesAndContributionMap":{}}]},{"date":"2023-10-08","commitResults":[{"hash":"68d635974b5493f20ba1ffaa1b953cf0b798a5ae","isMergeCommit":false,"messageTitle":"Add new watchlist command and pull from FMP api for stock data","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":0}}},{"hash":"5f7d5ba1fafae93224d2ae0559edae789e3747bd","isMergeCommit":false,"messageTitle":"Add simple JSON library to parse response body and print to UI","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":1},"other":{"insertions":1,"deletions":0}}},{"hash":"bfa75c44ff77cc7824fb4a072c8d4a8e94a19e09","isMergeCommit":false,"messageTitle":"Use string format to create request URI","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":2}}},{"hash":"d5ac9fceb7e20c02055b08cff4c73c88830bb993","isMergeCommit":false,"messageTitle":"Add a stock class and have the watchlist query API endpoint using stock classes created","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":87,"deletions":2}}},{"hash":"66c6dc6ad21cbde9abe158bb32b30160a572021d","isMergeCommit":false,"messageTitle":"Add commons lang library to allow for padding of string when printing","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":7},"other":{"insertions":1,"deletions":0}}}]},{"date":"2023-10-09","commitResults":[{"hash":"9a32030207906b044fd774d1afcc8768c2f52b51","isMergeCommit":false,"messageTitle":"Create a watchlist class to reference stocks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":0},"other":{"insertions":12,"deletions":35}}},{"hash":"a311199b47d9c35e55f5509eaba762545283cd61","isMergeCommit":false,"messageTitle":"Create method in UI to print stock prices","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":0}}},{"hash":"84fb7092fb5158ab4e8aeb7b0e00b521bdd981df","isMergeCommit":false,"messageTitle":"Add watchlist parameter to execute","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":6}}},{"hash":"2977b5bb71d186cf5ba1d7e15eb4c59e029f88c3","isMergeCommit":false,"messageTitle":"Initialize watchlist on startup","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":1}}},{"hash":"df5605a78870802546be8dc5b852348e41405f8c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into FrederickWatchlist","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/FinancialPlanner.java\n#\tsrc/main/java/seedu/financialplanner/commands/Command.java\n#\tsrc/main/java/seedu/financialplanner/commands/Exit.java\n#\tsrc/main/java/seedu/financialplanner/commands/Invalid.java\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"74e0b77d800eb36b21b1534bb75611548d2b2164","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":16}}},{"hash":"fab0ae11bdae69d18f598f87848130409af67551","isMergeCommit":true,"messageTitle":"Merge pull request #33 from wwweert123/FrederickWatchlist","messageBody":"Frederick watchlist","fileTypesAndContributionMap":{}},{"hash":"a778bb54cf3c686fc074b019c292a87b7beeb3dd","isMergeCommit":false,"messageTitle":"Add command for adding stock to watchlist","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":67,"deletions":5}}},{"hash":"bece3c1c0e553317e4fa0715467f3a782b274f1c","isMergeCommit":false,"messageTitle":"Add some minor error handling for response from API endpoint","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":9}}}]},{"date":"2023-10-10","commitResults":[{"hash":"c6df4b251e96eda6f8271f3b1c9d4a7c8c5cd6f3","isMergeCommit":true,"messageTitle":"Merge pull request #37 from wwweert123/FrederickAddStock","messageBody":"Frederick add stock","fileTypesAndContributionMap":{}}]},{"date":"2023-10-12","commitResults":[{"hash":"bef5bea11ba3f9ee327b12830092670706eb6c8c","isMergeCommit":false,"messageTitle":"Add testcases for addstock and fetchFMPStockPrices","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":31,"deletions":0}}},{"hash":"92df6fe7a3c18bfd7283694eafeee6fb0e82f070","isMergeCommit":false,"messageTitle":"Fix Code styles","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":3}}},{"hash":"1afcc973197329792f60e23295c485d963590453","isMergeCommit":false,"messageTitle":"Fix imports","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":0}}},{"hash":"5471bf86202514018adf0251d3811de39949cdde","isMergeCommit":true,"messageTitle":"Merge pull request #44 from wwweert123/JUnitWatchlist","messageBody":"Add testcases for addstock and fetchFMPStockPrices","fileTypesAndContributionMap":{}}]},{"date":"2023-10-13","commitResults":[{"hash":"00f4c3f960e81461c36262c92bbd2dfa2a9d8541","isMergeCommit":false,"messageTitle":"Fix bug by changing api endpoint and changing api key","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":21},"test-code":{"insertions":1,"deletions":1}}},{"hash":"52856fb2cda836fc593956eca93d3d2e7cab04ea","isMergeCommit":true,"messageTitle":"Merge pull request #52 from wwweert123/FrederickStockAPIChange","messageBody":"Fix bug by changing api endpoint and changing api key","fileTypesAndContributionMap":{}},{"hash":"f4935d893db62558f2c75ebdddd419e7b39f15b6","isMergeCommit":false,"messageTitle":"Fix test and remove market from add stock","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":3}}},{"hash":"0782c150bb1bb098038134bdbf37d56e35bee902","isMergeCommit":true,"messageTitle":"Merge pull request #53 from wwweert123/FrederickStockAPIChange","messageBody":"Fix test and remove market from add stock","fileTypesAndContributionMap":{}},{"hash":"acb5bdbfd096302f98eea97c01f4a6e360c1395b","isMergeCommit":false,"messageTitle":"Fix bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1},"test-code":{"insertions":1,"deletions":1}}},{"hash":"da1f2d50202a960b187bbbebcf4514c9aa128d68","isMergeCommit":true,"messageTitle":"Merge pull request #54 from wwweert123/FrederickStockAPIChange","messageBody":"Fix bug","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"7d495e4009402389b717de162fc78f288ba88fc1","isMergeCommit":false,"messageTitle":"Add new dependency for creating data plots and test it","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":39,"deletions":1},"other":{"insertions":1,"deletions":0}}},{"hash":"763e137a04d856abc406e8795f0bf5f91d904d1e","isMergeCommit":false,"messageTitle":"Remove unnecessary classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":31}}},{"hash":"d03b9438f621db15a83610c3ce199c6ee840675c","isMergeCommit":false,"messageTitle":"Add getters for cashflow type and value","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":3}}},{"hash":"4fc4df2db821fb4d8cdd5f3eb3093400f5e0d297","isMergeCommit":false,"messageTitle":"Add vis command to the parser class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":10}}},{"hash":"7f31985cd4ae39b8944d2df5d424aad1616742c0","isMergeCommit":false,"messageTitle":"Add categorizer utility class to sort expenses or income entry based on type","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":0}}},{"hash":"afc246440d8eca06ede599770fa363a0a5549f3e","isMergeCommit":false,"messageTitle":"Add visualizer class to visualize data in bar graph or pie chart","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":69,"deletions":0}}},{"hash":"8631e18975c8beabae651b826d9c0a6a6a798aeb","isMergeCommit":false,"messageTitle":"Fix Import","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":1}}}]},{"date":"2023-10-16","commitResults":[{"hash":"7fe6dc007f9a4c50dd6d6e431834641688608bd3","isMergeCommit":false,"messageTitle":"Fix code style issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":10}}},{"hash":"68fc9ae55171009c217fc93e846fa88e4c0b913a","isMergeCommit":false,"messageTitle":"Fix identation in visualizer","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5}}},{"hash":"42b5794f6f94595b399e3e97640cd986e617d529","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into FrederickVisualisation","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/list/CashflowList.java\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"c689389905882a16a1e1aa27a4fbfd4936ba22a3","isMergeCommit":false,"messageTitle":"Remove dead code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":7}}},{"hash":"f97b44048a9b7b92fcb0abbd4ca91161a7d965f5","isMergeCommit":false,"messageTitle":"Add functionality to do visualization for both income and expense","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":3}}},{"hash":"671802cad084f4b455b79718f5de9dd35ec9f322","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into FrederickVisualisation","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"2a0a2fb3bf353c2ec7d9faf9f4b26be38addb9cb","isMergeCommit":false,"messageTitle":"Fix code style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"9b0642a136c10c64880e1c6e3d7f7ad74c46c4b5","isMergeCommit":true,"messageTitle":"Merge pull request #69 from wwweert123/FrederickVisualisation","messageBody":"Frederick visualisation","fileTypesAndContributionMap":{}},{"hash":"4c12a33358390c7833882cb4ff8856c639a0e0d9","isMergeCommit":false,"messageTitle":"Add logger for visualizer and categorizer class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":1}}}]},{"date":"2023-10-17","commitResults":[{"hash":"d37e2a293714b82b7d9f79e06cecb35599196bce","isMergeCommit":false,"messageTitle":"Add logging for Vis Command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":2}}},{"hash":"c7897b1d61ad607722a0af7243c2c0412cbb6074","isMergeCommit":false,"messageTitle":"Add assert for visualizations related classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":6}}},{"hash":"a3dd93f6e66d04efcc7f61d57df01c3e05772535","isMergeCommit":false,"messageTitle":"Fix error in check style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}}]},{"date":"2023-10-18","commitResults":[{"hash":"793ce105ddb0c8508ec605fe40f273cd5b4cce5d","isMergeCommit":true,"messageTitle":"Merge pull request #93 from wwweert123/LoggingAssertVis","messageBody":"Logging assert vis","fileTypesAndContributionMap":{}},{"hash":"5562991591bfeb1bc8e0cf33b9e4d9ef55ee5a11","isMergeCommit":false,"messageTitle":"Add logging and assert for watchlist command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":0}}},{"hash":"3de6f7e633a56dea1df03c9b4daf3a112a6212c3","isMergeCommit":false,"messageTitle":"Add logging and assert to AddStockCommand, Stock and Watchlist","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":0}}},{"hash":"1659e06bfa224f44344d3c005cf878e12c8adaf8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into LoggingAssertWatchlist","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/investments/WatchList.java\n","fileTypesAndContributionMap":{}},{"hash":"8d06dc08254699a08a4fff6922f9b7194c4a1dbb","isMergeCommit":false,"messageTitle":"Fix checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"15f9d47404e37efa56d679a640a19715f6fb9b83","isMergeCommit":false,"messageTitle":"Add handling for API limit reach and logging in constructor fix","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":2}}},{"hash":"0ee9efd58624b16160b1d2427a129cc636383756","isMergeCommit":false,"messageTitle":"Standardize logging","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"6161f6a7773821576d303d4690b81263e271d4dc","isMergeCommit":false,"messageTitle":"Remove commented code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"2d3e1047a9e7c595813b65c80728e187227dbcd5","isMergeCommit":true,"messageTitle":"Merge pull request #94 from wwweert123/LoggingAssertWatchlist","messageBody":"Logging assert watchlist","fileTypesAndContributionMap":{}}]}],"NeoMinWei":[{"date":"2023-10-05","commitResults":[{"hash":"4f47ae40234b912a4c5b7dc60382509629d101a3","isMergeCommit":false,"messageTitle":"Add name to AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":8,"deletions":8}}},{"hash":"f2c1d37c4806aa17f190a32959ef65e5687b4aee","isMergeCommit":true,"messageTitle":"Merge pull request #1 from ryan1604/ryanChua-AboutUs","messageBody":"Update AboutUs","fileTypesAndContributionMap":{}},{"hash":"2c62d715ae126cdd37eb029c1637b350c38be6de","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp into NeoMinWei-AboutUs","messageBody":"# Conflicts:\n#\tdocs/AboutUs.md\n","fileTypesAndContributionMap":{}},{"hash":"22503c3b8de7c4b1a38b85131f14e6b63162ded7","isMergeCommit":true,"messageTitle":"Merge pull request #2 from NeoMinWei/NeoMinWei-AboutUs","messageBody":"Add name to AboutUs","fileTypesAndContributionMap":{}},{"hash":"068afbff53a8490ae4d79d8b323ea58f34470cf9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-08","commitResults":[{"hash":"df39139c6b034e42f46f335dcc8064168ac563aa","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2d7049b261c1db9ee9b2fd302da80eac4f32b989","isMergeCommit":false,"messageTitle":"Create cashflow and income classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":33,"deletions":0}}},{"hash":"f8e310a44b9827b00635f829dd8d1fd8a11224e9","isMergeCommit":false,"messageTitle":"Create ArrayList to store entries","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":0}}},{"hash":"ae8527bbe3908a49eee3eeba95bb39a9778f275b","isMergeCommit":false,"messageTitle":"Add ability to add income to the ArrayList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":2}}},{"hash":"c09c55e2fbf921cb8794c0eac6512dbc9b291f2a","isMergeCommit":false,"messageTitle":"Add ability to add income through user input","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":60,"deletions":5}}},{"hash":"17fea1ee0b01d0acd6fa797bca86c66770974214","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":5}}},{"hash":"d5200ef10bf45e451d5057995598577e58195500","isMergeCommit":false,"messageTitle":"Add rounding of double values to 2 decimal places","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":2}}},{"hash":"c9daed435f0538014db06c642d487427e73b1ac8","isMergeCommit":false,"messageTitle":"Add expense class and ability to add expense through user input","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":26,"deletions":3}}},{"hash":"26b06f9c92c6a293c902d83d8de8f4fa7434c443","isMergeCommit":false,"messageTitle":"Fix bug of not recognising description of parameters","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":7}}},{"hash":"9e54041da9ee4d502cf0869ecbf0f32571491295","isMergeCommit":true,"messageTitle":"Merge pull request #32 from NeoMinWei/branch-income","messageBody":"Add Income and Expense","fileTypesAndContributionMap":{}},{"hash":"08684d0c749a38b97d55e31a5bf525fded9a7136","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-12","commitResults":[{"hash":"699cb40438315f404663b969d8a7e9330fa58887","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"62d46f719a6d2b1a8b804ac1a54b3ef6cc03b943","isMergeCommit":false,"messageTitle":"Add JUnit tests for addIncome() and addExpense()","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"test-code":{"insertions":56,"deletions":0}}},{"hash":"9dfd51ea57f7888e0c8eac32cc354313950d3c0c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp into Branch-JUnit","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-13","commitResults":[{"hash":"c9fa29cd6aa140362bfaacdf93ae5c98b7ddf5b0","isMergeCommit":false,"messageTitle":"Add JUnit test for execute() in Entry","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":5},"test-code":{"insertions":29,"deletions":0}}},{"hash":"7e7c94aa80486995c938dc65216cb96d1b290fcc","isMergeCommit":true,"messageTitle":"Merge pull request #47 from NeoMinWei/Branch-JUnit","messageBody":"JUnit for addIncome and addExpense and execute","fileTypesAndContributionMap":{}},{"hash":"1c88d2ac4c68c1d9f7335cc5beb4b858e966467f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2990de0cc5378b9586045413ccd2bb3a8a259ff9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"fe1b5953d0fd0d3767e5ed5a5ce7f748651598ba","isMergeCommit":false,"messageTitle":"Rename FinancialList to CashflowList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":37,"deletions":32},"other":{"insertions":24,"deletions":6},"test-code":{"insertions":12,"deletions":12}}},{"hash":"2be22452273938923c4666e0b1af0c17acfca335","isMergeCommit":false,"messageTitle":"Add toString method in Cashflow","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":54,"deletions":12},"test-code":{"insertions":8,"deletions":8}}},{"hash":"73b1c64059a1ea52fcd4bac81d45be61ce1c621e","isMergeCommit":false,"messageTitle":"Add printAddedCashflow and printDeletedCashflow methods to Ui","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":2}}},{"hash":"7f0ff6575178c82185acd34370ed280d0ff9c9bb","isMergeCommit":false,"messageTitle":"Rename Entry class to AddCashflowCommand class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":1},"other":{"insertions":6,"deletions":6}}},{"hash":"93058ea23bd016c655986c6368673c965819d4e8","isMergeCommit":false,"messageTitle":"Rename Entry class to AddCashflowCommand class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":4}}},{"hash":"b8d5f995f6592fbb2e9a0f5f9525bf27f82b527c","isMergeCommit":false,"messageTitle":"Extract parsing method from AddCashflowCommand class to Parser class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":39,"deletions":28},"test-code":{"insertions":0,"deletions":29}}},{"hash":"ef33866779c2999ab88f18d234af45c1ae46cf1c","isMergeCommit":false,"messageTitle":"Rename list to cashflowList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"6b30cdad90948467b5fe2cd12651aa04467304a5","isMergeCommit":false,"messageTitle":"Add delete income/expense functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":128,"deletions":49}}},{"hash":"38dbc030b566522fd0f329ba247221284b2ed4af","isMergeCommit":false,"messageTitle":"Add JUnit testing","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3},"test-code":{"insertions":31,"deletions":8}}}]},{"date":"2023-10-16","commitResults":[{"hash":"781779dca09f480fe69d15dcdfcbd955af8c56d6","isMergeCommit":false,"messageTitle":"Delete unused constructor","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":5}}},{"hash":"20be5d31d905fc8458bc03b5bbe07a43b69cda7a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"372f730c17048dbfeef6a9573a4eb1178755f724","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Branch-DeleteIncome","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/FinancialPlanner.java\n#\tsrc/main/java/seedu/financialplanner/commands/AddStockCommand.java\n#\tsrc/main/java/seedu/financialplanner/commands/Command.java\n#\tsrc/main/java/seedu/financialplanner/commands/Exit.java\n#\tsrc/main/java/seedu/financialplanner/commands/Find.java\n#\tsrc/main/java/seedu/financialplanner/commands/Invalid.java\n#\tsrc/main/java/seedu/financialplanner/commands/WatchListCommand.java\n#\tsrc/main/java/seedu/financialplanner/list/CashflowList.java\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n#\tsrc/test/java/seedu/financialplanner/commands/EntryTest.java\n#\tsrc/test/java/seedu/financialplanner/storage/StorageTest.java\n#\ttext-ui-test/input.txt\n","fileTypesAndContributionMap":{}},{"hash":"7084894811134dccb133b5b495c4bc0c0c96c9ea","isMergeCommit":false,"messageTitle":"Wrap line to reduce line length","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":3,"deletions":2}}},{"hash":"2c874bb132ea38c1bef7df1c6d9b8ebdf8fdeb93","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"756fefab390978a479cca40dd1df6931800d245d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Branch-DeleteIncome","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/commands/AddCashflowCommand.java\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"1f0dd2ff73b0f8937c646a97b15280bbf1a4962f","isMergeCommit":false,"messageTitle":"Resolve renaming issues","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":6,"deletions":6}}},{"hash":"0091535cb31b76adf7958cd54d4d4feac1048ab0","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f5624bbdb0c6339bb71fc19b4ba56fb8b948be05","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Branch-DeleteIncome","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/list/Cashflow.java\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"e9cd0d0fb2b11f8f93a515a31a980110d30f6597","isMergeCommit":true,"messageTitle":"Merge pull request #71 from NeoMinWei/Branch-DeleteIncome","messageBody":"Delete income and expense","fileTypesAndContributionMap":{}},{"hash":"77f97a183a9dad909f9a74bbf3755ca8ff7df89e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"61401f04364506993e3ba06fa4e9d52d9a4669a0","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7d8d56d6e6c99dc005c3d68649bf6960d65284d2","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Branch-DeleteBugFix","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c39094ff72f2ff8fa468ec804cd3dfb3016fe480","isMergeCommit":false,"messageTitle":"Fix bug where wrong message is showing for error handling and when user inputs delete 0","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":4}}},{"hash":"169a0adc623031468978ad883a41a8862150d138","isMergeCommit":false,"messageTitle":"Add assertions for AddCashflowCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"c32e4c62168dba8284fb862f1bdcebd8ceaad008","isMergeCommit":false,"messageTitle":"Add error handling for empty type string","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":2}}},{"hash":"ffe8271a4dc18b4c8b4490697931915343ac4c08","isMergeCommit":false,"messageTitle":"Revert \"Add error handling for empty type string\"","messageBody":"This reverts commit c32e4c62168dba8284fb862f1bdcebd8ceaad008.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":14}}},{"hash":"6bcfea610b1d4ff267638f51777a3095c2f4686b","isMergeCommit":false,"messageTitle":"Add error handling of negative amount and recur value and empty type string","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":2}}},{"hash":"6124a059151ca2174be69affe593633855519e0e","isMergeCommit":false,"messageTitle":"Add assertions for DeleteCashflowCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"6ddac1f153c6f64db63f72da8612452b2573fbec","isMergeCommit":false,"messageTitle":"Add assertions to CashflowList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":2}}},{"hash":"2b845eaedab4f7b60b6c49cd14788b0880ad0e4f","isMergeCommit":false,"messageTitle":"Change message shown when recurring value is negative","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}}]},{"date":"2023-10-17","commitResults":[{"hash":"b3e0e452479fb4240679bab91046264ca2ea19d8","isMergeCommit":true,"messageTitle":"Merge pull request #90 from NeoMinWei/Branch-DeleteBugFix","messageBody":"Branch delete bug fix","fileTypesAndContributionMap":{}},{"hash":"2d9688e30c0c074ef4147b14a5ad27494ce48506","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7adc4fbbec1014c742e32d1388eb3106eb1d2060","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Branch-LogAndAssert","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"02fdad409ee5ae84faed74f3dbab5b53fca89bda","isMergeCommit":false,"messageTitle":"Add logging for AddCashflowCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":0}}},{"hash":"951cab2e9360ac30ec87e1a28343e9ed0942a20d","isMergeCommit":false,"messageTitle":"Add logging for DeleteCashflowCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":1}}},{"hash":"37c006a162c8d924bf64485b7c7712e7fbbc1b2e","isMergeCommit":false,"messageTitle":"Add logging for CashflowList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":1}}},{"hash":"93b4095f0b68d6d7f32f1596a8ee627a79bfb05f","isMergeCommit":false,"messageTitle":"Add logging for try statements in DeleteCashflowCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"82e3d8c5fd251bb8e1486bdb6f6c3e95399a0864","isMergeCommit":false,"messageTitle":"Add logging for try statements in AddCashflowCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"54479b36eabc35a3f621e042138e59d445c91f99","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"68bda88f9c684d8c4a4b8b0dc6df61873109a0eb","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Branch-LogAndAssert","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/commands/AddCashflowCommand.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"7c3e3e695bfb2c6af6de09d685d668f1857922bc","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8b673dc53f4e4559f6ae72d819eccce881ee8ff8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Branch-LogAndAssert","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d267f8af00aaf208b518f698d83f5f218937d394","isMergeCommit":true,"messageTitle":"Merge pull request #92 from NeoMinWei/Branch-LogAndAssert","messageBody":"Branch log and assert","fileTypesAndContributionMap":{}}]}],"ryan1604":[{"date":"2023-10-05","commitResults":[{"hash":"eab7be4bcbb2bd13648ec4f347d0278a5b33b3b1","isMergeCommit":false,"messageTitle":"Update AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}}]},{"date":"2023-10-07","commitResults":[{"hash":"e8da8d09f6900bdcf1299dabba13d3177794676f","isMergeCommit":false,"messageTitle":"Setup Ui and rename Duke to FinancialPlanner","messageBody":"Fixes #5\n","fileTypesAndContributionMap":{"functional-code":{"insertions":45,"deletions":22},"other":{"insertions":3,"deletions":3}}},{"hash":"d5be6d4bae825dbb2ba49c20588e7d1ecfaa8f7e","isMergeCommit":false,"messageTitle":"Add FinancialPlannerException","messageBody":"Fixes #8\n","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":0}}},{"hash":"41909a10cf9d822fabd58091788fa8d898615517","isMergeCommit":false,"messageTitle":"Add Parser, add \u0027exit\u0027 and \u0027invalid\u0027 command to Parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":67,"deletions":1},"other":{"insertions":1,"deletions":1}}},{"hash":"d926641278054652b6bf5faba4d7a71495ad91b9","isMergeCommit":true,"messageTitle":"Merge pull request #26 from ryan1604/branch-setup","messageBody":"Branch setup","fileTypesAndContributionMap":{}}]},{"date":"2023-10-09","commitResults":[{"hash":"4b7aa80bfe1c46aac6581012cfe57fe4efd37ab2","isMergeCommit":false,"messageTitle":"Update test file and multiple code refactorings","messageBody":"Fixes #34\n","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":26}}},{"hash":"91c6f28655a8d39e1d9b3067075e1ef6c6b3f2c0","isMergeCommit":false,"messageTitle":"Remove unused import in Parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"636fa41f0e93e2a58fac846ff766483ae2845427","isMergeCommit":true,"messageTitle":"Merge pull request #35 from ryan1604/branch-code-quality","messageBody":"Update test file and multiple code refactorings","fileTypesAndContributionMap":{}}]},{"date":"2023-10-10","commitResults":[{"hash":"dfffa4ac58a33413fbc45a1fa59b2d4faed0bcac","isMergeCommit":false,"messageTitle":"Setup storage","messageBody":"Fixes #7\n","fileTypesAndContributionMap":{"functional-code":{"insertions":48,"deletions":0}}},{"hash":"8c328c6af2a61181bc07c1bcf8677e49b31630e8","isMergeCommit":false,"messageTitle":"Add save functionality for income and expense","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":39,"deletions":1}}},{"hash":"75847cd1846bd27dab82dbc0dab5da96cf596d33","isMergeCommit":false,"messageTitle":"Add load functionality and edit EXPECTED.TXT","messageBody":"Fixes #38\n","fileTypesAndContributionMap":{"functional-code":{"insertions":70,"deletions":4}}},{"hash":"95cd96179ef5466fadecdc7027762af2af1e1c43","isMergeCommit":false,"messageTitle":"Add error handling for storage","messageBody":"Fixes #39\n","fileTypesAndContributionMap":{"functional-code":{"insertions":33,"deletions":9}}},{"hash":"b8b88c5b065e937a31978ae306c56d41a2b75706","isMergeCommit":false,"messageTitle":"Update catch block in main","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":4}}},{"hash":"0eca8f566599608a2dd256f9aef4a8147595722f","isMergeCommit":false,"messageTitle":"Add in \u0027run\u0027 method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":3}}},{"hash":"91787a92b2a4b4ba60fcbd4762f03d583cf55720","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-storage","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/utils/Ui.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-10-11","commitResults":[{"hash":"cfd188be4932c9db8da02c85f943ba2c26a2e5aa","isMergeCommit":true,"messageTitle":"Merge pull request #40 from ryan1604/branch-storage","messageBody":"Add storage","fileTypesAndContributionMap":{}}]},{"date":"2023-10-12","commitResults":[{"hash":"3501ede398172c065fabdf26f4e4706df23686c9","isMergeCommit":false,"messageTitle":"Add storage test for loading valid data","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":17},"test-code":{"insertions":29,"deletions":0}}}]},{"date":"2023-10-13","commitResults":[{"hash":"a61e59da1fb118eb86fdedbbafcb124bfef873a5","isMergeCommit":false,"messageTitle":"Add storage test for:","messageBody":"- load invalid data\n- save valid data\n- save non-existent file\n\nFixes #46\n","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":19},"test-code":{"insertions":37,"deletions":1}}},{"hash":"d048f440dbb5e3fe9617dda4c50edab3904307c3","isMergeCommit":false,"messageTitle":"Follow coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"test-code":{"insertions":1,"deletions":1}}},{"hash":"6bdf7e453019f8b40fb962822b1db0652308ce57","isMergeCommit":false,"messageTitle":"Rename data to testData folder","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":3}}},{"hash":"398fc42b1fc6bee7ca4825f966ddfd61fb400eef","isMergeCommit":true,"messageTitle":"Merge pull request #48 from ryan1604/branch-JUnit","messageBody":"Junit tests for storage","fileTypesAndContributionMap":{}},{"hash":"1c81748388c8834d4ad2125d39dbb70a8e192d51","isMergeCommit":false,"messageTitle":"Make objects private in test classes","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":5,"deletions":5}}},{"hash":"09c4f10ef1b93b7d4006e4e9ee8e7530db81438c","isMergeCommit":false,"messageTitle":"Clears list at the end of method","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":0}}},{"hash":"b6f7a7cbb9a8fd3b9830aa4aebd3d360bbf5f6d3","isMergeCommit":false,"messageTitle":"Undo clearing of list and set cashflow balance to 0 in testAddIncomeAndExpense","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":3}}},{"hash":"1437d9a753198822b0f8c0881ee6858194829c66","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"653b5feac428aa3eb4a8799b199ad6fc937cb2d4","isMergeCommit":true,"messageTitle":"Merge pull request #49 from ryan1604/branch-JUnit-2","messageBody":"Fix CI failing","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"28cfe5345285e27661812b3a3a21ff1dafebf0af","isMergeCommit":false,"messageTitle":"Add Budget class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":0}}},{"hash":"f166d899d4192414e397be9695f7ab466ed91ceb","isMergeCommit":false,"messageTitle":"Add BudgetCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":32,"deletions":0}}},{"hash":"5acc2f839e4007ad39ee4fbb069e023c00456cfc","isMergeCommit":false,"messageTitle":"Add setBudget to FinancialList and update test files","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0}}},{"hash":"0ca7eeac266bc0a105ef37e9c58e1834f5d25850","isMergeCommit":false,"messageTitle":"Add overview command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":0}}},{"hash":"ff40a9b9b08d48c6dbcb89fb637fa403e8f9f89c","isMergeCommit":false,"messageTitle":"Update overview to show:","messageBody":"- Total balance\n- Highest income\n- Highest expense\n- Watchlist\n\nFixes #29\n","fileTypesAndContributionMap":{"functional-code":{"insertions":46,"deletions":2}}},{"hash":"1c099725de56ae0fe7476dd7294229998340ed16","isMergeCommit":false,"messageTitle":"Edit setBudget method in FinancialList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":5}}}]},{"date":"2023-10-16","commitResults":[{"hash":"3e1db303a86296ac9eea5229d4af38e65b6ee86a","isMergeCommit":true,"messageTitle":"Merge pull request #70 from YFshadaow/branch-refactor-command-parse-logic","messageBody":"Refactor code: Restructure command parse logic","fileTypesAndContributionMap":{}},{"hash":"e197a46699b33e0ee4f1c0158d32d24edd8e0fe1","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-budget","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n#\ttext-ui-test/input.txt\n","fileTypesAndContributionMap":{}},{"hash":"9790808efd401a0add9b17e445f73e792823dbca","isMergeCommit":false,"messageTitle":"Add storage and exceptions for budget","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":24}}},{"hash":"b6a93fdf77d18006ed5b8af749def38bc5b1a6b1","isMergeCommit":false,"messageTitle":"Update Budget","messageBody":"Fixes #59\n","fileTypesAndContributionMap":{"functional-code":{"insertions":90,"deletions":50}}},{"hash":"7dc589fac79d029a9161b1e73f9dd6c09b230cff","isMergeCommit":false,"messageTitle":"Update budget when new expense is added","messageBody":"Fixes #60\n","fileTypesAndContributionMap":{"functional-code":{"insertions":30,"deletions":4}}},{"hash":"aa68bb059f3bf8201c0830bd13a714577428adbd","isMergeCommit":false,"messageTitle":"Add ability to update budget","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":72,"deletions":39}}},{"hash":"4a25982c9f7dea52d0d5b50b0b9ed4c6da622a22","isMergeCommit":false,"messageTitle":"Update test files and format printing of double to 2d.p","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":6}}},{"hash":"8ff7b412958e60cf34968d32ce1d8b2e0a17d58c","isMergeCommit":false,"messageTitle":"Add JUnit tests for Budget and update ValidData.txt","messageBody":"Fixes #73\n","fileTypesAndContributionMap":{"test-code":{"insertions":42,"deletions":0}}},{"hash":"6bfd86e9bf988f2b31c9683606facdc1550f2475","isMergeCommit":false,"messageTitle":"Update code to follow coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":1},"test-code":{"insertions":0,"deletions":1}}},{"hash":"c45bba6e16e98a3ca9c500a5ec64c598ec444c49","isMergeCommit":false,"messageTitle":"Remove redundant get() and size() methods in cashFlowList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":11}}},{"hash":"e417fcac442470226432184427bd86a06da278f7","isMergeCommit":false,"messageTitle":"Update error handling for update budget","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"89d5babd83af99396efcc453995b7002edf6f988","isMergeCommit":false,"messageTitle":"Standardise case statements","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":16}}},{"hash":"f5a16724e320f6246beb2eff33076b79661cb44b","isMergeCommit":true,"messageTitle":"Merge pull request #57 from ryan1604/branch-budget","messageBody":"Add budget functionality","fileTypesAndContributionMap":{}},{"hash":"c73982cb0a6c78b95ec5f1e30e7fdf6213da690b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-overview","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"ab2f4ada4e7927c3e547ff23c80429d5fa018a85","isMergeCommit":false,"messageTitle":"Update overview command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":24}}},{"hash":"75d7c453aa561d32dc04f507920e91866cd3cd42","isMergeCommit":false,"messageTitle":"Refactor code in budget and overview","messageBody":"Fixes #29\n","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":16}}},{"hash":"8e970f586211c98a67104e2e5e60c1467290283f","isMergeCommit":false,"messageTitle":"Fix bug in loading storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":7}}},{"hash":"3574b3c588bb57865216155149965ac36741d658","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-overview","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"01fbdd18f50dc01d6273bb8ae0f716d76658c798","isMergeCommit":false,"messageTitle":"Update error handling for budget","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":0}}},{"hash":"b33a0c71e3a82cedd3deac14b53ee8c881b63934","isMergeCommit":false,"messageTitle":"Refactor code:","messageBody":"- Refactor formatting of double to string\n- Reduce nesting in overviewcommand\n- Clean up code\n","fileTypesAndContributionMap":{"functional-code":{"insertions":38,"deletions":27}}}]},{"date":"2023-10-17","commitResults":[{"hash":"f46a0628faea24ba86aaa54141916d104fbe1f3a","isMergeCommit":false,"messageTitle":"Add logger storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":0}}},{"hash":"3705db0f6ea636d00d7f362a21c577710a687ccf","isMergeCommit":false,"messageTitle":"Enable assertions","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":0}}},{"hash":"b10f74a3137f0b43f7a486e06506a6cc47ba5ae1","isMergeCommit":false,"messageTitle":"Add logging and assertions for budget","messageBody":"Fixes #87\n","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":0}}},{"hash":"5b25ce5873e76f7c67e8c61128f2ef939c22f7f7","isMergeCommit":false,"messageTitle":"Update warning message in logger","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"1f63d6e938171d41ab2214df06a989a882819fe7","isMergeCommit":false,"messageTitle":"Add error handling and standardise logging","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":5}}},{"hash":"c97daf2496479364271d54c2da1b3e6466e9fa8c","isMergeCommit":false,"messageTitle":"Extract print statement to Ui","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":8}}},{"hash":"324016184917721a91fc9b91fcb06c0eb783ef89","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-overview","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"6bf095c5e50f765fd3765a3a7fd859ecbc01591b","isMergeCommit":true,"messageTitle":"Merge pull request #58 from ryan1604/branch-overview","messageBody":"Add overview functionality","fileTypesAndContributionMap":{}},{"hash":"df007a1a9b2bc34f17c112cefc2cf3eea948896a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-logger","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/commands/BudgetCommand.java\n","fileTypesAndContributionMap":{}},{"hash":"19dcfc60b44a315ae74f99f0b8cf12b161ce7d81","isMergeCommit":false,"messageTitle":"Add error handling for budget","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":4}}},{"hash":"446763c7940b0fb0237c2ac6b976bec1c9d1156b","isMergeCommit":true,"messageTitle":"Merge pull request #91 from ryan1604/branch-logger","messageBody":"Add logging and assertions for BudgetCommand","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"f4bb78cbbff71e0d1074ca5c73a2173463dea77e","isMergeCommit":false,"messageTitle":"Remove logger from showing on terminal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":0}}},{"hash":"c0ecc3c340179354b78b359112397dc30790f305","isMergeCommit":true,"messageTitle":"Merge pull request #95 from ryan1604/branch-logger","messageBody":"Remove logger from showing on terminal","fileTypesAndContributionMap":{}}]}],"YFshadaow":[{"date":"2023-10-13","commitResults":[{"hash":"7828ae3395aae5d90d22f6743b43b03445b289a9","isMergeCommit":false,"messageTitle":"Refactor code: Use singleton instead","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":38},"test-code":{"insertions":15,"deletions":15}}},{"hash":"a126234d9b789bbeb6ac1ed4def47833d3356e48","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"89366d90a98581607b043727aa7a8eaf05227920","isMergeCommit":true,"messageTitle":"Merge pull request #50 from YFshadaow/master","messageBody":"Refactor code: Use singleton instead","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"a7b5722ca73a4b15a5c0e25b783a9fb827b30f28","isMergeCommit":false,"messageTitle":"Refactor code: Restructure command parse logic","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":254,"deletions":151},"other":{"insertions":21,"deletions":14},"test-code":{"insertions":9,"deletions":9}}}]},{"date":"2023-10-16","commitResults":[{"hash":"7ed9cafa3c7bd26a4641c1ec66c018e371c42434","isMergeCommit":false,"messageTitle":"Update code to pass style checks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":43,"deletions":26}}},{"hash":"28dd7ef23c898f7c9a91969a499e1463e6f12b2e","isMergeCommit":false,"messageTitle":"Update test files","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":32,"deletions":24},"other":{"insertions":7,"deletions":5},"test-code":{"insertions":29,"deletions":21}}},{"hash":"989068feb2dd79c2e54c25b3b6d3965507ea1cef","isMergeCommit":false,"messageTitle":"Add list commands. Minor changes include: - Remove EMPTY cash flow category - Refactor delete command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":90,"deletions":16}}},{"hash":"76ef2f72103f0f0e994d3cb8440b4bd9775feaf0","isMergeCommit":false,"messageTitle":"Minor change: Remove redundant else block","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}}]},{"date":"2023-10-18","commitResults":[{"hash":"1c5bad2c052f99ee730902c95ee31b39655aa240","isMergeCommit":true,"messageTitle":"Resolve merge conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2a7a8aa2c20b6fb8e871c81322c8d3c5f42fc4fc","isMergeCommit":false,"messageTitle":"Fix style error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"b0110338046a582dea04a00eb12c6ff4ab682574","isMergeCommit":true,"messageTitle":"Merge pull request #89 from YFshadaow/branch-list-command","messageBody":"Add list command","tags":["v1.0"],"fileTypesAndContributionMap":{}}]}],"hshiah":[{"date":"2023-10-05","commitResults":[{"hash":"f4e110ae257a2d4b5945b76e92c4f67b53a9b9c9","isMergeCommit":false,"messageTitle":"Test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"483fb3d416dea3f0ae1999b544aaa379f9eb6575","isMergeCommit":true,"messageTitle":"Merge pull request #4 from hshiah/hshiah","messageBody":"Shi,Haochen","fileTypesAndContributionMap":{}}]},{"date":"2023-10-12","commitResults":[{"hash":"22508414ff64c714b8c24237a8ab30432ade3775","isMergeCommit":false,"messageTitle":"implement function find","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":66,"deletions":0}}},{"hash":"8553ea5738eaa15aacfd028fd0832607330e3a48","isMergeCommit":true,"messageTitle":"Merge pull request #45 from hshiah/master","messageBody":"implement function find","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"2c4321ec694fab448316d4670acb2409d60896d6","isMergeCommit":false,"messageTitle":"Add reminder","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":88,"deletions":1}}},{"hash":"436ee1eebba2e020d95e82cdc8089a335fafdcfb","isMergeCommit":true,"messageTitle":"Merge pull request #86 from hshiah/hshiah","messageBody":"Add reminder","fileTypesAndContributionMap":{}},{"hash":"5e6072c3cfd8377d6401e4aa8656c4abf71508fe","isMergeCommit":false,"messageTitle":"Finish setting goals Fix bugs of find command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":87,"deletions":2}}}]},{"date":"2023-10-17","commitResults":[{"hash":"401308ac27b8077cd80a9378c8938e2b258ed136","isMergeCommit":false,"messageTitle":"Fix some points mentioned by groupmates","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":27}}},{"hash":"e9a6466bf2b37b67c9b63997e1fc4c3a042688ff","isMergeCommit":false,"messageTitle":"Solve conflict","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":11}}},{"hash":"835cc572869e4c70387ca9ba0e5bc42721c228d9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into hshiah","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f87a53b2a70f909bafc095d6c425d023c4e5c8e9","isMergeCommit":false,"messageTitle":"Delete getValue function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":6}}},{"hash":"cd9ad14c299d2642e1d7737dc8e675d7b4cee4a3","isMergeCommit":true,"messageTitle":"Merge pull request #88 from hshiah/hshiah","messageBody":"Finish setting goals","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"wwweert123":{"docs":6,"functional-code":437,"test-code":29,"other":3},"NeoMinWei":{"docs":4,"functional-code":398,"test-code":101},"ryan1604":{"docs":1,"functional-code":547,"test-code":86,"other":2},"YFshadaow":{"docs":0,"functional-code":348,"test-code":44},"hshiah":{"docs":0,"functional-code":209,"test-code":0}},"authorContributionVariance":{"wwweert123":4583.2954,"NeoMinWei":12698.389,"ryan1604":16128.023,"YFshadaow":10396.364,"hshiah":1374.5048},"authorDisplayNameMap":{"wwweert123":"CS2113-T18-2 PUA ..RICK","NeoMinWei":"CS2113-T18-2 NEO .. WEI","ryan1604":"CS2113-T18-2 CHUA..RYAN","YFshadaow":"CS2113-T18-2 REN ..GDAO","hshiah":"CS2113-T18-2 SHI ..CHEN"}} +{"authorDailyContributionsMap":{"wwweert123":[{"date":"2023-10-05","commitResults":[{"hash":"491c9238e3c2b52f8ddaa10ba332e9566a8b7e9e","isMergeCommit":false,"messageTitle":"Add aboutus links and add my my own md file","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":12,"deletions":7}}},{"hash":"2712d42c6b6d4552c9a0ea7bcc75de166bdf1546","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp into Frederick-AboutUs","messageBody":"# Conflicts:\n#\tdocs/AboutUs.md\n","fileTypesAndContributionMap":{}},{"hash":"11db7a69a38c31d6f7658163f69ac8726f80a0b0","isMergeCommit":true,"messageTitle":"Merge pull request #3 from wwweert123/Frederick-AboutUs","messageBody":"Add aboutus links and add my my own md file","fileTypesAndContributionMap":{}}]},{"date":"2023-10-08","commitResults":[{"hash":"68d635974b5493f20ba1ffaa1b953cf0b798a5ae","isMergeCommit":false,"messageTitle":"Add new watchlist command and pull from FMP api for stock data","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":0}}},{"hash":"5f7d5ba1fafae93224d2ae0559edae789e3747bd","isMergeCommit":false,"messageTitle":"Add simple JSON library to parse response body and print to UI","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":1},"other":{"insertions":1,"deletions":0}}},{"hash":"bfa75c44ff77cc7824fb4a072c8d4a8e94a19e09","isMergeCommit":false,"messageTitle":"Use string format to create request URI","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":2}}},{"hash":"d5ac9fceb7e20c02055b08cff4c73c88830bb993","isMergeCommit":false,"messageTitle":"Add a stock class and have the watchlist query API endpoint using stock classes created","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":87,"deletions":2}}},{"hash":"66c6dc6ad21cbde9abe158bb32b30160a572021d","isMergeCommit":false,"messageTitle":"Add commons lang library to allow for padding of string when printing","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":7},"other":{"insertions":1,"deletions":0}}}]},{"date":"2023-10-09","commitResults":[{"hash":"9a32030207906b044fd774d1afcc8768c2f52b51","isMergeCommit":false,"messageTitle":"Create a watchlist class to reference stocks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":0},"other":{"insertions":12,"deletions":35}}},{"hash":"a311199b47d9c35e55f5509eaba762545283cd61","isMergeCommit":false,"messageTitle":"Create method in UI to print stock prices","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":0}}},{"hash":"84fb7092fb5158ab4e8aeb7b0e00b521bdd981df","isMergeCommit":false,"messageTitle":"Add watchlist parameter to execute","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":6}}},{"hash":"2977b5bb71d186cf5ba1d7e15eb4c59e029f88c3","isMergeCommit":false,"messageTitle":"Initialize watchlist on startup","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":1}}},{"hash":"df5605a78870802546be8dc5b852348e41405f8c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into FrederickWatchlist","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/FinancialPlanner.java\n#\tsrc/main/java/seedu/financialplanner/commands/Command.java\n#\tsrc/main/java/seedu/financialplanner/commands/Exit.java\n#\tsrc/main/java/seedu/financialplanner/commands/Invalid.java\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"74e0b77d800eb36b21b1534bb75611548d2b2164","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":16}}},{"hash":"fab0ae11bdae69d18f598f87848130409af67551","isMergeCommit":true,"messageTitle":"Merge pull request #33 from wwweert123/FrederickWatchlist","messageBody":"Frederick watchlist","fileTypesAndContributionMap":{}},{"hash":"a778bb54cf3c686fc074b019c292a87b7beeb3dd","isMergeCommit":false,"messageTitle":"Add command for adding stock to watchlist","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":67,"deletions":5}}},{"hash":"bece3c1c0e553317e4fa0715467f3a782b274f1c","isMergeCommit":false,"messageTitle":"Add some minor error handling for response from API endpoint","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":9}}}]},{"date":"2023-10-10","commitResults":[{"hash":"c6df4b251e96eda6f8271f3b1c9d4a7c8c5cd6f3","isMergeCommit":true,"messageTitle":"Merge pull request #37 from wwweert123/FrederickAddStock","messageBody":"Frederick add stock","fileTypesAndContributionMap":{}}]},{"date":"2023-10-12","commitResults":[{"hash":"bef5bea11ba3f9ee327b12830092670706eb6c8c","isMergeCommit":false,"messageTitle":"Add testcases for addstock and fetchFMPStockPrices","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":31,"deletions":0}}},{"hash":"92df6fe7a3c18bfd7283694eafeee6fb0e82f070","isMergeCommit":false,"messageTitle":"Fix Code styles","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":3}}},{"hash":"1afcc973197329792f60e23295c485d963590453","isMergeCommit":false,"messageTitle":"Fix imports","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":0}}},{"hash":"5471bf86202514018adf0251d3811de39949cdde","isMergeCommit":true,"messageTitle":"Merge pull request #44 from wwweert123/JUnitWatchlist","messageBody":"Add testcases for addstock and fetchFMPStockPrices","fileTypesAndContributionMap":{}}]},{"date":"2023-10-13","commitResults":[{"hash":"00f4c3f960e81461c36262c92bbd2dfa2a9d8541","isMergeCommit":false,"messageTitle":"Fix bug by changing api endpoint and changing api key","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":21},"test-code":{"insertions":1,"deletions":1}}},{"hash":"52856fb2cda836fc593956eca93d3d2e7cab04ea","isMergeCommit":true,"messageTitle":"Merge pull request #52 from wwweert123/FrederickStockAPIChange","messageBody":"Fix bug by changing api endpoint and changing api key","fileTypesAndContributionMap":{}},{"hash":"f4935d893db62558f2c75ebdddd419e7b39f15b6","isMergeCommit":false,"messageTitle":"Fix test and remove market from add stock","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":3}}},{"hash":"0782c150bb1bb098038134bdbf37d56e35bee902","isMergeCommit":true,"messageTitle":"Merge pull request #53 from wwweert123/FrederickStockAPIChange","messageBody":"Fix test and remove market from add stock","fileTypesAndContributionMap":{}},{"hash":"acb5bdbfd096302f98eea97c01f4a6e360c1395b","isMergeCommit":false,"messageTitle":"Fix bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1},"test-code":{"insertions":1,"deletions":1}}},{"hash":"da1f2d50202a960b187bbbebcf4514c9aa128d68","isMergeCommit":true,"messageTitle":"Merge pull request #54 from wwweert123/FrederickStockAPIChange","messageBody":"Fix bug","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"7d495e4009402389b717de162fc78f288ba88fc1","isMergeCommit":false,"messageTitle":"Add new dependency for creating data plots and test it","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":39,"deletions":1},"other":{"insertions":1,"deletions":0}}},{"hash":"763e137a04d856abc406e8795f0bf5f91d904d1e","isMergeCommit":false,"messageTitle":"Remove unnecessary classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":31}}},{"hash":"d03b9438f621db15a83610c3ce199c6ee840675c","isMergeCommit":false,"messageTitle":"Add getters for cashflow type and value","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":3}}},{"hash":"4fc4df2db821fb4d8cdd5f3eb3093400f5e0d297","isMergeCommit":false,"messageTitle":"Add vis command to the parser class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":10}}},{"hash":"7f31985cd4ae39b8944d2df5d424aad1616742c0","isMergeCommit":false,"messageTitle":"Add categorizer utility class to sort expenses or income entry based on type","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":0}}},{"hash":"afc246440d8eca06ede599770fa363a0a5549f3e","isMergeCommit":false,"messageTitle":"Add visualizer class to visualize data in bar graph or pie chart","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":69,"deletions":0}}},{"hash":"8631e18975c8beabae651b826d9c0a6a6a798aeb","isMergeCommit":false,"messageTitle":"Fix Import","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":1}}}]},{"date":"2023-10-16","commitResults":[{"hash":"7fe6dc007f9a4c50dd6d6e431834641688608bd3","isMergeCommit":false,"messageTitle":"Fix code style issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":10}}},{"hash":"68fc9ae55171009c217fc93e846fa88e4c0b913a","isMergeCommit":false,"messageTitle":"Fix identation in visualizer","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":5}}},{"hash":"42b5794f6f94595b399e3e97640cd986e617d529","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into FrederickVisualisation","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/list/CashflowList.java\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"c689389905882a16a1e1aa27a4fbfd4936ba22a3","isMergeCommit":false,"messageTitle":"Remove dead code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":7}}},{"hash":"f97b44048a9b7b92fcb0abbd4ca91161a7d965f5","isMergeCommit":false,"messageTitle":"Add functionality to do visualization for both income and expense","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":3}}},{"hash":"671802cad084f4b455b79718f5de9dd35ec9f322","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into FrederickVisualisation","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"2a0a2fb3bf353c2ec7d9faf9f4b26be38addb9cb","isMergeCommit":false,"messageTitle":"Fix code style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"9b0642a136c10c64880e1c6e3d7f7ad74c46c4b5","isMergeCommit":true,"messageTitle":"Merge pull request #69 from wwweert123/FrederickVisualisation","messageBody":"Frederick visualisation","fileTypesAndContributionMap":{}},{"hash":"4c12a33358390c7833882cb4ff8856c639a0e0d9","isMergeCommit":false,"messageTitle":"Add logger for visualizer and categorizer class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":1}}}]},{"date":"2023-10-17","commitResults":[{"hash":"d37e2a293714b82b7d9f79e06cecb35599196bce","isMergeCommit":false,"messageTitle":"Add logging for Vis Command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":2}}},{"hash":"c7897b1d61ad607722a0af7243c2c0412cbb6074","isMergeCommit":false,"messageTitle":"Add assert for visualizations related classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":6}}},{"hash":"a3dd93f6e66d04efcc7f61d57df01c3e05772535","isMergeCommit":false,"messageTitle":"Fix error in check style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}}]},{"date":"2023-10-18","commitResults":[{"hash":"793ce105ddb0c8508ec605fe40f273cd5b4cce5d","isMergeCommit":true,"messageTitle":"Merge pull request #93 from wwweert123/LoggingAssertVis","messageBody":"Logging assert vis","fileTypesAndContributionMap":{}},{"hash":"5562991591bfeb1bc8e0cf33b9e4d9ef55ee5a11","isMergeCommit":false,"messageTitle":"Add logging and assert for watchlist command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":0}}},{"hash":"3de6f7e633a56dea1df03c9b4daf3a112a6212c3","isMergeCommit":false,"messageTitle":"Add logging and assert to AddStockCommand, Stock and Watchlist","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":0}}},{"hash":"1659e06bfa224f44344d3c005cf878e12c8adaf8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into LoggingAssertWatchlist","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/investments/WatchList.java\n","fileTypesAndContributionMap":{}},{"hash":"8d06dc08254699a08a4fff6922f9b7194c4a1dbb","isMergeCommit":false,"messageTitle":"Fix checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"15f9d47404e37efa56d679a640a19715f6fb9b83","isMergeCommit":false,"messageTitle":"Add handling for API limit reach and logging in constructor fix","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":2}}},{"hash":"0ee9efd58624b16160b1d2427a129cc636383756","isMergeCommit":false,"messageTitle":"Standardize logging","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"6161f6a7773821576d303d4690b81263e271d4dc","isMergeCommit":false,"messageTitle":"Remove commented code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"2d3e1047a9e7c595813b65c80728e187227dbcd5","isMergeCommit":true,"messageTitle":"Merge pull request #94 from wwweert123/LoggingAssertWatchlist","messageBody":"Logging assert watchlist","fileTypesAndContributionMap":{}}]}],"NeoMinWei":[{"date":"2023-10-05","commitResults":[{"hash":"4f47ae40234b912a4c5b7dc60382509629d101a3","isMergeCommit":false,"messageTitle":"Add name to AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":8,"deletions":8}}},{"hash":"f2c1d37c4806aa17f190a32959ef65e5687b4aee","isMergeCommit":true,"messageTitle":"Merge pull request #1 from ryan1604/ryanChua-AboutUs","messageBody":"Update AboutUs","fileTypesAndContributionMap":{}},{"hash":"2c62d715ae126cdd37eb029c1637b350c38be6de","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp into NeoMinWei-AboutUs","messageBody":"# Conflicts:\n#\tdocs/AboutUs.md\n","fileTypesAndContributionMap":{}},{"hash":"22503c3b8de7c4b1a38b85131f14e6b63162ded7","isMergeCommit":true,"messageTitle":"Merge pull request #2 from NeoMinWei/NeoMinWei-AboutUs","messageBody":"Add name to AboutUs","fileTypesAndContributionMap":{}},{"hash":"068afbff53a8490ae4d79d8b323ea58f34470cf9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-08","commitResults":[{"hash":"df39139c6b034e42f46f335dcc8064168ac563aa","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2d7049b261c1db9ee9b2fd302da80eac4f32b989","isMergeCommit":false,"messageTitle":"Create cashflow and income classes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":33,"deletions":0}}},{"hash":"f8e310a44b9827b00635f829dd8d1fd8a11224e9","isMergeCommit":false,"messageTitle":"Create ArrayList to store entries","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":0}}},{"hash":"ae8527bbe3908a49eee3eeba95bb39a9778f275b","isMergeCommit":false,"messageTitle":"Add ability to add income to the ArrayList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":2}}},{"hash":"c09c55e2fbf921cb8794c0eac6512dbc9b291f2a","isMergeCommit":false,"messageTitle":"Add ability to add income through user input","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":60,"deletions":5}}},{"hash":"17fea1ee0b01d0acd6fa797bca86c66770974214","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":5}}},{"hash":"d5200ef10bf45e451d5057995598577e58195500","isMergeCommit":false,"messageTitle":"Add rounding of double values to 2 decimal places","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":2}}},{"hash":"c9daed435f0538014db06c642d487427e73b1ac8","isMergeCommit":false,"messageTitle":"Add expense class and ability to add expense through user input","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":26,"deletions":3}}},{"hash":"26b06f9c92c6a293c902d83d8de8f4fa7434c443","isMergeCommit":false,"messageTitle":"Fix bug of not recognising description of parameters","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":7}}},{"hash":"9e54041da9ee4d502cf0869ecbf0f32571491295","isMergeCommit":true,"messageTitle":"Merge pull request #32 from NeoMinWei/branch-income","messageBody":"Add Income and Expense","fileTypesAndContributionMap":{}},{"hash":"08684d0c749a38b97d55e31a5bf525fded9a7136","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-12","commitResults":[{"hash":"699cb40438315f404663b969d8a7e9330fa58887","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"62d46f719a6d2b1a8b804ac1a54b3ef6cc03b943","isMergeCommit":false,"messageTitle":"Add JUnit tests for addIncome() and addExpense()","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"test-code":{"insertions":56,"deletions":0}}},{"hash":"9dfd51ea57f7888e0c8eac32cc354313950d3c0c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp into Branch-JUnit","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-13","commitResults":[{"hash":"c9fa29cd6aa140362bfaacdf93ae5c98b7ddf5b0","isMergeCommit":false,"messageTitle":"Add JUnit test for execute() in Entry","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":5},"test-code":{"insertions":29,"deletions":0}}},{"hash":"7e7c94aa80486995c938dc65216cb96d1b290fcc","isMergeCommit":true,"messageTitle":"Merge pull request #47 from NeoMinWei/Branch-JUnit","messageBody":"JUnit for addIncome and addExpense and execute","fileTypesAndContributionMap":{}},{"hash":"1c88d2ac4c68c1d9f7335cc5beb4b858e966467f","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2990de0cc5378b9586045413ccd2bb3a8a259ff9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"fe1b5953d0fd0d3767e5ed5a5ce7f748651598ba","isMergeCommit":false,"messageTitle":"Rename FinancialList to CashflowList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":37,"deletions":32},"other":{"insertions":24,"deletions":6},"test-code":{"insertions":12,"deletions":12}}},{"hash":"2be22452273938923c4666e0b1af0c17acfca335","isMergeCommit":false,"messageTitle":"Add toString method in Cashflow","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":54,"deletions":12},"test-code":{"insertions":8,"deletions":8}}},{"hash":"73b1c64059a1ea52fcd4bac81d45be61ce1c621e","isMergeCommit":false,"messageTitle":"Add printAddedCashflow and printDeletedCashflow methods to Ui","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":2}}},{"hash":"7f0ff6575178c82185acd34370ed280d0ff9c9bb","isMergeCommit":false,"messageTitle":"Rename Entry class to AddCashflowCommand class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":1},"other":{"insertions":6,"deletions":6}}},{"hash":"93058ea23bd016c655986c6368673c965819d4e8","isMergeCommit":false,"messageTitle":"Rename Entry class to AddCashflowCommand class","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":4,"deletions":4}}},{"hash":"b8d5f995f6592fbb2e9a0f5f9525bf27f82b527c","isMergeCommit":false,"messageTitle":"Extract parsing method from AddCashflowCommand class to Parser class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":39,"deletions":28},"test-code":{"insertions":0,"deletions":29}}},{"hash":"ef33866779c2999ab88f18d234af45c1ae46cf1c","isMergeCommit":false,"messageTitle":"Rename list to cashflowList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"6b30cdad90948467b5fe2cd12651aa04467304a5","isMergeCommit":false,"messageTitle":"Add delete income/expense functionality","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":128,"deletions":49}}},{"hash":"38dbc030b566522fd0f329ba247221284b2ed4af","isMergeCommit":false,"messageTitle":"Add JUnit testing","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3},"test-code":{"insertions":31,"deletions":8}}}]},{"date":"2023-10-16","commitResults":[{"hash":"781779dca09f480fe69d15dcdfcbd955af8c56d6","isMergeCommit":false,"messageTitle":"Delete unused constructor","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":5}}},{"hash":"20be5d31d905fc8458bc03b5bbe07a43b69cda7a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"372f730c17048dbfeef6a9573a4eb1178755f724","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Branch-DeleteIncome","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/FinancialPlanner.java\n#\tsrc/main/java/seedu/financialplanner/commands/AddStockCommand.java\n#\tsrc/main/java/seedu/financialplanner/commands/Command.java\n#\tsrc/main/java/seedu/financialplanner/commands/Exit.java\n#\tsrc/main/java/seedu/financialplanner/commands/Find.java\n#\tsrc/main/java/seedu/financialplanner/commands/Invalid.java\n#\tsrc/main/java/seedu/financialplanner/commands/WatchListCommand.java\n#\tsrc/main/java/seedu/financialplanner/list/CashflowList.java\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n#\tsrc/test/java/seedu/financialplanner/commands/EntryTest.java\n#\tsrc/test/java/seedu/financialplanner/storage/StorageTest.java\n#\ttext-ui-test/input.txt\n","fileTypesAndContributionMap":{}},{"hash":"7084894811134dccb133b5b495c4bc0c0c96c9ea","isMergeCommit":false,"messageTitle":"Wrap line to reduce line length","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":3,"deletions":2}}},{"hash":"2c874bb132ea38c1bef7df1c6d9b8ebdf8fdeb93","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"756fefab390978a479cca40dd1df6931800d245d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Branch-DeleteIncome","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/commands/AddCashflowCommand.java\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"1f0dd2ff73b0f8937c646a97b15280bbf1a4962f","isMergeCommit":false,"messageTitle":"Resolve renaming issues","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":6,"deletions":6}}},{"hash":"0091535cb31b76adf7958cd54d4d4feac1048ab0","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f5624bbdb0c6339bb71fc19b4ba56fb8b948be05","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Branch-DeleteIncome","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/list/Cashflow.java\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"e9cd0d0fb2b11f8f93a515a31a980110d30f6597","isMergeCommit":true,"messageTitle":"Merge pull request #71 from NeoMinWei/Branch-DeleteIncome","messageBody":"Delete income and expense","fileTypesAndContributionMap":{}},{"hash":"77f97a183a9dad909f9a74bbf3755ca8ff7df89e","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"61401f04364506993e3ba06fa4e9d52d9a4669a0","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7d8d56d6e6c99dc005c3d68649bf6960d65284d2","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Branch-DeleteBugFix","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c39094ff72f2ff8fa468ec804cd3dfb3016fe480","isMergeCommit":false,"messageTitle":"Fix bug where wrong message is showing for error handling and when user inputs delete 0","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":4}}},{"hash":"169a0adc623031468978ad883a41a8862150d138","isMergeCommit":false,"messageTitle":"Add assertions for AddCashflowCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":0}}},{"hash":"c32e4c62168dba8284fb862f1bdcebd8ceaad008","isMergeCommit":false,"messageTitle":"Add error handling for empty type string","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":2}}},{"hash":"ffe8271a4dc18b4c8b4490697931915343ac4c08","isMergeCommit":false,"messageTitle":"Revert \"Add error handling for empty type string\"","messageBody":"This reverts commit c32e4c62168dba8284fb862f1bdcebd8ceaad008.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":14}}},{"hash":"6bcfea610b1d4ff267638f51777a3095c2f4686b","isMergeCommit":false,"messageTitle":"Add error handling of negative amount and recur value and empty type string","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":2}}},{"hash":"6124a059151ca2174be69affe593633855519e0e","isMergeCommit":false,"messageTitle":"Add assertions for DeleteCashflowCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"6ddac1f153c6f64db63f72da8612452b2573fbec","isMergeCommit":false,"messageTitle":"Add assertions to CashflowList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":2}}},{"hash":"2b845eaedab4f7b60b6c49cd14788b0880ad0e4f","isMergeCommit":false,"messageTitle":"Change message shown when recurring value is negative","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}}]},{"date":"2023-10-17","commitResults":[{"hash":"b3e0e452479fb4240679bab91046264ca2ea19d8","isMergeCommit":true,"messageTitle":"Merge pull request #90 from NeoMinWei/Branch-DeleteBugFix","messageBody":"Branch delete bug fix","fileTypesAndContributionMap":{}},{"hash":"2d9688e30c0c074ef4147b14a5ad27494ce48506","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7adc4fbbec1014c742e32d1388eb3106eb1d2060","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Branch-LogAndAssert","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"02fdad409ee5ae84faed74f3dbab5b53fca89bda","isMergeCommit":false,"messageTitle":"Add logging for AddCashflowCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":0}}},{"hash":"951cab2e9360ac30ec87e1a28343e9ed0942a20d","isMergeCommit":false,"messageTitle":"Add logging for DeleteCashflowCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":1}}},{"hash":"37c006a162c8d924bf64485b7c7712e7fbbc1b2e","isMergeCommit":false,"messageTitle":"Add logging for CashflowList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":1}}},{"hash":"93b4095f0b68d6d7f32f1596a8ee627a79bfb05f","isMergeCommit":false,"messageTitle":"Add logging for try statements in DeleteCashflowCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"82e3d8c5fd251bb8e1486bdb6f6c3e95399a0864","isMergeCommit":false,"messageTitle":"Add logging for try statements in AddCashflowCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"54479b36eabc35a3f621e042138e59d445c91f99","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"68bda88f9c684d8c4a4b8b0dc6df61873109a0eb","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Branch-LogAndAssert","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/commands/AddCashflowCommand.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"7c3e3e695bfb2c6af6de09d685d668f1857922bc","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8b673dc53f4e4559f6ae72d819eccce881ee8ff8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Branch-LogAndAssert","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d267f8af00aaf208b518f698d83f5f218937d394","isMergeCommit":true,"messageTitle":"Merge pull request #92 from NeoMinWei/Branch-LogAndAssert","messageBody":"Branch log and assert","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"1c7a198c54a94f55dbd16c1f888835ebe0772fb8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-2/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"99e9427b0418815aefec44af8fe242507e05b5bd","isMergeCommit":false,"messageTitle":"Add getInstance() method for singleton CashflowList class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":17,"deletions":13}}},{"hash":"19547febc66f3905749b7b3e6e9eb27db45ee85f","isMergeCommit":false,"messageTitle":"Add income and expense type enums","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":0}}},{"hash":"2afd67b5f1cd51357312a17c58947cfd71a242be","isMergeCommit":false,"messageTitle":"Add getInstance() method to Ui singleton class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":17,"deletions":10},"test-code":{"insertions":13,"deletions":13}}},{"hash":"25cd60a45336566458b9a16ab9ad66c084aa92ae","isMergeCommit":false,"messageTitle":"Change access to CashflowList and Ui classes to getInstance()","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":13}}},{"hash":"e92ba9b9c5e429c604f141abe33fd05c6d91d23a","isMergeCommit":false,"messageTitle":"Change Income and Expense type from String to enum","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":131,"deletions":50}}},{"hash":"c4e41d83fd1e92fe05a4537f7a569dfb27adaa5d","isMergeCommit":false,"messageTitle":"Update JUnit tests","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":22,"deletions":18}}}]},{"date":"2023-10-23","commitResults":[{"hash":"968f1a0bb09190f2bce3fdb8acfa5dc8963253e0","isMergeCommit":false,"messageTitle":"Add necessities to expensetype enum","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"a1ca760be3ac8d12e7a8ecbfbb780d44a2b86685","isMergeCommit":true,"messageTitle":"Merge pull request #97 from NeoMinWei/Branch-IncomeCategory","messageBody":"Branch income category","fileTypesAndContributionMap":{}}]}],"ryan1604":[{"date":"2023-10-05","commitResults":[{"hash":"eab7be4bcbb2bd13648ec4f347d0278a5b33b3b1","isMergeCommit":false,"messageTitle":"Update AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}}]},{"date":"2023-10-07","commitResults":[{"hash":"e8da8d09f6900bdcf1299dabba13d3177794676f","isMergeCommit":false,"messageTitle":"Setup Ui and rename Duke to FinancialPlanner","messageBody":"Fixes #5\n","fileTypesAndContributionMap":{"functional-code":{"insertions":45,"deletions":22},"other":{"insertions":3,"deletions":3}}},{"hash":"d5be6d4bae825dbb2ba49c20588e7d1ecfaa8f7e","isMergeCommit":false,"messageTitle":"Add FinancialPlannerException","messageBody":"Fixes #8\n","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":0}}},{"hash":"41909a10cf9d822fabd58091788fa8d898615517","isMergeCommit":false,"messageTitle":"Add Parser, add \u0027exit\u0027 and \u0027invalid\u0027 command to Parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":67,"deletions":1},"other":{"insertions":1,"deletions":1}}},{"hash":"d926641278054652b6bf5faba4d7a71495ad91b9","isMergeCommit":true,"messageTitle":"Merge pull request #26 from ryan1604/branch-setup","messageBody":"Branch setup","fileTypesAndContributionMap":{}}]},{"date":"2023-10-09","commitResults":[{"hash":"4b7aa80bfe1c46aac6581012cfe57fe4efd37ab2","isMergeCommit":false,"messageTitle":"Update test file and multiple code refactorings","messageBody":"Fixes #34\n","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":26}}},{"hash":"91c6f28655a8d39e1d9b3067075e1ef6c6b3f2c0","isMergeCommit":false,"messageTitle":"Remove unused import in Parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"636fa41f0e93e2a58fac846ff766483ae2845427","isMergeCommit":true,"messageTitle":"Merge pull request #35 from ryan1604/branch-code-quality","messageBody":"Update test file and multiple code refactorings","fileTypesAndContributionMap":{}}]},{"date":"2023-10-10","commitResults":[{"hash":"dfffa4ac58a33413fbc45a1fa59b2d4faed0bcac","isMergeCommit":false,"messageTitle":"Setup storage","messageBody":"Fixes #7\n","fileTypesAndContributionMap":{"functional-code":{"insertions":48,"deletions":0}}},{"hash":"8c328c6af2a61181bc07c1bcf8677e49b31630e8","isMergeCommit":false,"messageTitle":"Add save functionality for income and expense","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":39,"deletions":1}}},{"hash":"75847cd1846bd27dab82dbc0dab5da96cf596d33","isMergeCommit":false,"messageTitle":"Add load functionality and edit EXPECTED.TXT","messageBody":"Fixes #38\n","fileTypesAndContributionMap":{"functional-code":{"insertions":70,"deletions":4}}},{"hash":"95cd96179ef5466fadecdc7027762af2af1e1c43","isMergeCommit":false,"messageTitle":"Add error handling for storage","messageBody":"Fixes #39\n","fileTypesAndContributionMap":{"functional-code":{"insertions":33,"deletions":9}}},{"hash":"b8b88c5b065e937a31978ae306c56d41a2b75706","isMergeCommit":false,"messageTitle":"Update catch block in main","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":4}}},{"hash":"0eca8f566599608a2dd256f9aef4a8147595722f","isMergeCommit":false,"messageTitle":"Add in \u0027run\u0027 method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":3}}},{"hash":"91787a92b2a4b4ba60fcbd4762f03d583cf55720","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-storage","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/utils/Ui.java\n","fileTypesAndContributionMap":{}}]},{"date":"2023-10-11","commitResults":[{"hash":"cfd188be4932c9db8da02c85f943ba2c26a2e5aa","isMergeCommit":true,"messageTitle":"Merge pull request #40 from ryan1604/branch-storage","messageBody":"Add storage","fileTypesAndContributionMap":{}}]},{"date":"2023-10-12","commitResults":[{"hash":"3501ede398172c065fabdf26f4e4706df23686c9","isMergeCommit":false,"messageTitle":"Add storage test for loading valid data","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":17},"test-code":{"insertions":29,"deletions":0}}}]},{"date":"2023-10-13","commitResults":[{"hash":"a61e59da1fb118eb86fdedbbafcb124bfef873a5","isMergeCommit":false,"messageTitle":"Add storage test for:","messageBody":"- load invalid data\n- save valid data\n- save non-existent file\n\nFixes #46\n","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":19},"test-code":{"insertions":37,"deletions":1}}},{"hash":"d048f440dbb5e3fe9617dda4c50edab3904307c3","isMergeCommit":false,"messageTitle":"Follow coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"test-code":{"insertions":1,"deletions":1}}},{"hash":"6bdf7e453019f8b40fb962822b1db0652308ce57","isMergeCommit":false,"messageTitle":"Rename data to testData folder","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":3,"deletions":3}}},{"hash":"398fc42b1fc6bee7ca4825f966ddfd61fb400eef","isMergeCommit":true,"messageTitle":"Merge pull request #48 from ryan1604/branch-JUnit","messageBody":"Junit tests for storage","fileTypesAndContributionMap":{}},{"hash":"1c81748388c8834d4ad2125d39dbb70a8e192d51","isMergeCommit":false,"messageTitle":"Make objects private in test classes","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":5,"deletions":5}}},{"hash":"09c4f10ef1b93b7d4006e4e9ee8e7530db81438c","isMergeCommit":false,"messageTitle":"Clears list at the end of method","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":0}}},{"hash":"b6f7a7cbb9a8fd3b9830aa4aebd3d360bbf5f6d3","isMergeCommit":false,"messageTitle":"Undo clearing of list and set cashflow balance to 0 in testAddIncomeAndExpense","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":3}}},{"hash":"1437d9a753198822b0f8c0881ee6858194829c66","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"653b5feac428aa3eb4a8799b199ad6fc937cb2d4","isMergeCommit":true,"messageTitle":"Merge pull request #49 from ryan1604/branch-JUnit-2","messageBody":"Fix CI failing","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"28cfe5345285e27661812b3a3a21ff1dafebf0af","isMergeCommit":false,"messageTitle":"Add Budget class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":0}}},{"hash":"f166d899d4192414e397be9695f7ab466ed91ceb","isMergeCommit":false,"messageTitle":"Add BudgetCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":32,"deletions":0}}},{"hash":"5acc2f839e4007ad39ee4fbb069e023c00456cfc","isMergeCommit":false,"messageTitle":"Add setBudget to FinancialList and update test files","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0}}},{"hash":"0ca7eeac266bc0a105ef37e9c58e1834f5d25850","isMergeCommit":false,"messageTitle":"Add overview command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":0}}},{"hash":"ff40a9b9b08d48c6dbcb89fb637fa403e8f9f89c","isMergeCommit":false,"messageTitle":"Update overview to show:","messageBody":"- Total balance\n- Highest income\n- Highest expense\n- Watchlist\n\nFixes #29\n","fileTypesAndContributionMap":{"functional-code":{"insertions":46,"deletions":2}}},{"hash":"1c099725de56ae0fe7476dd7294229998340ed16","isMergeCommit":false,"messageTitle":"Edit setBudget method in FinancialList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":5}}}]},{"date":"2023-10-16","commitResults":[{"hash":"3e1db303a86296ac9eea5229d4af38e65b6ee86a","isMergeCommit":true,"messageTitle":"Merge pull request #70 from YFshadaow/branch-refactor-command-parse-logic","messageBody":"Refactor code: Restructure command parse logic","fileTypesAndContributionMap":{}},{"hash":"e197a46699b33e0ee4f1c0158d32d24edd8e0fe1","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-budget","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n#\ttext-ui-test/input.txt\n","fileTypesAndContributionMap":{}},{"hash":"9790808efd401a0add9b17e445f73e792823dbca","isMergeCommit":false,"messageTitle":"Add storage and exceptions for budget","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":24}}},{"hash":"b6a93fdf77d18006ed5b8af749def38bc5b1a6b1","isMergeCommit":false,"messageTitle":"Update Budget","messageBody":"Fixes #59\n","fileTypesAndContributionMap":{"functional-code":{"insertions":90,"deletions":50}}},{"hash":"7dc589fac79d029a9161b1e73f9dd6c09b230cff","isMergeCommit":false,"messageTitle":"Update budget when new expense is added","messageBody":"Fixes #60\n","fileTypesAndContributionMap":{"functional-code":{"insertions":30,"deletions":4}}},{"hash":"aa68bb059f3bf8201c0830bd13a714577428adbd","isMergeCommit":false,"messageTitle":"Add ability to update budget","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":72,"deletions":39}}},{"hash":"4a25982c9f7dea52d0d5b50b0b9ed4c6da622a22","isMergeCommit":false,"messageTitle":"Update test files and format printing of double to 2d.p","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":6}}},{"hash":"8ff7b412958e60cf34968d32ce1d8b2e0a17d58c","isMergeCommit":false,"messageTitle":"Add JUnit tests for Budget and update ValidData.txt","messageBody":"Fixes #73\n","fileTypesAndContributionMap":{"test-code":{"insertions":42,"deletions":0}}},{"hash":"6bfd86e9bf988f2b31c9683606facdc1550f2475","isMergeCommit":false,"messageTitle":"Update code to follow coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":1},"test-code":{"insertions":0,"deletions":1}}},{"hash":"c45bba6e16e98a3ca9c500a5ec64c598ec444c49","isMergeCommit":false,"messageTitle":"Remove redundant get() and size() methods in cashFlowList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":11}}},{"hash":"e417fcac442470226432184427bd86a06da278f7","isMergeCommit":false,"messageTitle":"Update error handling for update budget","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"89d5babd83af99396efcc453995b7002edf6f988","isMergeCommit":false,"messageTitle":"Standardise case statements","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":16}}},{"hash":"f5a16724e320f6246beb2eff33076b79661cb44b","isMergeCommit":true,"messageTitle":"Merge pull request #57 from ryan1604/branch-budget","messageBody":"Add budget functionality","fileTypesAndContributionMap":{}},{"hash":"c73982cb0a6c78b95ec5f1e30e7fdf6213da690b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-overview","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"ab2f4ada4e7927c3e547ff23c80429d5fa018a85","isMergeCommit":false,"messageTitle":"Update overview command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":24}}},{"hash":"75d7c453aa561d32dc04f507920e91866cd3cd42","isMergeCommit":false,"messageTitle":"Refactor code in budget and overview","messageBody":"Fixes #29\n","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":16}}},{"hash":"8e970f586211c98a67104e2e5e60c1467290283f","isMergeCommit":false,"messageTitle":"Fix bug in loading storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":7}}},{"hash":"3574b3c588bb57865216155149965ac36741d658","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-overview","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"01fbdd18f50dc01d6273bb8ae0f716d76658c798","isMergeCommit":false,"messageTitle":"Update error handling for budget","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":0}}},{"hash":"b33a0c71e3a82cedd3deac14b53ee8c881b63934","isMergeCommit":false,"messageTitle":"Refactor code:","messageBody":"- Refactor formatting of double to string\n- Reduce nesting in overviewcommand\n- Clean up code\n","fileTypesAndContributionMap":{"functional-code":{"insertions":38,"deletions":27}}}]},{"date":"2023-10-17","commitResults":[{"hash":"f46a0628faea24ba86aaa54141916d104fbe1f3a","isMergeCommit":false,"messageTitle":"Add logger storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":0}}},{"hash":"3705db0f6ea636d00d7f362a21c577710a687ccf","isMergeCommit":false,"messageTitle":"Enable assertions","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":0}}},{"hash":"b10f74a3137f0b43f7a486e06506a6cc47ba5ae1","isMergeCommit":false,"messageTitle":"Add logging and assertions for budget","messageBody":"Fixes #87\n","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":0}}},{"hash":"5b25ce5873e76f7c67e8c61128f2ef939c22f7f7","isMergeCommit":false,"messageTitle":"Update warning message in logger","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"1f63d6e938171d41ab2214df06a989a882819fe7","isMergeCommit":false,"messageTitle":"Add error handling and standardise logging","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":5}}},{"hash":"c97daf2496479364271d54c2da1b3e6466e9fa8c","isMergeCommit":false,"messageTitle":"Extract print statement to Ui","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":8}}},{"hash":"324016184917721a91fc9b91fcb06c0eb783ef89","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-overview","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/utils/Parser.java\n","fileTypesAndContributionMap":{}},{"hash":"6bf095c5e50f765fd3765a3a7fd859ecbc01591b","isMergeCommit":true,"messageTitle":"Merge pull request #58 from ryan1604/branch-overview","messageBody":"Add overview functionality","fileTypesAndContributionMap":{}},{"hash":"df007a1a9b2bc34f17c112cefc2cf3eea948896a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-logger","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/financialplanner/commands/BudgetCommand.java\n","fileTypesAndContributionMap":{}},{"hash":"19dcfc60b44a315ae74f99f0b8cf12b161ce7d81","isMergeCommit":false,"messageTitle":"Add error handling for budget","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":4}}},{"hash":"446763c7940b0fb0237c2ac6b976bec1c9d1156b","isMergeCommit":true,"messageTitle":"Merge pull request #91 from ryan1604/branch-logger","messageBody":"Add logging and assertions for BudgetCommand","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"f4bb78cbbff71e0d1074ca5c73a2173463dea77e","isMergeCommit":false,"messageTitle":"Remove logger from showing on terminal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":0}}},{"hash":"c0ecc3c340179354b78b359112397dc30790f305","isMergeCommit":true,"messageTitle":"Merge pull request #95 from ryan1604/branch-logger","messageBody":"Remove logger from showing on terminal","fileTypesAndContributionMap":{}}]}],"YFshadaow":[{"date":"2023-10-13","commitResults":[{"hash":"7828ae3395aae5d90d22f6743b43b03445b289a9","isMergeCommit":false,"messageTitle":"Refactor code: Use singleton instead","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":38},"test-code":{"insertions":15,"deletions":15}}},{"hash":"a126234d9b789bbeb6ac1ed4def47833d3356e48","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"89366d90a98581607b043727aa7a8eaf05227920","isMergeCommit":true,"messageTitle":"Merge pull request #50 from YFshadaow/master","messageBody":"Refactor code: Use singleton instead","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"a7b5722ca73a4b15a5c0e25b783a9fb827b30f28","isMergeCommit":false,"messageTitle":"Refactor code: Restructure command parse logic","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":254,"deletions":151},"other":{"insertions":21,"deletions":14},"test-code":{"insertions":9,"deletions":9}}}]},{"date":"2023-10-16","commitResults":[{"hash":"7ed9cafa3c7bd26a4641c1ec66c018e371c42434","isMergeCommit":false,"messageTitle":"Update code to pass style checks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":43,"deletions":26}}},{"hash":"28dd7ef23c898f7c9a91969a499e1463e6f12b2e","isMergeCommit":false,"messageTitle":"Update test files","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":32,"deletions":24},"other":{"insertions":7,"deletions":5},"test-code":{"insertions":29,"deletions":21}}},{"hash":"989068feb2dd79c2e54c25b3b6d3965507ea1cef","isMergeCommit":false,"messageTitle":"Add list commands. Minor changes include: - Remove EMPTY cash flow category - Refactor delete command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":90,"deletions":16}}},{"hash":"76ef2f72103f0f0e994d3cb8440b4bd9775feaf0","isMergeCommit":false,"messageTitle":"Minor change: Remove redundant else block","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}}]},{"date":"2023-10-18","commitResults":[{"hash":"1c5bad2c052f99ee730902c95ee31b39655aa240","isMergeCommit":true,"messageTitle":"Resolve merge conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2a7a8aa2c20b6fb8e871c81322c8d3c5f42fc4fc","isMergeCommit":false,"messageTitle":"Fix style error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"b0110338046a582dea04a00eb12c6ff4ab682574","isMergeCommit":true,"messageTitle":"Merge pull request #89 from YFshadaow/branch-list-command","messageBody":"Add list command","tags":["v1.0"],"fileTypesAndContributionMap":{}}]}],"hshiah":[{"date":"2023-10-05","commitResults":[{"hash":"f4e110ae257a2d4b5945b76e92c4f67b53a9b9c9","isMergeCommit":false,"messageTitle":"Test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"483fb3d416dea3f0ae1999b544aaa379f9eb6575","isMergeCommit":true,"messageTitle":"Merge pull request #4 from hshiah/hshiah","messageBody":"Shi,Haochen","fileTypesAndContributionMap":{}}]},{"date":"2023-10-12","commitResults":[{"hash":"22508414ff64c714b8c24237a8ab30432ade3775","isMergeCommit":false,"messageTitle":"implement function find","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":66,"deletions":0}}},{"hash":"8553ea5738eaa15aacfd028fd0832607330e3a48","isMergeCommit":true,"messageTitle":"Merge pull request #45 from hshiah/master","messageBody":"implement function find","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"2c4321ec694fab448316d4670acb2409d60896d6","isMergeCommit":false,"messageTitle":"Add reminder","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":88,"deletions":1}}},{"hash":"436ee1eebba2e020d95e82cdc8089a335fafdcfb","isMergeCommit":true,"messageTitle":"Merge pull request #86 from hshiah/hshiah","messageBody":"Add reminder","fileTypesAndContributionMap":{}},{"hash":"5e6072c3cfd8377d6401e4aa8656c4abf71508fe","isMergeCommit":false,"messageTitle":"Finish setting goals Fix bugs of find command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":87,"deletions":2}}}]},{"date":"2023-10-17","commitResults":[{"hash":"401308ac27b8077cd80a9378c8938e2b258ed136","isMergeCommit":false,"messageTitle":"Fix some points mentioned by groupmates","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":27}}},{"hash":"e9a6466bf2b37b67c9b63997e1fc4c3a042688ff","isMergeCommit":false,"messageTitle":"Solve conflict","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":11}}},{"hash":"835cc572869e4c70387ca9ba0e5bc42721c228d9","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into hshiah","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f87a53b2a70f909bafc095d6c425d023c4e5c8e9","isMergeCommit":false,"messageTitle":"Delete getValue function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":6}}},{"hash":"cd9ad14c299d2642e1d7737dc8e675d7b4cee4a3","isMergeCommit":true,"messageTitle":"Merge pull request #88 from hshiah/hshiah","messageBody":"Finish setting goals","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"wwweert123":{"docs":6,"functional-code":432,"test-code":29,"other":3},"NeoMinWei":{"docs":4,"functional-code":545,"test-code":124},"ryan1604":{"docs":1,"functional-code":530,"test-code":85,"other":2},"YFshadaow":{"docs":0,"functional-code":329,"test-code":26},"hshiah":{"docs":0,"functional-code":207,"test-code":0}},"authorContributionVariance":{"wwweert123":4019.8892,"NeoMinWei":13724.105,"ryan1604":13998.808,"YFshadaow":8907.558,"hshiah":1177.7969},"authorDisplayNameMap":{"wwweert123":"CS2113-T18-2 PUA ..RICK","NeoMinWei":"CS2113-T18-2 NEO .. WEI","ryan1604":"CS2113-T18-2 CHUA..RYAN","YFshadaow":"CS2113-T18-2 REN ..GDAO","hshiah":"CS2113-T18-2 SHI ..CHEN"}} diff --git a/AY2324S1-CS2113-T18-4_tp_master/authorship.json b/AY2324S1-CS2113-T18-4_tp_master/authorship.json index 192d6ba..4fcc1d9 100644 --- a/AY2324S1-CS2113-T18-4_tp_master/authorship.json +++ b/AY2324S1-CS2113-T18-4_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"spaceman03"},"content":" mainClass.set(\"seedu.nuscents.Nuscents\")","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"spaceman03"},"content":" archiveBaseName.set(\"nuscents\")","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"spaceman03":2,"-":44}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Portfolio ","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"--------|:--------------:|:-------------------------------------------:|:---------:","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"aaronxujiachen"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Xu JiaChen | [Github](https://github.com/aaronxujiachen) | [Portfolio](docs/team/xujiachen.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"lckjosh"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Joshua Lim | [Github](https://github.com/lckjosh) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Chung Zhi Xuan | [Github](https://github.com/spaceman03) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":8,"author":{"gitId":"choonkit-nus"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Ong Choon Kit | [Github](https://github.com/choonkit-nus) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"vvhuiling"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Huang Huiling | [Github](https://github.com/vvhuiling) | [Portfolio](docs/team/huiling.md)","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"aaronxujiachen":1,"spaceman03":1,"lckjosh":2,"-":3,"choonkit-nus":1,"vvhuiling":1}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"choonkit-nus"},"content":"# NUScents","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"-"},"content":"{Give product intro here}","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"Useful links:","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"* [User Guide](UserGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"* [Developer Guide](DeveloperGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"* [About Us](AboutUs.md)","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"choonkit-nus":1,"-":7}},{"path":"src/main/java/seedu/nuscents/Nuscents.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents;","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.ExitCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.exception.NuscentsException;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.parser.Parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.storage.Storage;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.ui.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"import java.io.File;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"public class Nuscents {","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":" private Ui ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":" private Storage storage;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"lckjosh"},"content":" private TransactionList transactions;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":" * Sets up the required objects and loads up the data from the storage file.","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":" * @param filePath path of the file used to store data","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":" public Nuscents(String filePath) throws IOException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"spaceman03"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"spaceman03"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"lckjosh"},"content":" transactions \u003d new TransactionList(storage.readDataFromFile());","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"spaceman03"},"content":" Ui.showReadDataError();","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"spaceman03"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"spaceman03"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"spaceman03"},"content":" file.createNewFile();","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"lckjosh"},"content":" transactions \u003d new TransactionList(storage.readDataFromFile());","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"spaceman03"},"content":" * Runs the program until termination.","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"spaceman03"},"content":" public void run() {","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"spaceman03"},"content":" Ui.showWelcomeMessage();","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"spaceman03"},"content":" runProgramUntilTermination();","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"spaceman03"},"content":" * Reads the user command and executes it, until the user issues the \"bye\" command.","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":" * This method continuously prompts the user for commands and executes them until the user enters \"bye\".","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"spaceman03"},"content":" private void runProgramUntilTermination() {","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"spaceman03"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"spaceman03"},"content":" while (!isExit) {","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"spaceman03"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"spaceman03"},"content":" String fullCommand \u003d ui.getUserCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"lckjosh"},"content":" Command command \u003d Parser.parseCommand(fullCommand, transactions);","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"lckjosh"},"content":" command.execute(transactions);","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"spaceman03"},"content":" isExit \u003d ExitCommand.isExit(command);","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"lckjosh"},"content":" storage.writeToFile(transactions);","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"spaceman03"},"content":" } catch (NuscentsException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" ui.showException(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":" } catch (IOException | ParseException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"spaceman03"},"content":" Ui.showLine();","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"spaceman03"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"spaceman03"},"content":" Ui.showLine();","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"spaceman03"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"spaceman03"},"content":" ui.showException(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":72,"author":{"gitId":"spaceman03"},"content":" public static void main(String[] args) throws IOException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"spaceman03"},"content":" new Nuscents(\"./data/nuscents.txt\").run();","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":75,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"spaceman03":68,"lckjosh":7}},{"path":"src/main/java/seedu/nuscents/commands/AddCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Transaction;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"lckjosh"},"content":" private Transaction transaction;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":" public AddCommand(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"lckjosh"},"content":" this.transaction \u003d transaction;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"lckjosh"},"content":" public void execute(TransactionList transactions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"lckjosh"},"content":" transactions.addTransaction(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":10,"lckjosh":7}},{"path":"src/main/java/seedu/nuscents/commands/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.exception.NuscentsException;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"public abstract class Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":" * Executes the command.","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":" public abstract void execute(TransactionList transactionList) throws NuscentsException;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":10,"lckjosh":1}},{"path":"src/main/java/seedu/nuscents/commands/DeleteCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":" private int taskIndex;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":" public DeleteCommand (int taskIndex) {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"lckjosh"},"content":" public void execute(TransactionList tasks) {","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"lckjosh"},"content":" tasks.deleteTransaction(taskIndex);","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":14,"lckjosh":3}},{"path":"src/main/java/seedu/nuscents/commands/ExitCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.ui.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"lckjosh"},"content":" public void execute(TransactionList tasks) {","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":" Ui.showGoodbyeMessage();","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":" public static boolean isExit(Command command) {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":" return command instanceof ExitCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":13,"lckjosh":2}},{"path":"src/main/java/seedu/nuscents/commands/FindCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":" private String keyword;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"lckjosh"},"content":" public void execute(TransactionList tasks) {","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":" tasks.findTask(keyword);","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":14,"lckjosh":2}},{"path":"src/main/java/seedu/nuscents/commands/HelpCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.ui.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":" public void execute(TransactionList tasks) {","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":" Ui.showHelpMenu();","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":10,"lckjosh":2}},{"path":"src/main/java/seedu/nuscents/commands/InvalidCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.exception.NuscentsException;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_UNKNOWN;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"lckjosh"},"content":" public void execute(TransactionList tasks) throws NuscentsException {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_UNKNOWN);","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":12,"lckjosh":2}},{"path":"src/main/java/seedu/nuscents/commands/ListCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.ui.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"lckjosh"},"content":" public void execute(TransactionList tasks) {","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":" Ui.showTransactionList(tasks);","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":8,"lckjosh":3}},{"path":"src/main/java/seedu/nuscents/commands/ListOfCommands.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":" * Container for valid commands executed by the user in the application.","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"public class ListOfCommands {","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"aaronxujiachen"},"content":" public static final String COMMAND_EXIT \u003d \"exit\";","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":" public static final String COMMAND_LIST \u003d \"list\";","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":" public static final String COMMAND_ALLOWANCE \u003d \"allowance\";","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"lckjosh"},"content":" public static final String COMMAND_EXPENSE \u003d \"expense\";","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":" public static final String COMMAND_EVENT \u003d \"event\";","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":" public static final String COMMAND_DELETE \u003d \"delete\";","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":" public static final String COMMAND_FIND \u003d \"find\";","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"vvhuiling"},"content":" public static final String COMMAND_VIEW \u003d \"view\";","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":" public static final String COMMAND_HELP \u003d \"help\";","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"aaronxujiachen":1,"spaceman03":12,"lckjosh":2,"vvhuiling":1}},{"path":"src/main/java/seedu/nuscents/commands/ViewCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"vvhuiling"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"vvhuiling"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"vvhuiling"},"content":"public class ViewCommand extends Command {","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"vvhuiling"},"content":" private int taskIndex;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"vvhuiling"},"content":" public ViewCommand (int taskIndex) {","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"vvhuiling"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"vvhuiling"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"vvhuiling"},"content":" public void execute(TransactionList tasks) {","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"vvhuiling"},"content":" tasks.viewTransaction(taskIndex);","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"vvhuiling"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"vvhuiling":15}},{"path":"src/main/java/seedu/nuscents/data/Allowance.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"lckjosh"},"content":"public class Allowance extends Transaction {","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":" public Allowance(String amount, Date date, String description, String additionalInfo) {","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"lckjosh"},"content":" super(amount, date, description, additionalInfo);","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":5,"lckjosh":4}},{"path":"src/main/java/seedu/nuscents/data/Expense.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"lckjosh"},"content":"public class Expense extends Transaction {","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":" public Expense(String amount, Date date, String description, String additionalInfo) {","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"lckjosh"},"content":" super(amount, date, description, additionalInfo);","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":5,"lckjosh":4}},{"path":"src/main/java/seedu/nuscents/data/Transaction.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"lckjosh"},"content":" * Represents a Transaction in the TransactionList","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":"public class Transaction {","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":" private static int count \u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"lckjosh"},"content":" protected String amount;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":" protected Date date;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":" protected String description;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"lckjosh"},"content":" protected String additionalInfo;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"lckjosh"},"content":" public Transaction(String description) {","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":" count++;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":" public Transaction(String amount, Date date, String description) {","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"lckjosh"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"lckjosh"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"lckjosh"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"lckjosh"},"content":" count++;","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"spaceman03"},"content":" public Transaction(String amount, Date date, String description, String additionalInfo) {","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"lckjosh"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"lckjosh"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"lckjosh"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"lckjosh"},"content":" this.additionalInfo \u003d additionalInfo;","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"lckjosh"},"content":" count++;","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"lckjosh"},"content":" public String getAmount() {","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"lckjosh"},"content":" return amount;","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"spaceman03"},"content":" public Date getDate() {","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"lckjosh"},"content":" return date;","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"spaceman03"},"content":" public String getFormattedDate() {","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"spaceman03"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(\"dd MMMM, yyyy\");","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"spaceman03"},"content":" return formatter.format(date);","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":" public String getDescription() {","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":" return description;","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"lckjosh"},"content":" public String getAdditionalInfo() {","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"lckjosh"},"content":" return additionalInfo;","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"spaceman03"},"content":" public String toString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"spaceman03"},"content":" return getAmount() + \" | \" + getFormattedDate() + \" | \" + getDescription() + \" | \" + getAdditionalInfo();","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"lckjosh"},"content":" public static int getTransactionCount() {","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" return count;","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"spaceman03"},"content":" * Decrease the task count by one when a task is deleted.","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"lckjosh"},"content":" public static void decreaseTransactionCountByOne() {","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"spaceman03"},"content":" count--;","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":40,"lckjosh":31}},{"path":"src/main/java/seedu/nuscents/data/TransactionList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lckjosh"},"content":"package seedu.nuscents.data;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"lckjosh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.LINE;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":"public class TransactionList {","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"lckjosh"},"content":" private ArrayList\u003cTransaction\u003e transactions;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"lckjosh"},"content":" public TransactionList() {","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":" transactions \u003d new ArrayList\u003cTransaction\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"lckjosh"},"content":" public TransactionList(ArrayList\u003cTransaction\u003e transactions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"lckjosh"},"content":" this.transactions \u003d transactions;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"lckjosh"},"content":" public ArrayList\u003cTransaction\u003e getTransactions() {","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"lckjosh"},"content":" return transactions;","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"lckjosh"},"content":" public void addTransaction(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"lckjosh"},"content":" transactions.add(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"lckjosh"},"content":" Ui.showTransactionAddedMessage(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"lckjosh"},"content":" public void deleteTransaction(int transactionIndex) {","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"lckjosh"},"content":" Transaction transaction \u003d transactions.get(transactionIndex-1);","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"lckjosh"},"content":" transactions.remove(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"lckjosh"},"content":" Transaction.decreaseTransactionCountByOne();","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"lckjosh"},"content":" Ui.showTransactionRemovedMessage(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"lckjosh"},"content":" public void findTask(String keyword) {","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"lckjosh"},"content":" ArrayList\u003cTransaction\u003e results \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"lckjosh"},"content":" boolean isFound \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"lckjosh"},"content":" for (Transaction transaction : transactions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"lckjosh"},"content":" if (transaction.getDescription().contains(keyword.toLowerCase())) {","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"lckjosh"},"content":" isFound \u003d true;","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"lckjosh"},"content":" results.add(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"lckjosh"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"lckjosh"},"content":" if (isFound) {","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"lckjosh"},"content":" int resultCount \u003d 1;","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"lckjosh"},"content":" for (Transaction transaction : results) {","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":" System.out.println(resultCount + \". \" + transaction.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"lckjosh"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"No matching tasks are found :/\");","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"lckjosh"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"vvhuiling"},"content":" public void viewTransaction(int transactionIndex) {","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"vvhuiling"},"content":" Transaction transaction \u003d transactions.get(transactionIndex-1);","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"vvhuiling"},"content":" Ui.showTransactionViewMessage(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"lckjosh"},"content":"}","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"spaceman03":2,"lckjosh":56,"vvhuiling":5}},{"path":"src/main/java/seedu/nuscents/data/exception/NuscentsException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data.exception;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"public class NuscentsException extends Exception {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":" public NuscentsException(String message) {","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":" super(message);","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":7}},{"path":"src/main/java/seedu/nuscents/parser/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.ExitCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.ListCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.AddCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.DeleteCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.FindCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.HelpCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.InvalidCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"vvhuiling"},"content":"import seedu.nuscents.commands.ViewCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Transaction;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Allowance;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Expense;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.exception.NuscentsException;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"aaronxujiachen"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_EXIT;","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_LIST;","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_ALLOWANCE;","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_EXPENSE;","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_DELETE;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_FIND;","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_HELP;","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"vvhuiling"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_VIEW;","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_ALLOWANCE;","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_EXPENSE;","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_INDEX;","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_KEYWORD;","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_FATAL_ERROR;","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_INVALID_DATE;","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_INVALID_INDEX;","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"vvhuiling"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_INVALID_INDEX_ARGUMENTS;","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"spaceman03"},"content":"public class Parser {","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"spaceman03"},"content":" private static final String DATE_PATTERN1 \u003d \"\\\\d{1,2}-\\\\d{1,2}-\\\\d{4}\"; // dd-mm-yyyy","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"spaceman03"},"content":" private static final String DATE_PATTERN2 \u003d \"\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}\"; // yyyy-mm-dd","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"lckjosh"},"content":" private static final String AMT_PATTERN \u003d \"/amt ([^/]+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"lckjosh"},"content":" private static final String DATE_PATTERN \u003d \"/date ([^/]+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"lckjosh"},"content":" private static final String DESC_PATTERN \u003d \"/desc ([^/]+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"lckjosh"},"content":" private static final String NOTE_PATTERN \u003d \"/note ([^/]+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"spaceman03"},"content":" public static \u003cTaskList\u003e Command parseCommand(String text, TaskList tasks) throws NuscentsException,","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":" ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":" String[] commandTypeAndArgs \u003d text.split(\" \", 2);","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"spaceman03"},"content":" String commandType \u003d commandTypeAndArgs[0];","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"spaceman03"},"content":" String arguments;","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"spaceman03"},"content":" if (commandTypeAndArgs.length \u003e 1) {","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"spaceman03"},"content":" arguments \u003d commandTypeAndArgs[1];","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"spaceman03"},"content":" arguments \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"spaceman03"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"spaceman03"},"content":" switch (commandType) {","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"aaronxujiachen"},"content":" case COMMAND_EXIT:","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" return new ExitCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":" case COMMAND_LIST:","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"spaceman03"},"content":" return new ListCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"lckjosh"},"content":" case COMMAND_ALLOWANCE:","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"lckjosh"},"content":" return new AddCommand(parseAllowance(arguments));","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"lckjosh"},"content":" case COMMAND_EXPENSE:","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"lckjosh"},"content":" return new AddCommand(parseExpense(arguments));","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"spaceman03"},"content":" case COMMAND_DELETE:","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"spaceman03"},"content":" return new DeleteCommand(parseTaskIndex(arguments));","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"spaceman03"},"content":" case COMMAND_FIND:","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"spaceman03"},"content":" return new FindCommand(parseFind(arguments));","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"vvhuiling"},"content":" case COMMAND_VIEW:","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"vvhuiling"},"content":" return new ViewCommand(parseTaskIndex(arguments));","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"spaceman03"},"content":" case COMMAND_HELP:","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"aaronxujiachen"},"content":" if (arguments !\u003d null) {","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"aaronxujiachen"},"content":" throw new NuscentsException(\"OOPS!!! The correct format is \u0027help\u0027 alone.\");","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"aaronxujiachen"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"spaceman03"},"content":" return new HelpCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"spaceman03"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"spaceman03"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"spaceman03"},"content":" } catch (NuscentsException | ParseException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"spaceman03"},"content":" throw e;","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"spaceman03"},"content":" private static String datePatternValidation(String date) throws NuscentsException {","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"spaceman03"},"content":" if (date.matches(DATE_PATTERN1)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"spaceman03"},"content":" return \"d-M-yyyy\";","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"spaceman03"},"content":" } else if (date.matches(DATE_PATTERN2)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"spaceman03"},"content":" return \"yyyy-M-d\";","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_INVALID_DATE);","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"spaceman03"},"content":" public static Date parseDate(String date, String format, SimpleDateFormat formatter)","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"spaceman03"},"content":" throws NuscentsException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"spaceman03"},"content":" String separator;","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"spaceman03"},"content":" if (format.contains(\"-\")) {","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"spaceman03"},"content":" separator \u003d \"-\";","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"spaceman03"},"content":" separator \u003d \"/\";","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"spaceman03"},"content":" String[] dateMonthYear \u003d date.split(separator);","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"spaceman03"},"content":" if (Integer.parseInt(dateMonthYear[1]) \u003e 12) {","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_INVALID_DATE);","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"spaceman03"},"content":" return formatter.parse(date);","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":111,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"lckjosh"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"lckjosh"},"content":" * Parsers arguments in the context of adding an allowance.","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"lckjosh"},"content":" * @param arguments full command argument string","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"lckjosh"},"content":" * @return a {@link Allowance} object","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"lckjosh"},"content":" * @throws NuscentsException If the description of the allowance is empty.","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"lckjosh"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"spaceman03"},"content":" public static Allowance parseAllowance(String arguments) throws NuscentsException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"spaceman03"},"content":" if (arguments \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_EMPTY_ALLOWANCE);","lastModifiedDate":"2023-10-17"},{"lineNumber":122,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"lckjosh"},"content":" String amount \u003d extractValue(\"allowance\", arguments, AMT_PATTERN, false);","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"lckjosh"},"content":" String date \u003d extractValue(\"allowance\", arguments, DATE_PATTERN, false);","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"lckjosh"},"content":" String description \u003d extractValue(\"allowance\", arguments, DESC_PATTERN, false);","lastModifiedDate":"2023-10-17"},{"lineNumber":126,"author":{"gitId":"lckjosh"},"content":" String additionalInformation \u003d extractValue(\"allowance\", arguments, NOTE_PATTERN, true);","lastModifiedDate":"2023-10-17"},{"lineNumber":127,"author":{"gitId":"spaceman03"},"content":" String format \u003d datePatternValidation(date);","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"spaceman03"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(format);","lastModifiedDate":"2023-10-17"},{"lineNumber":129,"author":{"gitId":"spaceman03"},"content":" Date formattedDate \u003d parseDate(date, format, formatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"lckjosh"},"content":" return new Allowance(amount, formattedDate, description, additionalInformation);","lastModifiedDate":"2023-10-17"},{"lineNumber":131,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":132,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":133,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":134,"author":{"gitId":"lckjosh"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"lckjosh"},"content":" * Parsers arguments in the context of adding an expense.","lastModifiedDate":"2023-10-17"},{"lineNumber":136,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":137,"author":{"gitId":"lckjosh"},"content":" * @param arguments full command argument string","lastModifiedDate":"2023-10-17"},{"lineNumber":138,"author":{"gitId":"lckjosh"},"content":" * @return a {@link Expense} object","lastModifiedDate":"2023-10-17"},{"lineNumber":139,"author":{"gitId":"lckjosh"},"content":" * @throws NuscentsException If the description of the expense is empty.","lastModifiedDate":"2023-10-17"},{"lineNumber":140,"author":{"gitId":"lckjosh"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":141,"author":{"gitId":"spaceman03"},"content":" public static Expense parseExpense(String arguments) throws NuscentsException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":142,"author":{"gitId":"lckjosh"},"content":" if (arguments \u003d\u003d null) {","lastModifiedDate":"2023-10-17"},{"lineNumber":143,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_EMPTY_EXPENSE);","lastModifiedDate":"2023-10-17"},{"lineNumber":144,"author":{"gitId":"lckjosh"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":145,"author":{"gitId":"lckjosh"},"content":" String amount \u003d extractValue(\"expense\", arguments, AMT_PATTERN, false);","lastModifiedDate":"2023-10-17"},{"lineNumber":146,"author":{"gitId":"lckjosh"},"content":" String date \u003d extractValue(\"expense\", arguments, DATE_PATTERN, false);","lastModifiedDate":"2023-10-17"},{"lineNumber":147,"author":{"gitId":"lckjosh"},"content":" String description \u003d extractValue(\"expense\", arguments, DESC_PATTERN, false);","lastModifiedDate":"2023-10-17"},{"lineNumber":148,"author":{"gitId":"lckjosh"},"content":" String additionalInformation \u003d extractValue(\"expense\", arguments, NOTE_PATTERN, true);","lastModifiedDate":"2023-10-17"},{"lineNumber":149,"author":{"gitId":"spaceman03"},"content":" String format \u003d datePatternValidation(date);","lastModifiedDate":"2023-10-17"},{"lineNumber":150,"author":{"gitId":"spaceman03"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(format);","lastModifiedDate":"2023-10-17"},{"lineNumber":151,"author":{"gitId":"spaceman03"},"content":" Date formattedDate \u003d parseDate(date, format, formatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":152,"author":{"gitId":"lckjosh"},"content":" return new Expense(amount, formattedDate, description, additionalInformation);","lastModifiedDate":"2023-10-17"},{"lineNumber":153,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":154,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":155,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":156,"author":{"gitId":"spaceman03"},"content":" public static int parseTaskIndex(String arguments) throws IndexOutOfBoundsException,","lastModifiedDate":"2023-10-16"},{"lineNumber":157,"author":{"gitId":"spaceman03"},"content":" NuscentsException {","lastModifiedDate":"2023-10-16"},{"lineNumber":158,"author":{"gitId":"spaceman03"},"content":" if (arguments \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":159,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_EMPTY_INDEX);","lastModifiedDate":"2023-10-16"},{"lineNumber":160,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":161,"author":{"gitId":"vvhuiling"},"content":" try {","lastModifiedDate":"2023-10-18"},{"lineNumber":162,"author":{"gitId":"spaceman03"},"content":" int taskIndex \u003d Integer.parseInt(arguments);","lastModifiedDate":"2023-10-16"},{"lineNumber":163,"author":{"gitId":"lckjosh"},"content":" if (taskIndex \u003e Transaction.getTransactionCount() || taskIndex \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":164,"author":{"gitId":"spaceman03"},"content":" throw new IndexOutOfBoundsException(MESSAGE_INVALID_INDEX);","lastModifiedDate":"2023-10-16"},{"lineNumber":165,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":166,"author":{"gitId":"spaceman03"},"content":" return taskIndex;","lastModifiedDate":"2023-10-16"},{"lineNumber":167,"author":{"gitId":"vvhuiling"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-18"},{"lineNumber":168,"author":{"gitId":"vvhuiling"},"content":" throw new NuscentsException(MESSAGE_INVALID_INDEX_ARGUMENTS);","lastModifiedDate":"2023-10-18"},{"lineNumber":169,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":170,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":171,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":172,"author":{"gitId":"spaceman03"},"content":" public static String parseFind(String arguments) throws NuscentsException {","lastModifiedDate":"2023-10-16"},{"lineNumber":173,"author":{"gitId":"spaceman03"},"content":" if (arguments \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":174,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_EMPTY_KEYWORD);","lastModifiedDate":"2023-10-16"},{"lineNumber":175,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":176,"author":{"gitId":"spaceman03"},"content":" return arguments;","lastModifiedDate":"2023-10-16"},{"lineNumber":177,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":178,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":179,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":180,"author":{"gitId":"lckjosh"},"content":" private static String extractValue(String command, String input, String pattern, boolean isOptional)","lastModifiedDate":"2023-10-17"},{"lineNumber":181,"author":{"gitId":"lckjosh"},"content":" throws NuscentsException {","lastModifiedDate":"2023-10-17"},{"lineNumber":182,"author":{"gitId":"lckjosh"},"content":" java.util.regex.Pattern p \u003d java.util.regex.Pattern.compile(pattern);","lastModifiedDate":"2023-10-17"},{"lineNumber":183,"author":{"gitId":"lckjosh"},"content":" java.util.regex.Matcher m \u003d p.matcher(input);","lastModifiedDate":"2023-10-17"},{"lineNumber":184,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":185,"author":{"gitId":"lckjosh"},"content":" if (m.find()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":186,"author":{"gitId":"lckjosh"},"content":" return m.group(1).trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":187,"author":{"gitId":"lckjosh"},"content":" } else if (!isOptional) {","lastModifiedDate":"2023-10-17"},{"lineNumber":188,"author":{"gitId":"lckjosh"},"content":" switch (command) {","lastModifiedDate":"2023-10-17"},{"lineNumber":189,"author":{"gitId":"lckjosh"},"content":" case \"allowance\":","lastModifiedDate":"2023-10-17"},{"lineNumber":190,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_EMPTY_ALLOWANCE);","lastModifiedDate":"2023-10-17"},{"lineNumber":191,"author":{"gitId":"lckjosh"},"content":" case \"expense\":","lastModifiedDate":"2023-10-17"},{"lineNumber":192,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_EMPTY_EXPENSE);","lastModifiedDate":"2023-10-17"},{"lineNumber":193,"author":{"gitId":"lckjosh"},"content":" default:","lastModifiedDate":"2023-10-17"},{"lineNumber":194,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_FATAL_ERROR);","lastModifiedDate":"2023-10-17"},{"lineNumber":195,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":196,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":197,"author":{"gitId":"lckjosh"},"content":" return \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":198,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":199,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"aaronxujiachen":5,"spaceman03":113,"lckjosh":72,"vvhuiling":9}},{"path":"src/main/java/seedu/nuscents/storage/Storage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.storage;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Allowance;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Expense;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Transaction;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"import java.io.File;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":"public class Storage {","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":" private static final Logger logger \u003d Logger.getLogger(Storage.class.getName());","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":" private String filePath;","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"spaceman03"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":" public String getPath() {","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"spaceman03"},"content":" return filePath;","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"spaceman03"},"content":" * Reads data from the storage file and return it.","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"spaceman03"},"content":" * @return an arraylist of tasks","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"spaceman03"},"content":" * @throws FileNotFoundException If the storage file does not exist.","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"spaceman03"},"content":" public ArrayList\u003cTransaction\u003e readDataFromFile() throws FileNotFoundException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"lckjosh"},"content":" ArrayList\u003cTransaction\u003e transactions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"spaceman03"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"Creating a File object to read data from file\");","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"spaceman03"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"lckjosh"},"content":" transactionDecoder(file, transactions);","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"spaceman03"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.WARNING, \"Something went wrong when reading data from file\");","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"spaceman03"},"content":" Ui.showLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":" Ui.showLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"All data successfully loaded\");","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"lckjosh"},"content":" return transactions;","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"spaceman03"},"content":" * Decodes the storage data file and store it into the arraylist of tasks.","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"spaceman03"},"content":" * @param file storage data file","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"lckjosh"},"content":" * @param transactions arraylist of tasks","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" * @throws FileNotFoundException If the storage data file does not exist.","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"lckjosh"},"content":" private static void transactionDecoder(File file, ArrayList\u003cTransaction\u003e transactions)","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"spaceman03"},"content":" throws FileNotFoundException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"spaceman03"},"content":" Scanner data \u003d new Scanner(file);","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"spaceman03"},"content":" while (data.hasNext()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"lckjosh"},"content":" String transactionDetails \u003d data.nextLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"lckjosh"},"content":" char transactionType \u003d transactionDetails.charAt(0);","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"lckjosh"},"content":" String[] columns;","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"lckjosh"},"content":" String amount \u003d \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"spaceman03"},"content":" Date date;","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"lckjosh"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"lckjosh"},"content":" String note \u003d \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"spaceman03"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(\"dd MMMM, yyyy\");","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"lckjosh"},"content":" switch (transactionType) {","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"lckjosh"},"content":" case \u0027A\u0027:","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"lckjosh"},"content":" columns \u003d transactionDetails.split(\"\\\\s*\\\\|\\\\s*\");","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"lckjosh"},"content":" amount \u003d columns[1];","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"spaceman03"},"content":" date \u003d formatter.parse(columns[2]);","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"lckjosh"},"content":" description \u003d columns[3];","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"lckjosh"},"content":" note \u003d \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"lckjosh"},"content":" if (columns.length \u003e 4) {","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"lckjosh"},"content":" note \u003d columns[4];","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"lckjosh"},"content":" transactions.add(new Allowance(amount, date, description, note));","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"lckjosh"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"lckjosh"},"content":" columns \u003d transactionDetails.split(\"\\\\s*\\\\|\\\\s*\");","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"lckjosh"},"content":" amount \u003d columns[1];","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"spaceman03"},"content":" date \u003d formatter.parse(columns[2]);","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"lckjosh"},"content":" description \u003d columns[3];","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"lckjosh"},"content":" note \u003d \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"lckjosh"},"content":" if (columns.length \u003e 4) {","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"lckjosh"},"content":" note \u003d columns[4];","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"lckjosh"},"content":" transactions.add(new Expense(amount, date, description, note));","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"lckjosh"},"content":" break;","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"spaceman03"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"spaceman03"},"content":" * Writes the data to the storage file.","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"spaceman03"},"content":" * Creates a new file if the file does not exist.","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"lckjosh"},"content":" * @param transactionList list of tasks","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"spaceman03"},"content":" * @throws IOException If there were errors converting and/or storing the data to the file.","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"lckjosh"},"content":" public void writeToFile(TransactionList transactionList) throws IOException {","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"spaceman03"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"spaceman03"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"Creating a File object to write data to file\");","lastModifiedDate":"2023-10-18"},{"lineNumber":117,"author":{"gitId":"lckjosh"},"content":" ArrayList\u003cTransaction\u003e transactions \u003d transactionList.getTransactions();","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"lckjosh"},"content":" for (Transaction transaction : transactions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"Converting info to storage format\");","lastModifiedDate":"2023-10-18"},{"lineNumber":120,"author":{"gitId":"spaceman03"},"content":" String output \u003d toStorageFormat(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"spaceman03"},"content":" fw.write(output);","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"spaceman03"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":124,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"Transaction data successfully stored\");","lastModifiedDate":"2023-10-18"},{"lineNumber":125,"author":{"gitId":"spaceman03"},"content":" fw.close();","lastModifiedDate":"2023-10-16"},{"lineNumber":126,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":127,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":128,"author":{"gitId":"spaceman03"},"content":" private static String toStorageFormat(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":129,"author":{"gitId":"lckjosh"},"content":" if (transaction instanceof Allowance) {","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"spaceman03"},"content":" return \"A\" + \" | \" + transaction.toString();","lastModifiedDate":"2023-10-17"},{"lineNumber":131,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":132,"author":{"gitId":"lckjosh"},"content":" } else if (transaction instanceof Expense) {","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"spaceman03"},"content":" return \"E\" + \" | \" + transaction.toString();","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":136,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.WARNING, \"Invalid transaction format\");","lastModifiedDate":"2023-10-18"},{"lineNumber":137,"author":{"gitId":"spaceman03"},"content":" return null;","lastModifiedDate":"2023-10-16"},{"lineNumber":138,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":139,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":140,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"},{"lineNumber":141,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":94,"lckjosh":47}},{"path":"src/main/java/seedu/nuscents/ui/Messages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"public class Messages {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":" public static final String LINE \u003d \"-------------------------------------------------------------------------------\";","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":" public static final String LOGO \u003d \" __ __ __ __ ____ _____ _____ __ __ ________ ____\\n\"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":" + \"| \\\\ | | | | |/ / / __| | \\\\ | |__ __|/ /\\n\"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":" + \"| \\\\| | | | |\\\\ __\\\\| / | __| \\\\| | | | \\\\ __\\\\\\n\"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":" + \"| | | | | \\\\__ | | | __| | | | \\\\__ |\\n\"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":" + \"| | |__| |/ | \\\\__| | | | | / |\\n\"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":" + \"|__|\\\\___|________|______/ \\\\_____|_____|__|\\\\___| |__| |_____/\\n\";","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"aaronxujiachen"},"content":" public static final String MESSAGE_EXIT \u003d \"Thank you for using NUScents. Hope to see you again soon!\";","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"aaronxujiachen"},"content":" public static final String HELP_MENU \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"aaronxujiachen"},"content":" \"- `list` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"aaronxujiachen"},"content":" \" Show a list of all entries.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"aaronxujiachen"},"content":" \"- `allowance /amt AMOUNT /date DATE /desc DESCRIPTION \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"aaronxujiachen"},"content":" \"[/note ADDITIONAL_INFORMATION]` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"aaronxujiachen"},"content":" \" Add an allowance.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"aaronxujiachen"},"content":" \"- `expense /amt AMOUNT /date DATE /desc DESCRIPTION \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"aaronxujiachen"},"content":" \"[/note ADDITIONAL_INFORMATION]` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"aaronxujiachen"},"content":" \" Add an expense.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"aaronxujiachen"},"content":" \"- `delete ENTRY_NUMBER` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"aaronxujiachen"},"content":" \" Delete an entry.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"aaronxujiachen"},"content":" \"- `view ENTRY_NUMBER` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"aaronxujiachen"},"content":" \" View an entry detail.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"aaronxujiachen"},"content":" \"- `exit` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"aaronxujiachen"},"content":" \" Exit the program.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_UNKNOWN \u003d \"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_MARK \u003d \"Nice! I\u0027ve marked this task as done:\";","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_UNMARK \u003d \"OK, I\u0027ve marked this task as not done yet:\";","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_EMPTY_TODO \u003d \"OOPS!!! The description of a todo cannot be empty.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"lckjosh"},"content":" public static final String MESSAGE_EMPTY_ALLOWANCE \u003d \"OOPS!!! Invalid input format for adding an allowance.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"lckjosh"},"content":" public static final String MESSAGE_EMPTY_EXPENSE \u003d \"OOPS!!! Invalid input format for adding an expense.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_EMPTY_BY \u003d \"OOPS!!! The /by parameter of a deadline cannot be empty.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_EMPTY_EVENT \u003d \"OOPS!!! The description of an event cannot be empty.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_EMPTY_FROM \u003d \"OOPS!!! The /from parameter of an event cannot be empty.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_EMPTY_TO \u003d \"OOPS!!! The /to parameter of an event cannot be empty.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_INVALID_DATE \u003d \"OOPS!!! The format of the date is invalid.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"lckjosh"},"content":" public static final String MESSAGE_INVALID_INDEX \u003d \"OOPS!!! This is an invalid transaction index.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"vvhuiling"},"content":" public static final String MESSAGE_INVALID_INDEX_ARGUMENTS \u003d \"OOPS!!! The input should consist only of digits.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"lckjosh"},"content":" public static final String MESSAGE_EMPTY_LIST \u003d \"You have not made any transactions!\";","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_EMPTY_KEYWORD \u003d \"OOPS!!! The keyword of a find command cannot be empty.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"vvhuiling"},"content":" public static final String MESSAGE_EMPTY_INDEX \u003d \"OOPS!!! The index of a delete/view command cannot be empty.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"lckjosh"},"content":" public static final String MESSAGE_FATAL_ERROR \u003d \"OOPS!!! Fatal error occurred...\";","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_READ_ERROR \u003d \"OOPS!!! A problem occurred while reading the data file.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"aaronxujiachen":16,"spaceman03":22,"lckjosh":5,"vvhuiling":2}},{"path":"src/main/java/seedu/nuscents/ui/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.Allowance;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.Expense;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Transaction;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"aaronxujiachen"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EXIT;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.LINE;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.LOGO;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_LIST;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"public class Ui {","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":" private final Scanner input;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":" public Ui() {","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":" this.input \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":" public String getUserCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":" return input.nextLine();","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":" public static void showLine() {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"spaceman03"},"content":" public static void showWelcomeMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"spaceman03"},"content":" System.out.println(\"Hello from\\n\" + LOGO);","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"spaceman03"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"aaronxujiachen"},"content":" System.out.println(\"Hint: To view a list of all possible commands, please enter \u0027help\u0027.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"spaceman03"},"content":" public static void showGoodbyeMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"aaronxujiachen"},"content":" System.out.println(MESSAGE_EXIT);","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"spaceman03"},"content":" public void showException(Exception e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"spaceman03"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"lckjosh"},"content":" public static void showTransactionCount( ) {","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Now you have \" + Transaction.getTransactionCount() + \" transactions in the list.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"lckjosh"},"content":" public static void showTransactionAddedMessage(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Got it. I\u0027ve added this transaction:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"spaceman03"},"content":" System.out.println(\" \" + transaction.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"lckjosh"},"content":" showTransactionCount();","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"lckjosh"},"content":" public static void showTransactionRemovedMessage(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Noted. I\u0027ve removed this transaction:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"spaceman03"},"content":" System.out.println(\" \" + transaction.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"lckjosh"},"content":" showTransactionCount();","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"lckjosh"},"content":" public static void showTransactionList(TransactionList transactionList) {","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"lckjosh"},"content":" if (transactionList.getTransactions().isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"spaceman03"},"content":" System.out.println(MESSAGE_EMPTY_LIST);","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"spaceman03"},"content":" return;","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"spaceman03"},"content":" assert transactionList.getTransactions() !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Here are the transactions in your list:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"spaceman03"},"content":" System.out.printf(\"%-5s %-10s %-7s %-18s %-15s %-5s %n\",","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"spaceman03"},"content":" \"S/N\", \"TYPE\", \"AMOUNT\", \"DATE\", \"DESCRIPTION\", \"NOTE\");","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"lckjosh"},"content":" ArrayList\u003cTransaction\u003e transactions \u003d transactionList.getTransactions();","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"lckjosh"},"content":" for (Transaction transaction : transactions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"spaceman03"},"content":" int index \u003d transactions.indexOf(transaction) + 1;","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"spaceman03"},"content":" String additionalInfo \u003d transaction.getAdditionalInfo();","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"spaceman03"},"content":" String note;","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"spaceman03"},"content":" if (additionalInfo.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"spaceman03"},"content":" note \u003d \"-\";","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"spaceman03"},"content":" note \u003d additionalInfo;","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"spaceman03"},"content":" if (transaction instanceof Allowance) {","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"spaceman03"},"content":" System.out.printf(\"%-5s %-10s %-7s %-18s %-15s %-5s %n\", index, \"Allowance\",","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"spaceman03"},"content":" \"$\" + transaction.getAmount(), transaction.getFormattedDate(), transaction.getDescription(),","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"spaceman03"},"content":" note);","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"spaceman03"},"content":" } else if (transaction instanceof Expense) {","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"spaceman03"},"content":" System.out.printf(\"%-5s %-10s %-7s %-18s %-15s %-5s %n\", index, \"Expense\",","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"spaceman03"},"content":" \"$\" + transaction.getAmount(), transaction.getFormattedDate(), transaction.getDescription(),","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"spaceman03"},"content":" note);","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"spaceman03"},"content":" public static void showReadDataError() {","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"spaceman03"},"content":" System.out.println(\"No previous data found /:\");","lastModifiedDate":"2023-10-16"},{"lineNumber":110,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":111,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"vvhuiling"},"content":" public static void showTransactionViewMessage(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"vvhuiling"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"Following are details of the transaction:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"vvhuiling"},"content":" if (transaction instanceof Allowance) {","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"TYPE: ALLOWANCE\");","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"vvhuiling"},"content":" } else if (transaction instanceof Expense) {","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"TYPE: EXPENSE\");","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"DATE: \" + transaction.getFormattedDate());","lastModifiedDate":"2023-10-17"},{"lineNumber":122,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"AMOUNT: \" + transaction.getAmount());","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"DESCRIPTION: \" + transaction.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"NOTE: \" + transaction.getAdditionalInfo());","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"vvhuiling"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":126,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":127,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":129,"author":{"gitId":"spaceman03"},"content":" public static void showHelpMenu() {","lastModifiedDate":"2023-10-16"},{"lineNumber":130,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":131,"author":{"gitId":"aaronxujiachen"},"content":" System.out.println(Messages.HELP_MENU);","lastModifiedDate":"2023-10-18"},{"lineNumber":132,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":133,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":134,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"},{"lineNumber":136,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"aaronxujiachen":5,"spaceman03":100,"lckjosh":15,"vvhuiling":16}},{"path":"src/test/java/seedu/nuscents/NuscentsTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents;","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"class NuscentsTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":" public void sampleTest() {","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":" assertTrue(true);","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"spaceman03":2,"-":10}},{"path":"src/test/java/seedu/nuscents/parser/ParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"lckjosh"},"content":"package seedu.nuscents.parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"lckjosh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"vvhuiling"},"content":"import seedu.nuscents.data.Transaction;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Allowance;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Expense;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.exception.NuscentsException;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"aaronxujiachen"},"content":"import seedu.nuscents.commands.Command;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"aaronxujiachen"},"content":"import seedu.nuscents.commands.HelpCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"lckjosh"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"lckjosh"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"lckjosh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"lckjosh"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"aaronxujiachen"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"lckjosh"},"content":"public class ParserTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"lckjosh"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"lckjosh"},"content":" public void parseAllowance_validInput_success() throws NuscentsException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"lckjosh"},"content":" String arguments \u003d \"/amt 100 /date 15-10-2023 /desc Birthday Gift /note From friends\";","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"lckjosh"},"content":" Allowance allowance \u003d Parser.parseAllowance(arguments);","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"100\", allowance.getAmount());","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"lckjosh"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(\"d-M-yyyy\");","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"lckjosh"},"content":" String formattedDate \u003d formatter.format(allowance.getDate());","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"15-10-2023\", formattedDate);","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"Birthday Gift\", allowance.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"From friends\", allowance.getAdditionalInfo());","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"lckjosh"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"lckjosh"},"content":" public void parseExpense_validInput_success() throws NuscentsException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"lckjosh"},"content":" String arguments \u003d \"/amt 50 /date 16-10-2023 /desc Dinner /note Alone\";","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"lckjosh"},"content":" Expense expense \u003d Parser.parseExpense(arguments);","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"50\", expense.getAmount());","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"lckjosh"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(\"d-M-yyyy\");","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"lckjosh"},"content":" String formattedDate \u003d formatter.format(expense.getDate());","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"16-10-2023\", formattedDate);","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"Dinner\", expense.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"Alone\", expense.getAdditionalInfo());","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"lckjosh"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"lckjosh"},"content":" public void parseAllowance_missingArguments_exceptionThrown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"lckjosh"},"content":" String input \u003d \"allowance /amt 100 /desc Pocket Money\";","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"lckjosh"},"content":" Exception exception \u003d assertThrows(NuscentsException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"lckjosh"},"content":" Parser.parseCommand(input, null);","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"lckjosh"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"OOPS!!! Invalid input format for adding an allowance.\", exception.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"lckjosh"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"lckjosh"},"content":" public void parseExpense_missingArguments_exceptionThrown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"lckjosh"},"content":" String input \u003d \"expense /amt 50 /desc Dinner\";","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"lckjosh"},"content":" Exception exception \u003d assertThrows(NuscentsException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"lckjosh"},"content":" Parser.parseCommand(input, null);","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"lckjosh"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"OOPS!!! Invalid input format for adding an expense.\", exception.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"lckjosh"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"lckjosh"},"content":" public void parseAllowance_invalidDateTime_exceptionThrown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"lckjosh"},"content":" String input \u003d \"allowance /amt 100 /date 15/10/2023 /desc Lunch\";","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"lckjosh"},"content":" Exception exception \u003d assertThrows(NuscentsException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"lckjosh"},"content":" Parser.parseCommand(input, null);","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"lckjosh"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"OOPS!!! The format of the date is invalid.\", exception.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"lckjosh"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"lckjosh"},"content":" public void parseExpense_invalidDateTime_exceptionThrown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"lckjosh"},"content":" String input \u003d \"expense /amt 50 /date 16.10.2023 /desc Dinner\";","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"lckjosh"},"content":" Exception exception \u003d assertThrows(NuscentsException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"lckjosh"},"content":" Parser.parseCommand(input, null);","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"lckjosh"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"OOPS!!! The format of the date is invalid.\", exception.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"vvhuiling"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"vvhuiling"},"content":" public void parseTaskIndex_validInput_success() throws NuscentsException, IndexOutOfBoundsException {","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"vvhuiling"},"content":" String input \u003d \"1\";","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"vvhuiling"},"content":" Transaction transaction \u003d new Transaction(\"test description\");","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"vvhuiling"},"content":" assertEquals(1, Parser.parseTaskIndex(input));","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"vvhuiling"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"vvhuiling"},"content":" public void parseTaskIndex_outOfBoundsIndex_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"vvhuiling"},"content":" String input \u003d \"-6\";","lastModifiedDate":"2023-10-18"},{"lineNumber":91,"author":{"gitId":"vvhuiling"},"content":" Exception exception \u003d assertThrows(IndexOutOfBoundsException.class, () -\u003e {","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"vvhuiling"},"content":" Parser.parseTaskIndex(input);","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"vvhuiling"},"content":" });","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"vvhuiling"},"content":" assertEquals(\"OOPS!!! This is an invalid transaction index.\", exception.getMessage());","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"vvhuiling"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"vvhuiling"},"content":" public void parseTaskIndex_invalidArgument_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"vvhuiling"},"content":" String input \u003d \"InvalidArgument\";","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"vvhuiling"},"content":" Exception exception \u003d assertThrows(NuscentsException.class, () -\u003e {","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"vvhuiling"},"content":" Parser.parseTaskIndex(input);","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"vvhuiling"},"content":" });","lastModifiedDate":"2023-10-18"},{"lineNumber":103,"author":{"gitId":"vvhuiling"},"content":" assertEquals(\"OOPS!!! The input should consist only of digits.\", exception.getMessage());","lastModifiedDate":"2023-10-18"},{"lineNumber":104,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":105,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"vvhuiling"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":107,"author":{"gitId":"vvhuiling"},"content":" public void parseTaskIndex_emptyArgument_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":108,"author":{"gitId":"vvhuiling"},"content":" String input \u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"vvhuiling"},"content":" Exception exception \u003d assertThrows(NuscentsException.class, () -\u003e {","lastModifiedDate":"2023-10-18"},{"lineNumber":110,"author":{"gitId":"vvhuiling"},"content":" Parser.parseTaskIndex(input);","lastModifiedDate":"2023-10-18"},{"lineNumber":111,"author":{"gitId":"vvhuiling"},"content":" });","lastModifiedDate":"2023-10-18"},{"lineNumber":112,"author":{"gitId":"vvhuiling"},"content":" assertEquals(\"OOPS!!! The index of a delete/view command cannot be empty.\", exception.getMessage());","lastModifiedDate":"2023-10-18"},{"lineNumber":113,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":115,"author":{"gitId":"aaronxujiachen"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":116,"author":{"gitId":"aaronxujiachen"},"content":" public void parseCommand_helpCommandWithCorrectInput_returnsHelpCommand() throws Exception {","lastModifiedDate":"2023-10-18"},{"lineNumber":117,"author":{"gitId":"aaronxujiachen"},"content":" Command result \u003d Parser.parseCommand(\"help\", null);","lastModifiedDate":"2023-10-18"},{"lineNumber":118,"author":{"gitId":"aaronxujiachen"},"content":" assertTrue(result instanceof HelpCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":119,"author":{"gitId":"aaronxujiachen"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":120,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":121,"author":{"gitId":"aaronxujiachen"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"aaronxujiachen"},"content":" public void parseCommand_helpCommandWithIncorrectInput_throwsException() {","lastModifiedDate":"2023-10-18"},{"lineNumber":123,"author":{"gitId":"aaronxujiachen"},"content":" Exception exceptionWithSpace \u003d assertThrows(NuscentsException.class, () -\u003e {","lastModifiedDate":"2023-10-18"},{"lineNumber":124,"author":{"gitId":"aaronxujiachen"},"content":" Parser.parseCommand(\"help \", null);","lastModifiedDate":"2023-10-18"},{"lineNumber":125,"author":{"gitId":"aaronxujiachen"},"content":" });","lastModifiedDate":"2023-10-18"},{"lineNumber":126,"author":{"gitId":"aaronxujiachen"},"content":" assertEquals(\"OOPS!!! The correct format is \u0027help\u0027 alone.\", exceptionWithSpace.getMessage());","lastModifiedDate":"2023-10-18"},{"lineNumber":127,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":128,"author":{"gitId":"aaronxujiachen"},"content":" Exception exceptionWithExtraChars \u003d assertThrows(NuscentsException.class, () -\u003e {","lastModifiedDate":"2023-10-18"},{"lineNumber":129,"author":{"gitId":"aaronxujiachen"},"content":" Parser.parseCommand(\"help extra\", null);","lastModifiedDate":"2023-10-18"},{"lineNumber":130,"author":{"gitId":"aaronxujiachen"},"content":" });","lastModifiedDate":"2023-10-18"},{"lineNumber":131,"author":{"gitId":"aaronxujiachen"},"content":" assertEquals(\"OOPS!!! The correct format is \u0027help\u0027 alone.\", exceptionWithExtraChars.getMessage());","lastModifiedDate":"2023-10-18"},{"lineNumber":132,"author":{"gitId":"aaronxujiachen"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":133,"author":{"gitId":"lckjosh"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"aaronxujiachen":22,"lckjosh":75,"vvhuiling":36}},{"path":"src/test/java/seedu/nuscents/storage/StorageTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.storage;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.parser.Parser.parseDate;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"import java.nio.charset.Charset;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"import java.util.List;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.Allowance;","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.Expense;","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":"public class StorageTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":" @TempDir","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":" public static Path testFolder;","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"spaceman03"},"content":" private static final String TEST_DATA_FOLDER \u003d \"src/test/data/StorageFileTest\";","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"spaceman03"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"spaceman03"},"content":" public void save_validTransactionList() throws Exception {","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":" TransactionList transactions \u003d getTestTransactionList();","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"spaceman03"},"content":" Storage storage \u003d getTempStorage();","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"spaceman03"},"content":" storage.writeToFile(transactions);","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"spaceman03"},"content":" assertStorageFilesEqual(storage, getStorage(\"ValidData.txt\"));","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"spaceman03"},"content":" private void assertStorageFilesEqual(Storage sf1, Storage sf2) throws Exception {","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"spaceman03"},"content":" assertTextFilesEqual(Paths.get(sf1.getPath()), Paths.get(sf2.getPath()));","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"spaceman03"},"content":" public static void assertTextFilesEqual(Path path1, Path path2) throws IOException {","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"spaceman03"},"content":" List\u003cString\u003e list1 \u003d Files.readAllLines(path1, Charset.defaultCharset());","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"spaceman03"},"content":" List\u003cString\u003e list2 \u003d Files.readAllLines(path2, Charset.defaultCharset());","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"spaceman03"},"content":" assertEquals(String.join(\"\\n\", list1), String.join(\"\\n\", list2));","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"spaceman03"},"content":" private Storage getStorage(String fileName) throws Exception {","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"spaceman03"},"content":" return new Storage(TEST_DATA_FOLDER + \"/\" + fileName);","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":" private Storage getTempStorage() throws Exception {","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"spaceman03"},"content":" return new Storage(testFolder.resolve(\"temp.txt\").toString());","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"spaceman03"},"content":" private TransactionList getTestTransactionList() throws Exception {","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"spaceman03"},"content":" TransactionList transactions \u003d new TransactionList();","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"spaceman03"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(\"dd-MM-yyyy\");","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"spaceman03"},"content":" Date formattedDate \u003d parseDate(\"23-10-2023\", \"dd-MM-yyyy\", formatter);","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"spaceman03"},"content":" transactions.addTransaction(new Allowance(\"100\", formattedDate, \"Pocket money\",","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"spaceman03"},"content":" \"October\"));","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"spaceman03"},"content":" transactions.addTransaction(new Expense(\"50\", formattedDate, \"Lunch\", \"Pasta\"));","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" return transactions;","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"spaceman03":63}}] +[{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"spaceman03"},"content":" mainClass.set(\"seedu.nuscents.Nuscents\")","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"spaceman03"},"content":" archiveBaseName.set(\"nuscents\")","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"spaceman03":2,"-":44}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Portfolio ","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"--------|:--------------:|:-------------------------------------------:|:---------:","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"aaronxujiachen"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Xu JiaChen | [Github](https://github.com/aaronxujiachen) | [Portfolio](docs/team/xujiachen.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"lckjosh"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Joshua Lim | [Github](https://github.com/lckjosh) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Chung Zhi Xuan | [Github](https://github.com/spaceman03) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-05"},{"lineNumber":8,"author":{"gitId":"choonkit-nus"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Ong Choon Kit | [Github](https://github.com/choonkit-nus) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"vvhuiling"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Huang Huiling | [Github](https://github.com/vvhuiling) | [Portfolio](docs/team/huiling.md)","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"aaronxujiachen":1,"spaceman03":1,"lckjosh":2,"-":3,"choonkit-nus":1,"vvhuiling":1}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"choonkit-nus"},"content":"# NUScents","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"-"},"content":"{Give product intro here}","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":5,"author":{"gitId":"-"},"content":"Useful links:","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"* [User Guide](UserGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"* [Developer Guide](DeveloperGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"* [About Us](AboutUs.md)","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"choonkit-nus":1,"-":7}},{"path":"src/main/java/seedu/nuscents/Nuscents.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents;","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.ExitCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.exception.NuscentsException;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.parser.Parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.storage.Storage;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.ui.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"import java.io.File;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"public class Nuscents {","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":" private Ui ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":" private Storage storage;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"lckjosh"},"content":" private TransactionList transactions;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":" * Sets up the required objects and loads up the data from the storage file.","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":" * @param filePath path of the file used to store data","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":" public Nuscents(String filePath) throws IOException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"spaceman03"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":" storage \u003d new Storage(filePath);","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"spaceman03"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"lckjosh"},"content":" transactions \u003d new TransactionList(storage.readDataFromFile());","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":" } catch (FileNotFoundException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"spaceman03"},"content":" Ui.showReadDataError();","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"spaceman03"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"spaceman03"},"content":" file.getParentFile().mkdirs();","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"spaceman03"},"content":" file.createNewFile();","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"lckjosh"},"content":" transactions \u003d new TransactionList(storage.readDataFromFile());","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"spaceman03"},"content":" * Runs the program until termination.","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"spaceman03"},"content":" public void run() {","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"spaceman03"},"content":" Ui.showWelcomeMessage();","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"spaceman03"},"content":" runProgramUntilTermination();","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"spaceman03"},"content":" * Reads the user command and executes it, until the user issues the \"bye\" command.","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":" * This method continuously prompts the user for commands and executes them until the user enters \"bye\".","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"spaceman03"},"content":" private void runProgramUntilTermination() {","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"spaceman03"},"content":" boolean isExit \u003d false;","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"spaceman03"},"content":" while (!isExit) {","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"spaceman03"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"spaceman03"},"content":" String fullCommand \u003d ui.getUserCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"lckjosh"},"content":" Command command \u003d Parser.parseCommand(fullCommand, transactions);","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"lckjosh"},"content":" command.execute(transactions);","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"spaceman03"},"content":" isExit \u003d ExitCommand.isExit(command);","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"lckjosh"},"content":" storage.writeToFile(transactions);","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"spaceman03"},"content":" } catch (NuscentsException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" ui.showException(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":" } catch (IOException | ParseException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"spaceman03"},"content":" Ui.showLine();","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"spaceman03"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"spaceman03"},"content":" Ui.showLine();","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"spaceman03"},"content":" } catch (IndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"spaceman03"},"content":" ui.showException(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":72,"author":{"gitId":"spaceman03"},"content":" public static void main(String[] args) throws IOException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"spaceman03"},"content":" new Nuscents(\"./data/nuscents.txt\").run();","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":75,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"spaceman03":68,"lckjosh":7}},{"path":"src/main/java/seedu/nuscents/commands/AddCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Transaction;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"public class AddCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"lckjosh"},"content":" private Transaction transaction;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":" public AddCommand(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"lckjosh"},"content":" this.transaction \u003d transaction;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"lckjosh"},"content":" public void execute(TransactionList transactions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"lckjosh"},"content":" transactions.addTransaction(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":10,"lckjosh":7}},{"path":"src/main/java/seedu/nuscents/commands/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.exception.NuscentsException;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"public abstract class Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":" * Executes the command.","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":" public abstract void execute(TransactionList transactionList) throws NuscentsException;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":10,"lckjosh":1}},{"path":"src/main/java/seedu/nuscents/commands/DeleteCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"public class DeleteCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":" private int taskIndex;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":" public DeleteCommand (int taskIndex) {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"lckjosh"},"content":" public void execute(TransactionList tasks) {","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"lckjosh"},"content":" tasks.deleteTransaction(taskIndex);","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":14,"lckjosh":3}},{"path":"src/main/java/seedu/nuscents/commands/ExitCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.ui.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"lckjosh"},"content":" public void execute(TransactionList tasks) {","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":" Ui.showGoodbyeMessage();","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":" public static boolean isExit(Command command) {","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":" return command instanceof ExitCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":13,"lckjosh":2}},{"path":"src/main/java/seedu/nuscents/commands/FindCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"public class FindCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":" private String keyword;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":" public FindCommand(String keyword) {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":" this.keyword \u003d keyword;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"lckjosh"},"content":" public void execute(TransactionList tasks) {","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":" tasks.findTask(keyword);","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":14,"lckjosh":2}},{"path":"src/main/java/seedu/nuscents/commands/HelpCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.ui.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":" public void execute(TransactionList tasks) {","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":" Ui.showHelpMenu();","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":10,"lckjosh":2}},{"path":"src/main/java/seedu/nuscents/commands/InvalidCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.exception.NuscentsException;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_UNKNOWN;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"lckjosh"},"content":" public void execute(TransactionList tasks) throws NuscentsException {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_UNKNOWN);","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":12,"lckjosh":2}},{"path":"src/main/java/seedu/nuscents/commands/ListCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.ui.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"lckjosh"},"content":" public void execute(TransactionList tasks) {","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":" Ui.showTransactionList(tasks);","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":8,"lckjosh":3}},{"path":"src/main/java/seedu/nuscents/commands/ListOfCommands.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":" * Container for valid commands executed by the user in the application.","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"public class ListOfCommands {","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"aaronxujiachen"},"content":" public static final String COMMAND_EXIT \u003d \"exit\";","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":" public static final String COMMAND_LIST \u003d \"list\";","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":" public static final String COMMAND_ALLOWANCE \u003d \"allowance\";","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"lckjosh"},"content":" public static final String COMMAND_EXPENSE \u003d \"expense\";","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":" public static final String COMMAND_EVENT \u003d \"event\";","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":" public static final String COMMAND_DELETE \u003d \"delete\";","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":" public static final String COMMAND_FIND \u003d \"find\";","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"vvhuiling"},"content":" public static final String COMMAND_VIEW \u003d \"view\";","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":" public static final String COMMAND_HELP \u003d \"help\";","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"aaronxujiachen":1,"spaceman03":12,"lckjosh":2,"vvhuiling":1}},{"path":"src/main/java/seedu/nuscents/commands/ViewCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"vvhuiling"},"content":"package seedu.nuscents.commands;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"vvhuiling"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"vvhuiling"},"content":"public class ViewCommand extends Command {","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"vvhuiling"},"content":" private int taskIndex;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"vvhuiling"},"content":" public ViewCommand (int taskIndex) {","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"vvhuiling"},"content":" this.taskIndex \u003d taskIndex;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"vvhuiling"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"vvhuiling"},"content":" public void execute(TransactionList tasks) {","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"vvhuiling"},"content":" tasks.viewTransaction(taskIndex);","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"vvhuiling"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"vvhuiling":15}},{"path":"src/main/java/seedu/nuscents/data/Allowance.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"lckjosh"},"content":"public class Allowance extends Transaction {","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"choonkit-nus"},"content":" public Allowance(float amount, Date date, String description, String additionalInfo) {","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"lckjosh"},"content":" super(amount, date, description, additionalInfo);","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":4,"lckjosh":4,"choonkit-nus":1}},{"path":"src/main/java/seedu/nuscents/data/Expense.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"lckjosh"},"content":"public class Expense extends Transaction {","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"choonkit-nus"},"content":" public Expense(float amount, Date date, String description, String additionalInfo) {","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"lckjosh"},"content":" super(amount, date, description, additionalInfo);","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":4,"lckjosh":4,"choonkit-nus":1}},{"path":"src/main/java/seedu/nuscents/data/Transaction.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"/**","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"lckjosh"},"content":" * Represents a Transaction in the TransactionList","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":"public class Transaction {","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":" private static int count \u003d 0;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"choonkit-nus"},"content":" protected float amount;","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":" protected Date date;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":" protected String description;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"lckjosh"},"content":" protected String additionalInfo;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"lckjosh"},"content":" public Transaction(String description) {","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":" count++;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"choonkit-nus"},"content":" public Transaction(float amount, Date date, String description) {","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"lckjosh"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"lckjosh"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"lckjosh"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"lckjosh"},"content":" count++;","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"choonkit-nus"},"content":" public Transaction(float amount, Date date, String description, String additionalInfo) {","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"lckjosh"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"lckjosh"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"lckjosh"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"lckjosh"},"content":" this.additionalInfo \u003d additionalInfo;","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"lckjosh"},"content":" count++;","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"choonkit-nus"},"content":" public float getAmount() {","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"lckjosh"},"content":" return amount;","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"spaceman03"},"content":" public Date getDate() {","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"lckjosh"},"content":" return date;","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"spaceman03"},"content":" public String getFormattedDate() {","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"spaceman03"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(\"dd MMMM, yyyy\");","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"spaceman03"},"content":" return formatter.format(date);","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":" public String getDescription() {","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":" return description;","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"lckjosh"},"content":" public String getAdditionalInfo() {","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"lckjosh"},"content":" return additionalInfo;","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"spaceman03"},"content":" public String toString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"spaceman03"},"content":" return getAmount() + \" | \" + getFormattedDate() + \" | \" + getDescription() + \" | \" + getAdditionalInfo();","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"lckjosh"},"content":" public static int getTransactionCount() {","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" return count;","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"spaceman03"},"content":" * Decrease the task count by one when a task is deleted.","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"lckjosh"},"content":" public static void decreaseTransactionCountByOne() {","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"spaceman03"},"content":" count--;","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":38,"lckjosh":29,"choonkit-nus":4}},{"path":"src/main/java/seedu/nuscents/data/TransactionList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lckjosh"},"content":"package seedu.nuscents.data;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"lckjosh"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.LINE;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"lckjosh"},"content":"public class TransactionList {","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"lckjosh"},"content":" private ArrayList\u003cTransaction\u003e transactions;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"lckjosh"},"content":" public TransactionList() {","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":" transactions \u003d new ArrayList\u003cTransaction\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"lckjosh"},"content":" public TransactionList(ArrayList\u003cTransaction\u003e transactions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"lckjosh"},"content":" this.transactions \u003d transactions;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"lckjosh"},"content":" public ArrayList\u003cTransaction\u003e getTransactions() {","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"lckjosh"},"content":" return transactions;","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"lckjosh"},"content":" public void addTransaction(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"lckjosh"},"content":" transactions.add(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"lckjosh"},"content":" Ui.showTransactionAddedMessage(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"lckjosh"},"content":" public void deleteTransaction(int transactionIndex) {","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"lckjosh"},"content":" Transaction transaction \u003d transactions.get(transactionIndex-1);","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"lckjosh"},"content":" transactions.remove(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"lckjosh"},"content":" Transaction.decreaseTransactionCountByOne();","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"lckjosh"},"content":" Ui.showTransactionRemovedMessage(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"lckjosh"},"content":" public void findTask(String keyword) {","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"lckjosh"},"content":" ArrayList\u003cTransaction\u003e results \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"lckjosh"},"content":" boolean isFound \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"lckjosh"},"content":" for (Transaction transaction : transactions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"lckjosh"},"content":" if (transaction.getDescription().contains(keyword.toLowerCase())) {","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"lckjosh"},"content":" isFound \u003d true;","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"lckjosh"},"content":" results.add(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"lckjosh"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"lckjosh"},"content":" if (isFound) {","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"lckjosh"},"content":" int resultCount \u003d 1;","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Here are the matching tasks in your list:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"lckjosh"},"content":" for (Transaction transaction : results) {","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":" System.out.println(resultCount + \". \" + transaction.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"lckjosh"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"No matching tasks are found :/\");","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"lckjosh"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"vvhuiling"},"content":" public void viewTransaction(int transactionIndex) {","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"vvhuiling"},"content":" Transaction transaction \u003d transactions.get(transactionIndex-1);","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"vvhuiling"},"content":" Ui.showTransactionViewMessage(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"lckjosh"},"content":"}","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"spaceman03":2,"lckjosh":56,"vvhuiling":5}},{"path":"src/main/java/seedu/nuscents/data/exception/NuscentsException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.data.exception;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"public class NuscentsException extends Exception {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":" public NuscentsException(String message) {","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":" super(message);","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":7}},{"path":"src/main/java/seedu/nuscents/parser/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.ExitCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.ListCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.AddCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.DeleteCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.FindCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.HelpCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.commands.InvalidCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"vvhuiling"},"content":"import seedu.nuscents.commands.ViewCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Transaction;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Allowance;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Expense;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.exception.NuscentsException;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"aaronxujiachen"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_EXIT;","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_LIST;","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_ALLOWANCE;","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_EXPENSE;","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_DELETE;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_FIND;","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_HELP;","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"vvhuiling"},"content":"import static seedu.nuscents.commands.ListOfCommands.COMMAND_VIEW;","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_ALLOWANCE;","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_EXPENSE;","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_INDEX;","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_KEYWORD;","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_FATAL_ERROR;","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_INVALID_DATE;","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"lckjosh"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_INVALID_INDEX;","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"vvhuiling"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_INVALID_INDEX_ARGUMENTS;","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"choonkit-nus"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_INVALID_AMOUNT;","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"spaceman03"},"content":"public class Parser {","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"spaceman03"},"content":" private static final String DATE_PATTERN1 \u003d \"\\\\d{1,2}-\\\\d{1,2}-\\\\d{4}\"; // dd-mm-yyyy","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"spaceman03"},"content":" private static final String DATE_PATTERN2 \u003d \"\\\\d{4}-\\\\d{1,2}-\\\\d{1,2}\"; // yyyy-mm-dd","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"lckjosh"},"content":" private static final String AMT_PATTERN \u003d \"/amt ([^/]+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"lckjosh"},"content":" private static final String DATE_PATTERN \u003d \"/date ([^/]+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"lckjosh"},"content":" private static final String DESC_PATTERN \u003d \"/desc ([^/]+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"lckjosh"},"content":" private static final String NOTE_PATTERN \u003d \"/note ([^/]+)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":" public static \u003cTaskList\u003e Command parseCommand(String text, TaskList tasks) throws NuscentsException,","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":" ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"spaceman03"},"content":" String[] commandTypeAndArgs \u003d text.split(\" \", 2);","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"spaceman03"},"content":" String commandType \u003d commandTypeAndArgs[0];","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"spaceman03"},"content":" String arguments;","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"spaceman03"},"content":" if (commandTypeAndArgs.length \u003e 1) {","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"spaceman03"},"content":" arguments \u003d commandTypeAndArgs[1];","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"spaceman03"},"content":" arguments \u003d null;","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"spaceman03"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"spaceman03"},"content":" switch (commandType) {","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"aaronxujiachen"},"content":" case COMMAND_EXIT:","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":" return new ExitCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"spaceman03"},"content":" case COMMAND_LIST:","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"spaceman03"},"content":" return new ListCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"lckjosh"},"content":" case COMMAND_ALLOWANCE:","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"lckjosh"},"content":" return new AddCommand(parseAllowance(arguments));","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"lckjosh"},"content":" case COMMAND_EXPENSE:","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"lckjosh"},"content":" return new AddCommand(parseExpense(arguments));","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"spaceman03"},"content":" case COMMAND_DELETE:","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"spaceman03"},"content":" return new DeleteCommand(parseTaskIndex(arguments));","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"spaceman03"},"content":" case COMMAND_FIND:","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"spaceman03"},"content":" return new FindCommand(parseFind(arguments));","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"vvhuiling"},"content":" case COMMAND_VIEW:","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"vvhuiling"},"content":" return new ViewCommand(parseTaskIndex(arguments));","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"spaceman03"},"content":" case COMMAND_HELP:","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"aaronxujiachen"},"content":" if (arguments !\u003d null) {","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"aaronxujiachen"},"content":" throw new NuscentsException(\"OOPS!!! The correct format is \u0027help\u0027 alone.\");","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"aaronxujiachen"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"spaceman03"},"content":" return new HelpCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"spaceman03"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"spaceman03"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"spaceman03"},"content":" } catch (NuscentsException | ParseException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"spaceman03"},"content":" throw e;","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"spaceman03"},"content":" private static String datePatternValidation(String date) throws NuscentsException {","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"spaceman03"},"content":" if (date.matches(DATE_PATTERN1)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"spaceman03"},"content":" return \"d-M-yyyy\";","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"spaceman03"},"content":" } else if (date.matches(DATE_PATTERN2)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"spaceman03"},"content":" return \"yyyy-M-d\";","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_INVALID_DATE);","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"spaceman03"},"content":" public static Date parseDate(String date, String format, SimpleDateFormat formatter)","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"spaceman03"},"content":" throws NuscentsException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"spaceman03"},"content":" String separator;","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"spaceman03"},"content":" if (format.contains(\"-\")) {","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"spaceman03"},"content":" separator \u003d \"-\";","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"spaceman03"},"content":" separator \u003d \"/\";","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"spaceman03"},"content":" String[] dateMonthYear \u003d date.split(separator);","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"spaceman03"},"content":" if (Integer.parseInt(dateMonthYear[1]) \u003e 12) {","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_INVALID_DATE);","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":110,"author":{"gitId":"spaceman03"},"content":" return formatter.parse(date);","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"lckjosh"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"lckjosh"},"content":" * Parsers arguments in the context of adding an allowance.","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"lckjosh"},"content":" * @param arguments full command argument string","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"lckjosh"},"content":" * @return a {@link Allowance} object","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"lckjosh"},"content":" * @throws NuscentsException If the description of the allowance is empty.","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"lckjosh"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"spaceman03"},"content":" public static Allowance parseAllowance(String arguments) throws NuscentsException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"spaceman03"},"content":" if (arguments \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_EMPTY_ALLOWANCE);","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":124,"author":{"gitId":"choonkit-nus"},"content":" float amount \u003d 0;","lastModifiedDate":"2023-10-22"},{"lineNumber":125,"author":{"gitId":"choonkit-nus"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":126,"author":{"gitId":"choonkit-nus"},"content":" amount \u003d Float.parseFloat(extractValue(\"allowance\", arguments, AMT_PATTERN, false));","lastModifiedDate":"2023-10-23"},{"lineNumber":127,"author":{"gitId":"choonkit-nus"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":128,"author":{"gitId":"choonkit-nus"},"content":" throw new NuscentsException(MESSAGE_INVALID_AMOUNT);","lastModifiedDate":"2023-10-22"},{"lineNumber":129,"author":{"gitId":"choonkit-nus"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":130,"author":{"gitId":"lckjosh"},"content":" String date \u003d extractValue(\"allowance\", arguments, DATE_PATTERN, false);","lastModifiedDate":"2023-10-17"},{"lineNumber":131,"author":{"gitId":"lckjosh"},"content":" String description \u003d extractValue(\"allowance\", arguments, DESC_PATTERN, false);","lastModifiedDate":"2023-10-17"},{"lineNumber":132,"author":{"gitId":"lckjosh"},"content":" String additionalInformation \u003d extractValue(\"allowance\", arguments, NOTE_PATTERN, true);","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"spaceman03"},"content":" String format \u003d datePatternValidation(date);","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"spaceman03"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(format);","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"spaceman03"},"content":" Date formattedDate \u003d parseDate(date, format, formatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":136,"author":{"gitId":"lckjosh"},"content":" return new Allowance(amount, formattedDate, description, additionalInformation);","lastModifiedDate":"2023-10-17"},{"lineNumber":137,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":138,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":139,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":140,"author":{"gitId":"lckjosh"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":141,"author":{"gitId":"lckjosh"},"content":" * Parsers arguments in the context of adding an expense.","lastModifiedDate":"2023-10-17"},{"lineNumber":142,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":143,"author":{"gitId":"lckjosh"},"content":" * @param arguments full command argument string","lastModifiedDate":"2023-10-17"},{"lineNumber":144,"author":{"gitId":"lckjosh"},"content":" * @return a {@link Expense} object","lastModifiedDate":"2023-10-17"},{"lineNumber":145,"author":{"gitId":"lckjosh"},"content":" * @throws NuscentsException If the description of the expense is empty.","lastModifiedDate":"2023-10-17"},{"lineNumber":146,"author":{"gitId":"lckjosh"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":147,"author":{"gitId":"spaceman03"},"content":" public static Expense parseExpense(String arguments) throws NuscentsException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":148,"author":{"gitId":"lckjosh"},"content":" if (arguments \u003d\u003d null) {","lastModifiedDate":"2023-10-17"},{"lineNumber":149,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_EMPTY_EXPENSE);","lastModifiedDate":"2023-10-17"},{"lineNumber":150,"author":{"gitId":"lckjosh"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":151,"author":{"gitId":"choonkit-nus"},"content":" float amount \u003d 0;","lastModifiedDate":"2023-10-22"},{"lineNumber":152,"author":{"gitId":"choonkit-nus"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":153,"author":{"gitId":"choonkit-nus"},"content":" amount \u003d Float.parseFloat(extractValue(\"expense\", arguments, AMT_PATTERN, false));","lastModifiedDate":"2023-10-22"},{"lineNumber":154,"author":{"gitId":"choonkit-nus"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":155,"author":{"gitId":"choonkit-nus"},"content":" throw new NuscentsException(MESSAGE_INVALID_AMOUNT);","lastModifiedDate":"2023-10-22"},{"lineNumber":156,"author":{"gitId":"choonkit-nus"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":157,"author":{"gitId":"lckjosh"},"content":" String date \u003d extractValue(\"expense\", arguments, DATE_PATTERN, false);","lastModifiedDate":"2023-10-17"},{"lineNumber":158,"author":{"gitId":"lckjosh"},"content":" String description \u003d extractValue(\"expense\", arguments, DESC_PATTERN, false);","lastModifiedDate":"2023-10-17"},{"lineNumber":159,"author":{"gitId":"lckjosh"},"content":" String additionalInformation \u003d extractValue(\"expense\", arguments, NOTE_PATTERN, true);","lastModifiedDate":"2023-10-17"},{"lineNumber":160,"author":{"gitId":"spaceman03"},"content":" String format \u003d datePatternValidation(date);","lastModifiedDate":"2023-10-17"},{"lineNumber":161,"author":{"gitId":"spaceman03"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(format);","lastModifiedDate":"2023-10-17"},{"lineNumber":162,"author":{"gitId":"spaceman03"},"content":" Date formattedDate \u003d parseDate(date, format, formatter);","lastModifiedDate":"2023-10-17"},{"lineNumber":163,"author":{"gitId":"lckjosh"},"content":" return new Expense(amount, formattedDate, description, additionalInformation);","lastModifiedDate":"2023-10-17"},{"lineNumber":164,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":165,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":166,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":167,"author":{"gitId":"spaceman03"},"content":" public static int parseTaskIndex(String arguments) throws IndexOutOfBoundsException,","lastModifiedDate":"2023-10-16"},{"lineNumber":168,"author":{"gitId":"spaceman03"},"content":" NuscentsException {","lastModifiedDate":"2023-10-16"},{"lineNumber":169,"author":{"gitId":"spaceman03"},"content":" if (arguments \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":170,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_EMPTY_INDEX);","lastModifiedDate":"2023-10-16"},{"lineNumber":171,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":172,"author":{"gitId":"vvhuiling"},"content":" try {","lastModifiedDate":"2023-10-18"},{"lineNumber":173,"author":{"gitId":"spaceman03"},"content":" int taskIndex \u003d Integer.parseInt(arguments);","lastModifiedDate":"2023-10-16"},{"lineNumber":174,"author":{"gitId":"lckjosh"},"content":" if (taskIndex \u003e Transaction.getTransactionCount() || taskIndex \u003c\u003d 0) {","lastModifiedDate":"2023-10-17"},{"lineNumber":175,"author":{"gitId":"spaceman03"},"content":" throw new IndexOutOfBoundsException(MESSAGE_INVALID_INDEX);","lastModifiedDate":"2023-10-16"},{"lineNumber":176,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":177,"author":{"gitId":"spaceman03"},"content":" return taskIndex;","lastModifiedDate":"2023-10-16"},{"lineNumber":178,"author":{"gitId":"vvhuiling"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-18"},{"lineNumber":179,"author":{"gitId":"vvhuiling"},"content":" throw new NuscentsException(MESSAGE_INVALID_INDEX_ARGUMENTS);","lastModifiedDate":"2023-10-18"},{"lineNumber":180,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":181,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":182,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":183,"author":{"gitId":"spaceman03"},"content":" public static String parseFind(String arguments) throws NuscentsException {","lastModifiedDate":"2023-10-16"},{"lineNumber":184,"author":{"gitId":"spaceman03"},"content":" if (arguments \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":185,"author":{"gitId":"spaceman03"},"content":" throw new NuscentsException(MESSAGE_EMPTY_KEYWORD);","lastModifiedDate":"2023-10-16"},{"lineNumber":186,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":187,"author":{"gitId":"spaceman03"},"content":" return arguments;","lastModifiedDate":"2023-10-16"},{"lineNumber":188,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":189,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":190,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":191,"author":{"gitId":"lckjosh"},"content":" private static String extractValue(String command, String input, String pattern, boolean isOptional)","lastModifiedDate":"2023-10-17"},{"lineNumber":192,"author":{"gitId":"lckjosh"},"content":" throws NuscentsException {","lastModifiedDate":"2023-10-17"},{"lineNumber":193,"author":{"gitId":"lckjosh"},"content":" java.util.regex.Pattern p \u003d java.util.regex.Pattern.compile(pattern);","lastModifiedDate":"2023-10-17"},{"lineNumber":194,"author":{"gitId":"lckjosh"},"content":" java.util.regex.Matcher m \u003d p.matcher(input);","lastModifiedDate":"2023-10-17"},{"lineNumber":195,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":196,"author":{"gitId":"lckjosh"},"content":" if (m.find()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":197,"author":{"gitId":"lckjosh"},"content":" return m.group(1).trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":198,"author":{"gitId":"lckjosh"},"content":" } else if (!isOptional) {","lastModifiedDate":"2023-10-17"},{"lineNumber":199,"author":{"gitId":"lckjosh"},"content":" switch (command) {","lastModifiedDate":"2023-10-17"},{"lineNumber":200,"author":{"gitId":"lckjosh"},"content":" case \"allowance\":","lastModifiedDate":"2023-10-17"},{"lineNumber":201,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_EMPTY_ALLOWANCE);","lastModifiedDate":"2023-10-17"},{"lineNumber":202,"author":{"gitId":"lckjosh"},"content":" case \"expense\":","lastModifiedDate":"2023-10-17"},{"lineNumber":203,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_EMPTY_EXPENSE);","lastModifiedDate":"2023-10-17"},{"lineNumber":204,"author":{"gitId":"lckjosh"},"content":" default:","lastModifiedDate":"2023-10-17"},{"lineNumber":205,"author":{"gitId":"lckjosh"},"content":" throw new NuscentsException(MESSAGE_FATAL_ERROR);","lastModifiedDate":"2023-10-17"},{"lineNumber":206,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":207,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":208,"author":{"gitId":"lckjosh"},"content":" return \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":209,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":210,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"aaronxujiachen":5,"spaceman03":113,"lckjosh":70,"vvhuiling":9,"choonkit-nus":13}},{"path":"src/main/java/seedu/nuscents/storage/Storage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.storage;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Allowance;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Expense;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Transaction;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"import java.io.File;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"import java.io.FileNotFoundException;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":"public class Storage {","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":" private static final Logger logger \u003d Logger.getLogger(Storage.class.getName());","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":" private String filePath;","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"spaceman03"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":" this.filePath \u003d filePath;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":" public String getPath() {","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"spaceman03"},"content":" return filePath;","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"spaceman03"},"content":" * Reads data from the storage file and return it.","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"spaceman03"},"content":" * @return an arraylist of tasks","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"spaceman03"},"content":" * @throws FileNotFoundException If the storage file does not exist.","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"spaceman03"},"content":" public ArrayList\u003cTransaction\u003e readDataFromFile() throws FileNotFoundException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"lckjosh"},"content":" ArrayList\u003cTransaction\u003e transactions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"spaceman03"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"Creating a File object to read data from file\");","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"spaceman03"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"lckjosh"},"content":" transactionDecoder(file, transactions);","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"spaceman03"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.WARNING, \"Something went wrong when reading data from file\");","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"spaceman03"},"content":" Ui.showLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":" System.out.println(\"Something went wrong: \" + e.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":" Ui.showLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"All data successfully loaded\");","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"lckjosh"},"content":" return transactions;","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"spaceman03"},"content":" * Decodes the storage data file and store it into the arraylist of tasks.","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"spaceman03"},"content":" * @param file storage data file","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"lckjosh"},"content":" * @param transactions arraylist of tasks","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" * @throws FileNotFoundException If the storage data file does not exist.","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"lckjosh"},"content":" private static void transactionDecoder(File file, ArrayList\u003cTransaction\u003e transactions)","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"spaceman03"},"content":" throws FileNotFoundException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"spaceman03"},"content":" Scanner data \u003d new Scanner(file);","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"spaceman03"},"content":" while (data.hasNext()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"lckjosh"},"content":" String transactionDetails \u003d data.nextLine();","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"lckjosh"},"content":" char transactionType \u003d transactionDetails.charAt(0);","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"lckjosh"},"content":" String[] columns;","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"choonkit-nus"},"content":" float amount;","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"spaceman03"},"content":" Date date;","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"lckjosh"},"content":" String description \u003d \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"lckjosh"},"content":" String note \u003d \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"spaceman03"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(\"dd MMMM, yyyy\");","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"lckjosh"},"content":" switch (transactionType) {","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"lckjosh"},"content":" case \u0027A\u0027:","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"lckjosh"},"content":" columns \u003d transactionDetails.split(\"\\\\s*\\\\|\\\\s*\");","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"choonkit-nus"},"content":" amount \u003d Float.parseFloat(columns[1]);","lastModifiedDate":"2023-10-22"},{"lineNumber":79,"author":{"gitId":"spaceman03"},"content":" date \u003d formatter.parse(columns[2]);","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"lckjosh"},"content":" description \u003d columns[3];","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"lckjosh"},"content":" note \u003d \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"lckjosh"},"content":" if (columns.length \u003e 4) {","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"lckjosh"},"content":" note \u003d columns[4];","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"lckjosh"},"content":" transactions.add(new Allowance(amount, date, description, note));","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"lckjosh"},"content":" case \u0027E\u0027:","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"lckjosh"},"content":" columns \u003d transactionDetails.split(\"\\\\s*\\\\|\\\\s*\");","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"choonkit-nus"},"content":" amount \u003d Float.parseFloat(columns[1]);","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"spaceman03"},"content":" date \u003d formatter.parse(columns[2]);","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"lckjosh"},"content":" description \u003d columns[3];","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"lckjosh"},"content":" note \u003d \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"lckjosh"},"content":" if (columns.length \u003e 4) {","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"lckjosh"},"content":" note \u003d columns[4];","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"lckjosh"},"content":" transactions.add(new Expense(amount, date, description, note));","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"lckjosh"},"content":" break;","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"spaceman03"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"spaceman03"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"spaceman03"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"spaceman03"},"content":" * Writes the data to the storage file.","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"spaceman03"},"content":" * Creates a new file if the file does not exist.","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"lckjosh"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"lckjosh"},"content":" * @param transactionList list of tasks","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"spaceman03"},"content":" * @throws IOException If there were errors converting and/or storing the data to the file.","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"spaceman03"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"lckjosh"},"content":" public void writeToFile(TransactionList transactionList) throws IOException {","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"spaceman03"},"content":" File file \u003d new File(filePath);","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"spaceman03"},"content":" FileWriter fw \u003d new FileWriter(file);","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"Creating a File object to write data to file\");","lastModifiedDate":"2023-10-18"},{"lineNumber":117,"author":{"gitId":"lckjosh"},"content":" ArrayList\u003cTransaction\u003e transactions \u003d transactionList.getTransactions();","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"lckjosh"},"content":" for (Transaction transaction : transactions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"Converting info to storage format\");","lastModifiedDate":"2023-10-18"},{"lineNumber":120,"author":{"gitId":"spaceman03"},"content":" String output \u003d toStorageFormat(transaction);","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"spaceman03"},"content":" fw.write(output);","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"spaceman03"},"content":" fw.write(\"\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":124,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.INFO, \"Transaction data successfully stored\");","lastModifiedDate":"2023-10-18"},{"lineNumber":125,"author":{"gitId":"spaceman03"},"content":" fw.close();","lastModifiedDate":"2023-10-16"},{"lineNumber":126,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":127,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":128,"author":{"gitId":"spaceman03"},"content":" private static String toStorageFormat(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":129,"author":{"gitId":"lckjosh"},"content":" if (transaction instanceof Allowance) {","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"spaceman03"},"content":" return \"A\" + \" | \" + transaction.toString();","lastModifiedDate":"2023-10-17"},{"lineNumber":131,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":132,"author":{"gitId":"lckjosh"},"content":" } else if (transaction instanceof Expense) {","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"spaceman03"},"content":" return \"E\" + \" | \" + transaction.toString();","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":136,"author":{"gitId":"spaceman03"},"content":" logger.log(Level.WARNING, \"Invalid transaction format\");","lastModifiedDate":"2023-10-18"},{"lineNumber":137,"author":{"gitId":"spaceman03"},"content":" return null;","lastModifiedDate":"2023-10-16"},{"lineNumber":138,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":139,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":140,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"},{"lineNumber":141,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spaceman03":94,"lckjosh":44,"choonkit-nus":3}},{"path":"src/main/java/seedu/nuscents/ui/Messages.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"public class Messages {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":" public static final String LINE \u003d \"-------------------------------------------------------------------------------\";","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":" public static final String LOGO \u003d \" __ __ __ __ ____ _____ _____ __ __ ________ ____\\n\"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":" + \"| \\\\ | | | | |/ / / __| | \\\\ | |__ __|/ /\\n\"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":" + \"| \\\\| | | | |\\\\ __\\\\| / | __| \\\\| | | | \\\\ __\\\\\\n\"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":" + \"| | | | | \\\\__ | | | __| | | | \\\\__ |\\n\"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":" + \"| | |__| |/ | \\\\__| | | | | / |\\n\"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":" + \"|__|\\\\___|________|______/ \\\\_____|_____|__|\\\\___| |__| |_____/\\n\";","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"aaronxujiachen"},"content":" public static final String MESSAGE_EXIT \u003d \"Thank you for using NUScents. Hope to see you again soon!\";","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"aaronxujiachen"},"content":" public static final String HELP_MENU \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"aaronxujiachen"},"content":" \"- `list` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"aaronxujiachen"},"content":" \" Show a list of all entries.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"aaronxujiachen"},"content":" \"- `allowance /amt AMOUNT /date DATE /desc DESCRIPTION \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"aaronxujiachen"},"content":" \"[/note ADDITIONAL_INFORMATION]` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"aaronxujiachen"},"content":" \" Add an allowance.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"aaronxujiachen"},"content":" \"- `expense /amt AMOUNT /date DATE /desc DESCRIPTION \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"aaronxujiachen"},"content":" \"[/note ADDITIONAL_INFORMATION]` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"aaronxujiachen"},"content":" \" Add an expense.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"aaronxujiachen"},"content":" \"- `delete ENTRY_NUMBER` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"aaronxujiachen"},"content":" \" Delete an entry.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"aaronxujiachen"},"content":" \"- `view ENTRY_NUMBER` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"aaronxujiachen"},"content":" \" View an entry detail.\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"aaronxujiachen"},"content":" \"- `exit` :\" + System.lineSeparator() +","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"aaronxujiachen"},"content":" \" Exit the program.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_UNKNOWN \u003d \"OOPS!!! I\u0027m sorry, but I don\u0027t know what that means :-(\";","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_MARK \u003d \"Nice! I\u0027ve marked this task as done:\";","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_UNMARK \u003d \"OK, I\u0027ve marked this task as not done yet:\";","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_EMPTY_TODO \u003d \"OOPS!!! The description of a todo cannot be empty.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"lckjosh"},"content":" public static final String MESSAGE_EMPTY_ALLOWANCE \u003d \"OOPS!!! Invalid input format for adding an allowance.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"lckjosh"},"content":" public static final String MESSAGE_EMPTY_EXPENSE \u003d \"OOPS!!! Invalid input format for adding an expense.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_EMPTY_BY \u003d \"OOPS!!! The /by parameter of a deadline cannot be empty.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_EMPTY_EVENT \u003d \"OOPS!!! The description of an event cannot be empty.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_EMPTY_FROM \u003d \"OOPS!!! The /from parameter of an event cannot be empty.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_EMPTY_TO \u003d \"OOPS!!! The /to parameter of an event cannot be empty.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"choonkit-nus"},"content":" public static final String MESSAGE_INVALID_AMOUNT \u003d \"OOPS!!! The amount entered needs to be a float!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_INVALID_DATE \u003d \"OOPS!!! The format of the date is invalid.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"lckjosh"},"content":" public static final String MESSAGE_INVALID_INDEX \u003d \"OOPS!!! This is an invalid transaction index.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"vvhuiling"},"content":" public static final String MESSAGE_INVALID_INDEX_ARGUMENTS \u003d \"OOPS!!! The input should consist only of digits.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"lckjosh"},"content":" public static final String MESSAGE_EMPTY_LIST \u003d \"You have not made any transactions!\";","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_EMPTY_KEYWORD \u003d \"OOPS!!! The keyword of a find command cannot be empty.\";","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"vvhuiling"},"content":" public static final String MESSAGE_EMPTY_INDEX \u003d \"OOPS!!! The index of a delete/view command cannot be empty.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"lckjosh"},"content":" public static final String MESSAGE_FATAL_ERROR \u003d \"OOPS!!! Fatal error occurred...\";","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"spaceman03"},"content":" public static final String MESSAGE_READ_ERROR \u003d \"OOPS!!! A problem occurred while reading the data file.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"aaronxujiachen":16,"spaceman03":22,"lckjosh":5,"choonkit-nus":1,"vvhuiling":2}},{"path":"src/main/java/seedu/nuscents/ui/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.Allowance;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.Expense;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Transaction;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"aaronxujiachen"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EXIT;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.LINE;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.LOGO;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.ui.Messages.MESSAGE_EMPTY_LIST;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"public class Ui {","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":" private final Scanner input;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":" public Ui() {","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":" this.input \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":" public String getUserCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":" return input.nextLine();","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":" public static void showLine() {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"spaceman03"},"content":" public static void showWelcomeMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"spaceman03"},"content":" System.out.println(\"Hello from\\n\" + LOGO);","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"spaceman03"},"content":" System.out.println(\"What can I do for you?\");","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"aaronxujiachen"},"content":" System.out.println(\"Hint: To view a list of all possible commands, please enter \u0027help\u0027.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"spaceman03"},"content":" public static void showGoodbyeMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"aaronxujiachen"},"content":" System.out.println(MESSAGE_EXIT);","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"spaceman03"},"content":" public void showException(Exception e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"spaceman03"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"lckjosh"},"content":" public static void showTransactionCount( ) {","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Now you have \" + Transaction.getTransactionCount() + \" transactions in the list.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"lckjosh"},"content":" public static void showTransactionAddedMessage(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Got it. I\u0027ve added this transaction:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"spaceman03"},"content":" System.out.println(\" \" + transaction.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"lckjosh"},"content":" showTransactionCount();","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"lckjosh"},"content":" public static void showTransactionRemovedMessage(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Noted. I\u0027ve removed this transaction:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"spaceman03"},"content":" System.out.println(\" \" + transaction.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"lckjosh"},"content":" showTransactionCount();","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"lckjosh"},"content":" public static void showTransactionList(TransactionList transactionList) {","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"choonkit-nus"},"content":" float netBalance \u003d 0;","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"lckjosh"},"content":" if (transactionList.getTransactions().isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"spaceman03"},"content":" System.out.println(MESSAGE_EMPTY_LIST);","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"spaceman03"},"content":" return;","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"spaceman03"},"content":" assert transactionList.getTransactions() !\u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"lckjosh"},"content":" System.out.println(\"Here are the transactions in your list:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"spaceman03"},"content":" System.out.printf(\"%-5s %-10s %-7s %-18s %-15s %-5s %n\",","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"spaceman03"},"content":" \"S/N\", \"TYPE\", \"AMOUNT\", \"DATE\", \"DESCRIPTION\", \"NOTE\");","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"lckjosh"},"content":" ArrayList\u003cTransaction\u003e transactions \u003d transactionList.getTransactions();","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"lckjosh"},"content":" for (Transaction transaction : transactions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"spaceman03"},"content":" int index \u003d transactions.indexOf(transaction) + 1;","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"spaceman03"},"content":" String additionalInfo \u003d transaction.getAdditionalInfo();","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"spaceman03"},"content":" String note;","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"spaceman03"},"content":" if (additionalInfo.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"spaceman03"},"content":" note \u003d \"-\";","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"spaceman03"},"content":" } else {","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"spaceman03"},"content":" note \u003d additionalInfo;","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"spaceman03"},"content":" if (transaction instanceof Allowance) {","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"spaceman03"},"content":" System.out.printf(\"%-5s %-10s %-7s %-18s %-15s %-5s %n\", index, \"Allowance\",","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"choonkit-nus"},"content":" \"$\" + String.format(\"%.2f\", transaction.getAmount()), transaction.getFormattedDate(),","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"choonkit-nus"},"content":" transaction.getDescription(), note);","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"choonkit-nus"},"content":" netBalance +\u003d transaction.getAmount();","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"spaceman03"},"content":" } else if (transaction instanceof Expense) {","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"spaceman03"},"content":" System.out.printf(\"%-5s %-10s %-7s %-18s %-15s %-5s %n\", index, \"Expense\",","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"choonkit-nus"},"content":" \"$\" + String.format(\"%.2f\", transaction.getAmount()), transaction.getFormattedDate(),","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"choonkit-nus"},"content":" transaction.getDescription(), note);","lastModifiedDate":"2023-10-22"},{"lineNumber":104,"author":{"gitId":"choonkit-nus"},"content":" netBalance -\u003d transaction.getAmount();","lastModifiedDate":"2023-10-22"},{"lineNumber":105,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"choonkit-nus"},"content":" System.out.println(\"Net Balance \u003d \" + String.format(\"%.2f\", netBalance));","lastModifiedDate":"2023-10-22"},{"lineNumber":109,"author":{"gitId":"choonkit-nus"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-22"},{"lineNumber":110,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":111,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"spaceman03"},"content":" public static void showReadDataError() {","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"spaceman03"},"content":" System.out.println(\"No previous data found /:\");","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":116,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":118,"author":{"gitId":"vvhuiling"},"content":" public static void showTransactionViewMessage(Transaction transaction) {","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"vvhuiling"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"Following are details of the transaction:\");","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"vvhuiling"},"content":" if (transaction instanceof Allowance) {","lastModifiedDate":"2023-10-17"},{"lineNumber":122,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"TYPE: ALLOWANCE\");","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"vvhuiling"},"content":" } else if (transaction instanceof Expense) {","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"TYPE: EXPENSE\");","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":126,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"DATE: \" + transaction.getFormattedDate());","lastModifiedDate":"2023-10-17"},{"lineNumber":127,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"AMOUNT: \" + transaction.getAmount());","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"DESCRIPTION: \" + transaction.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":129,"author":{"gitId":"vvhuiling"},"content":" System.out.println(\"NOTE: \" + transaction.getAdditionalInfo());","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"vvhuiling"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-17"},{"lineNumber":131,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":132,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"spaceman03"},"content":" public static void showHelpMenu() {","lastModifiedDate":"2023-10-16"},{"lineNumber":134,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":135,"author":{"gitId":"aaronxujiachen"},"content":" System.out.println(Messages.HELP_MENU);","lastModifiedDate":"2023-10-18"},{"lineNumber":136,"author":{"gitId":"spaceman03"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-16"},{"lineNumber":137,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":138,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":139,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"aaronxujiachen":5,"spaceman03":95,"lckjosh":15,"choonkit-nus":9,"vvhuiling":15}},{"path":"src/test/java/seedu/nuscents/NuscentsTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents;","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"class NuscentsTest {","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":" public void sampleTest() {","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":" assertTrue(true);","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"spaceman03":2,"-":10}},{"path":"src/test/java/seedu/nuscents/parser/ParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"lckjosh"},"content":"package seedu.nuscents.parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"lckjosh"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"vvhuiling"},"content":"import seedu.nuscents.data.Transaction;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Allowance;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.Expense;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"lckjosh"},"content":"import seedu.nuscents.data.exception.NuscentsException;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"aaronxujiachen"},"content":"import seedu.nuscents.commands.Command;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"aaronxujiachen"},"content":"import seedu.nuscents.commands.HelpCommand;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"lckjosh"},"content":"import java.text.ParseException;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"lckjosh"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"lckjosh"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"lckjosh"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"aaronxujiachen"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"lckjosh"},"content":"public class ParserTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"lckjosh"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"lckjosh"},"content":" public void parseAllowance_validInput_success() throws NuscentsException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"choonkit-nus"},"content":" String arguments \u003d \"/amt 100.0 /date 15-10-2023 /desc Birthday Gift /note From friends\";","lastModifiedDate":"2023-10-23"},{"lineNumber":24,"author":{"gitId":"lckjosh"},"content":" Allowance allowance \u003d Parser.parseAllowance(arguments);","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"choonkit-nus"},"content":" assertEquals(100.0, allowance.getAmount());","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"lckjosh"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(\"d-M-yyyy\");","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"lckjosh"},"content":" String formattedDate \u003d formatter.format(allowance.getDate());","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"15-10-2023\", formattedDate);","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"Birthday Gift\", allowance.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"From friends\", allowance.getAdditionalInfo());","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"lckjosh"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"lckjosh"},"content":" public void parseExpense_validInput_success() throws NuscentsException, ParseException {","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"choonkit-nus"},"content":" String arguments \u003d \"/amt 50.0 /date 16-10-2023 /desc Dinner /note Alone\";","lastModifiedDate":"2023-10-23"},{"lineNumber":36,"author":{"gitId":"lckjosh"},"content":" Expense expense \u003d Parser.parseExpense(arguments);","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"choonkit-nus"},"content":" assertEquals(50.0, expense.getAmount());","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"lckjosh"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(\"d-M-yyyy\");","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"lckjosh"},"content":" String formattedDate \u003d formatter.format(expense.getDate());","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"16-10-2023\", formattedDate);","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"Dinner\", expense.getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"Alone\", expense.getAdditionalInfo());","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"lckjosh"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"lckjosh"},"content":" public void parseAllowance_missingArguments_exceptionThrown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"choonkit-nus"},"content":" String input \u003d \"allowance /amt 100.0 /desc Pocket Money\";","lastModifiedDate":"2023-10-23"},{"lineNumber":48,"author":{"gitId":"lckjosh"},"content":" Exception exception \u003d assertThrows(NuscentsException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"lckjosh"},"content":" Parser.parseCommand(input, null);","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"lckjosh"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"OOPS!!! Invalid input format for adding an allowance.\", exception.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"lckjosh"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"lckjosh"},"content":" public void parseExpense_missingArguments_exceptionThrown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"choonkit-nus"},"content":" String input \u003d \"expense /amt 50.0 /desc Dinner\";","lastModifiedDate":"2023-10-23"},{"lineNumber":57,"author":{"gitId":"lckjosh"},"content":" Exception exception \u003d assertThrows(NuscentsException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"lckjosh"},"content":" Parser.parseCommand(input, null);","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"lckjosh"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"OOPS!!! Invalid input format for adding an expense.\", exception.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"lckjosh"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"lckjosh"},"content":" public void parseAllowance_invalidDateTime_exceptionThrown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"choonkit-nus"},"content":" String input \u003d \"allowance /amt 100.0 /date 15/10/2023 /desc Lunch\";","lastModifiedDate":"2023-10-23"},{"lineNumber":66,"author":{"gitId":"lckjosh"},"content":" Exception exception \u003d assertThrows(NuscentsException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"lckjosh"},"content":" Parser.parseCommand(input, null);","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"lckjosh"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"OOPS!!! The format of the date is invalid.\", exception.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"lckjosh"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"lckjosh"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"lckjosh"},"content":" public void parseExpense_invalidDateTime_exceptionThrown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"choonkit-nus"},"content":" String input \u003d \"expense /amt 50.0 /date 16.10.2023 /desc Dinner\";","lastModifiedDate":"2023-10-23"},{"lineNumber":75,"author":{"gitId":"lckjosh"},"content":" Exception exception \u003d assertThrows(NuscentsException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"lckjosh"},"content":" Parser.parseCommand(input, null);","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"lckjosh"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"lckjosh"},"content":" assertEquals(\"OOPS!!! The format of the date is invalid.\", exception.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"lckjosh"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"vvhuiling"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"vvhuiling"},"content":" public void parseTaskIndex_validInput_success() throws NuscentsException, IndexOutOfBoundsException {","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"vvhuiling"},"content":" String input \u003d \"1\";","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"vvhuiling"},"content":" Transaction transaction \u003d new Transaction(\"test description\");","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"vvhuiling"},"content":" assertEquals(1, Parser.parseTaskIndex(input));","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"vvhuiling"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"vvhuiling"},"content":" public void parseTaskIndex_outOfBoundsIndex_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"vvhuiling"},"content":" String input \u003d \"-6\";","lastModifiedDate":"2023-10-18"},{"lineNumber":91,"author":{"gitId":"vvhuiling"},"content":" Exception exception \u003d assertThrows(IndexOutOfBoundsException.class, () -\u003e {","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"vvhuiling"},"content":" Parser.parseTaskIndex(input);","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"vvhuiling"},"content":" });","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"vvhuiling"},"content":" assertEquals(\"OOPS!!! This is an invalid transaction index.\", exception.getMessage());","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"vvhuiling"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"vvhuiling"},"content":" public void parseTaskIndex_invalidArgument_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"vvhuiling"},"content":" String input \u003d \"InvalidArgument\";","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"vvhuiling"},"content":" Exception exception \u003d assertThrows(NuscentsException.class, () -\u003e {","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"vvhuiling"},"content":" Parser.parseTaskIndex(input);","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"vvhuiling"},"content":" });","lastModifiedDate":"2023-10-18"},{"lineNumber":103,"author":{"gitId":"vvhuiling"},"content":" assertEquals(\"OOPS!!! The input should consist only of digits.\", exception.getMessage());","lastModifiedDate":"2023-10-18"},{"lineNumber":104,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":105,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"vvhuiling"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":107,"author":{"gitId":"vvhuiling"},"content":" public void parseTaskIndex_emptyArgument_exceptionThrown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":108,"author":{"gitId":"vvhuiling"},"content":" String input \u003d null;","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"vvhuiling"},"content":" Exception exception \u003d assertThrows(NuscentsException.class, () -\u003e {","lastModifiedDate":"2023-10-18"},{"lineNumber":110,"author":{"gitId":"vvhuiling"},"content":" Parser.parseTaskIndex(input);","lastModifiedDate":"2023-10-18"},{"lineNumber":111,"author":{"gitId":"vvhuiling"},"content":" });","lastModifiedDate":"2023-10-18"},{"lineNumber":112,"author":{"gitId":"vvhuiling"},"content":" assertEquals(\"OOPS!!! The index of a delete/view command cannot be empty.\", exception.getMessage());","lastModifiedDate":"2023-10-18"},{"lineNumber":113,"author":{"gitId":"vvhuiling"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"vvhuiling"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":115,"author":{"gitId":"aaronxujiachen"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":116,"author":{"gitId":"aaronxujiachen"},"content":" public void parseCommand_helpCommandWithCorrectInput_returnsHelpCommand() throws Exception {","lastModifiedDate":"2023-10-18"},{"lineNumber":117,"author":{"gitId":"aaronxujiachen"},"content":" Command result \u003d Parser.parseCommand(\"help\", null);","lastModifiedDate":"2023-10-18"},{"lineNumber":118,"author":{"gitId":"aaronxujiachen"},"content":" assertTrue(result instanceof HelpCommand);","lastModifiedDate":"2023-10-18"},{"lineNumber":119,"author":{"gitId":"aaronxujiachen"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":120,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":121,"author":{"gitId":"aaronxujiachen"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":122,"author":{"gitId":"aaronxujiachen"},"content":" public void parseCommand_helpCommandWithIncorrectInput_throwsException() {","lastModifiedDate":"2023-10-18"},{"lineNumber":123,"author":{"gitId":"aaronxujiachen"},"content":" Exception exceptionWithSpace \u003d assertThrows(NuscentsException.class, () -\u003e {","lastModifiedDate":"2023-10-18"},{"lineNumber":124,"author":{"gitId":"aaronxujiachen"},"content":" Parser.parseCommand(\"help \", null);","lastModifiedDate":"2023-10-18"},{"lineNumber":125,"author":{"gitId":"aaronxujiachen"},"content":" });","lastModifiedDate":"2023-10-18"},{"lineNumber":126,"author":{"gitId":"aaronxujiachen"},"content":" assertEquals(\"OOPS!!! The correct format is \u0027help\u0027 alone.\", exceptionWithSpace.getMessage());","lastModifiedDate":"2023-10-18"},{"lineNumber":127,"author":{"gitId":"aaronxujiachen"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":128,"author":{"gitId":"aaronxujiachen"},"content":" Exception exceptionWithExtraChars \u003d assertThrows(NuscentsException.class, () -\u003e {","lastModifiedDate":"2023-10-18"},{"lineNumber":129,"author":{"gitId":"aaronxujiachen"},"content":" Parser.parseCommand(\"help extra\", null);","lastModifiedDate":"2023-10-18"},{"lineNumber":130,"author":{"gitId":"aaronxujiachen"},"content":" });","lastModifiedDate":"2023-10-18"},{"lineNumber":131,"author":{"gitId":"aaronxujiachen"},"content":" assertEquals(\"OOPS!!! The correct format is \u0027help\u0027 alone.\", exceptionWithExtraChars.getMessage());","lastModifiedDate":"2023-10-18"},{"lineNumber":132,"author":{"gitId":"aaronxujiachen"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":133,"author":{"gitId":"lckjosh"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"aaronxujiachen":22,"lckjosh":67,"vvhuiling":36,"choonkit-nus":8}},{"path":"src/test/java/seedu/nuscents/storage/StorageTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"spaceman03"},"content":"package seedu.nuscents.storage;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"spaceman03"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"spaceman03"},"content":"import static seedu.nuscents.parser.Parser.parseDate;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"spaceman03"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"spaceman03"},"content":"import java.nio.charset.Charset;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"spaceman03"},"content":"import java.nio.file.Files;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"spaceman03"},"content":"import java.text.SimpleDateFormat;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"spaceman03"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"spaceman03"},"content":"import java.nio.file.Paths;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"spaceman03"},"content":"import java.util.Date;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"spaceman03"},"content":"import java.util.List;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"spaceman03"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"spaceman03"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.Allowance;","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.Expense;","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"spaceman03"},"content":"import seedu.nuscents.data.TransactionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"spaceman03"},"content":"public class StorageTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"spaceman03"},"content":" @TempDir","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"spaceman03"},"content":" public static Path testFolder;","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"spaceman03"},"content":" private static final String TEST_DATA_FOLDER \u003d \"src/test/data/StorageFileTest\";","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"spaceman03"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"spaceman03"},"content":" public void save_validTransactionList() throws Exception {","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"spaceman03"},"content":" TransactionList transactions \u003d getTestTransactionList();","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"spaceman03"},"content":" Storage storage \u003d getTempStorage();","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"spaceman03"},"content":" storage.writeToFile(transactions);","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"spaceman03"},"content":" assertStorageFilesEqual(storage, getStorage(\"ValidData.txt\"));","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"spaceman03"},"content":" private void assertStorageFilesEqual(Storage sf1, Storage sf2) throws Exception {","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"spaceman03"},"content":" assertTextFilesEqual(Paths.get(sf1.getPath()), Paths.get(sf2.getPath()));","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"spaceman03"},"content":" public static void assertTextFilesEqual(Path path1, Path path2) throws IOException {","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"spaceman03"},"content":" List\u003cString\u003e list1 \u003d Files.readAllLines(path1, Charset.defaultCharset());","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"spaceman03"},"content":" List\u003cString\u003e list2 \u003d Files.readAllLines(path2, Charset.defaultCharset());","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"spaceman03"},"content":" assertEquals(String.join(\"\\n\", list1), String.join(\"\\n\", list2));","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"spaceman03"},"content":" private Storage getStorage(String fileName) throws Exception {","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"spaceman03"},"content":" return new Storage(TEST_DATA_FOLDER + \"/\" + fileName);","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"spaceman03"},"content":" private Storage getTempStorage() throws Exception {","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"spaceman03"},"content":" return new Storage(testFolder.resolve(\"temp.txt\").toString());","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"spaceman03"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"spaceman03"},"content":" private TransactionList getTestTransactionList() throws Exception {","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"spaceman03"},"content":" TransactionList transactions \u003d new TransactionList();","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"spaceman03"},"content":" SimpleDateFormat formatter \u003d new SimpleDateFormat(\"dd-MM-yyyy\");","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"spaceman03"},"content":" Date formattedDate \u003d parseDate(\"23-10-2023\", \"dd-MM-yyyy\", formatter);","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"choonkit-nus"},"content":" transactions.addTransaction(new Allowance(100, formattedDate, \"Pocket money\",","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"spaceman03"},"content":" \"October\"));","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"choonkit-nus"},"content":" transactions.addTransaction(new Expense(50, formattedDate, \"Lunch\", \"Pasta\"));","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"spaceman03"},"content":" return transactions;","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"spaceman03"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"spaceman03"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"spaceman03":61,"choonkit-nus":2}}] diff --git a/AY2324S1-CS2113-T18-4_tp_master/commits.json b/AY2324S1-CS2113-T18-4_tp_master/commits.json index e8b9c18..05432cf 100644 --- a/AY2324S1-CS2113-T18-4_tp_master/commits.json +++ b/AY2324S1-CS2113-T18-4_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"aaronxujiachen":[{"date":"2023-10-05","commitResults":[{"hash":"17c9a4e3a542ff3dc4a6c3ed6a9bd9da669b145b","isMergeCommit":false,"messageTitle":"Update AboutUs.md by JiaChen","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"ec6f013464e01ce604f2a63f6d61b455ab004167","isMergeCommit":true,"messageTitle":"Merge pull request #1 from aaronxujiachen/master","messageBody":"Update AboutUs.md by JiaChen","fileTypesAndContributionMap":{}}]},{"date":"2023-10-06","commitResults":[{"hash":"6e3f56311ee411e153f38eeb41bc75a57ae2855a","isMergeCommit":true,"messageTitle":"Merge pull request #3 from spaceman03/master","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"850d7a31292733b20329d8ba32a63238bc1356b1","isMergeCommit":false,"messageTitle":"Change ByeCommand to ExitCommand and add expected output.","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":6}}},{"hash":"8bda423e797242a4bc1fd5c4e1d23d790bb198f9","isMergeCommit":true,"messageTitle":"Merge pull request #15 from aaronxujiachen/branch-exitCommand","messageBody":"Change ByeCommand to ExitCommand and add expected output.","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"8b83607f9cc27428bce02ee676e86dc2834cbabc","isMergeCommit":true,"messageTitle":"Merge pull request #17 from lckjosh/master","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}},{"hash":"e93ce50f7c287a73645c998de40126edcc354e80","isMergeCommit":false,"messageTitle":"Add Help Command and expected output.","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":10}}},{"hash":"fb4b452acd3f041bcefc1e25866722cb0702536e","isMergeCommit":true,"messageTitle":"Merge pull request #21 from aaronxujiachen/branch-helpCommand","messageBody":"Add Help Command and expected output.","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"bf640476b177a63a63cd624f370e24300559e85a","isMergeCommit":false,"messageTitle":"Add exception handling and JUnit test for helpCommand.","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":8},"test-code":{"insertions":23,"deletions":1}}},{"hash":"6bfe6c3dceb5c9390033fadfce4e5e976a17e12c","isMergeCommit":false,"messageTitle":"Fix method naming to adhere to Checkstyle requirements","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":2}}},{"hash":"237dc4671d1f652487f7425161de4570b0a9ec8d","isMergeCommit":true,"messageTitle":"Merge pull request #29 from aaronxujiachen/branch-helpCommand","messageBody":"Add exception handling and JUnit test for helpCommand.","fileTypesAndContributionMap":{}}]}],"spaceman03":[{"date":"2023-10-05","commitResults":[{"hash":"b907cadd31762b2a2bdb3a283a54dfd7f92927fa","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"faa31cbe7f7687f6c651a58e1748dcaed936fe18","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-13","commitResults":[{"hash":"3d5bdfe9a1272e0a46e389a96d56fdbd0316af75","isMergeCommit":false,"messageTitle":"Rename Duke to Nuscents","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":0}}},{"hash":"68d76a9cc00e597e05c8b5a3dcb4176bffcdef4c","isMergeCommit":false,"messageTitle":"Rename Duke to Nuscents","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":21}}},{"hash":"36c498dbe3012c4116c424f3afb1caeb9e4586a6","isMergeCommit":false,"messageTitle":"Rename DukeTest to NuscentsTest","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":2}}},{"hash":"1688d6be91f47c63662a52ccae34845c41115104","isMergeCommit":false,"messageTitle":"Fix CI failing","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":2}}},{"hash":"950aec2ffa8deab6e559dc180e2466052356287c","isMergeCommit":false,"messageTitle":"Remove whitespace","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"3f40057ae31451b3d67b61439e6f1a2c87db19d5","isMergeCommit":true,"messageTitle":"Merge pull request #11 from spaceman03/rename","messageBody":"Rename Duke to NUScents","fileTypesAndContributionMap":{}},{"hash":"544f9081305f1ce200b7638a2b082ed90ffabb30","isMergeCommit":false,"messageTitle":"Update expected output","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"83c0db186c2bb106cf0b9cd8eff469b689803008","isMergeCommit":true,"messageTitle":"Merge pull request #12 from spaceman03/rename","messageBody":"Update expected output","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"f942bf08edf2e985993fed72163040feb0617647","isMergeCommit":false,"messageTitle":"Import code from ip","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":782,"deletions":13}}},{"hash":"47f9a0d4f54d553087355ca077ec5abfb5afd5f0","isMergeCommit":false,"messageTitle":"Remove * import","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":44}}},{"hash":"ed9ece69fe252a2f52e73e437cfa013c3a9b601d","isMergeCommit":false,"messageTitle":"Edit code to abide java coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":4}}},{"hash":"b66d0a2e14d7944408ddbd987f555d887a00fd61","isMergeCommit":true,"messageTitle":"Merge pull request #13 from spaceman03/import-code","messageBody":"Import code from iP","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"25727fa186d10fabf724a65948ef866e4fd83983","isMergeCommit":true,"messageTitle":"Merge pull request #23 from lckjosh/branch-add-expense","messageBody":"Add ability to add expense","fileTypesAndContributionMap":{}},{"hash":"5e928b0b39424af517737bc04400b9e7ecc62706","isMergeCommit":false,"messageTitle":"Rename tasks to transactionList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"7f14cc11220dd5bee3df1e11c8d55f081bb3dfc2","isMergeCommit":false,"messageTitle":"Change date format","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":77,"deletions":63}}},{"hash":"ff7f92ca420aa8f5e1ebace350edc9822ba9a7f6","isMergeCommit":false,"messageTitle":"Change date format","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"f69aba7c7b86e1c50b10b3a3d80052e5be966b66","isMergeCommit":false,"messageTitle":"Add read error message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"fd92138a4e306c89f8c3d1a0595397dcdfef9a18","isMergeCommit":false,"messageTitle":"Remove unused import statements","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":6}}},{"hash":"77555c990ebdbaf52416f4b2dba7c01cf9eaac2e","isMergeCommit":false,"messageTitle":"Add newline at the end of file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"61f4961057f9a811c85965f87eb2f0faaaebb6ef","isMergeCommit":true,"messageTitle":"Merge pull request #25 from lckjosh/branch-add-transaction-test","messageBody":"Add JUnit testing for adding a transaction","fileTypesAndContributionMap":{}},{"hash":"5ba6e96b4eb1ec14c444bab4ca7b7d54036bd5d8","isMergeCommit":false,"messageTitle":"Display transaction index for each transaction","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":3}}},{"hash":"5b065e3c7145dcb5a4e6a77526c9c3584f63eae2","isMergeCommit":false,"messageTitle":"Display additional info for transactions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":5}}},{"hash":"1ca4c9c376b58e158605dfabff1fec1c211cda31","isMergeCommit":true,"messageTitle":"Merge pull request #26 from spaceman03/list-feature","messageBody":"Display serial number and additional info for list feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"3dec0fc88434a962ce2871a04f3cf7a572c6c52e","isMergeCommit":true,"messageTitle":"Merge pull request #28 from vvhuiling/view-feature","messageBody":"Add the ability to view","fileTypesAndContributionMap":{}},{"hash":"a0cb0bcdfb50ce6e31d6922dc76ba577f47753e1","isMergeCommit":false,"messageTitle":"Add Junit test for Storage class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":1},"test-code":{"insertions":63,"deletions":0}}},{"hash":"ddcd241833935eb0162106cb7f95b3d57fbeb241","isMergeCommit":true,"messageTitle":"Merge pull request #31 from vvhuiling/JUnit","messageBody":"Add JUnit for Parse.parseTaskIndex","fileTypesAndContributionMap":{}},{"hash":"b51fb88b291d3375bbc8f996ec4f8610a8ef23cb","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"715e2bdaf0266244aa149895acc42c8811b82642","isMergeCommit":true,"messageTitle":"Merge pull request #32 from spaceman03/assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"153959f9f867bd1b6654136b72c41276be598722","isMergeCommit":false,"messageTitle":"Add logging for Storage class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":18}}},{"hash":"b7421b2ee2b393c1b2cd7465f6315f3edcfecdc8","isMergeCommit":false,"messageTitle":"Edit code to abide java coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"9ed3e0451d16a8459ec078eefb93fbc7b158b39a","isMergeCommit":true,"messageTitle":"Merge pull request #33 from spaceman03/logging","messageBody":"Add logging for Storage class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"e95c76a83817807a7f2bc34aa2b8d649a18ee448","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Update-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"214ee847617bfb6a14d40e7b94b829f0e8576bb0","isMergeCommit":true,"messageTitle":"Merge pull request #34 from choonkit-nus/branch-Update-AboutUs","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}}]}],"lckjosh":[{"date":"2023-10-17","commitResults":[{"hash":"2b2b3b78f2af5be61d76c7c5d276da8dbeb4151d","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"ec62f5e245ac20384cd1cb946bf88a92390af944","isMergeCommit":false,"messageTitle":"Rename Task to Transaction","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":140,"deletions":140},"other":{"insertions":6,"deletions":6}}},{"hash":"55b6c1373057a6797b2a58afe4e07a09d52251ff","isMergeCommit":false,"messageTitle":"Rename task to transaction in UI","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":21}}},{"hash":"c8b1586d25c4622e571843619d413730178a427b","isMergeCommit":false,"messageTitle":"Rename the TransactionList variable from tasks to transactions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":6}}},{"hash":"e1bce9867751d941051d57b7d42363cc1c95bf6b","isMergeCommit":false,"messageTitle":"Fix typo by renamingg trasactions to transactions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":6}}},{"hash":"edf9ee5125927e5a29cfde07e29b902bee9c5860","isMergeCommit":false,"messageTitle":"Add ability to add allowance","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":95,"deletions":26}}},{"hash":"f4dd482c6faeb0f74e20cab5cb74ef7ebc4c7ee9","isMergeCommit":false,"messageTitle":"Fix storage class such that it can now write and read allowances to and from file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":8}}},{"hash":"3ad42995f2f2d460b6637abce4cc99bfadc17a4c","isMergeCommit":false,"messageTitle":"Fix code style violations","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":3}}},{"hash":"66ad8279f6d5ff9638a9794f1cdfea3cbb6b149c","isMergeCommit":false,"messageTitle":"Rename taskDecoder to transactionDecoder","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"1467f34d13f9f5f3238b0795d4a0eed08dce8788","isMergeCommit":false,"messageTitle":"Remove classes and methods related to marking and unmarking tasks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":107}}},{"hash":"39891815321430b803cecd30226c80d3004dc531","isMergeCommit":false,"messageTitle":"Update parser to only accept hyphen for datetime input and not forward slash","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":9}}},{"hash":"2063ea7a4cda9321d32e085bff31d981c6497c43","isMergeCommit":true,"messageTitle":"Merge pull request #22 from lckjosh/branch-add-allowance","messageBody":"Merge branch-add-allowance","fileTypesAndContributionMap":{}},{"hash":"f7f76befb8837e86c38494e840d1d4ccb4c22326","isMergeCommit":false,"messageTitle":"Add ability to add expense","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":73,"deletions":12}}},{"hash":"bcd028a3048bfaceb3f923c4ee85543426dc7d61","isMergeCommit":false,"messageTitle":"Rename allowance to expense in parseExpense() header comment","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"861d27e5be59a84cec92f174d5c2ed6689a486f5","isMergeCommit":false,"messageTitle":"Add JUnit testing for adding a transaction","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":11},"test-code":{"insertions":75,"deletions":0}}},{"hash":"f71cf094a277c1c5c7f65d22f8376c18c58d8e0c","isMergeCommit":false,"messageTitle":"Fix coding standard violations in ParserTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":7,"deletions":6}}},{"hash":"5b42ba630ccf6e3eda827897344646ff18d92efd","isMergeCommit":true,"messageTitle":"Merge pull request #24 from spaceman03/list-feature","messageBody":"Add list feature\r\nFixes #9 ","fileTypesAndContributionMap":{}},{"hash":"d349b116005dcef8dcde7948b01f9b053dea8c60","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-4/tp into branch-add-transaction-test","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/nuscents/parser/Parser.java\n#\tsrc/main/java/seedu/nuscents/ui/Messages.java\n","fileTypesAndContributionMap":{}},{"hash":"564051ab0d85d2a6d4898af9d949fb94a451a1b0","isMergeCommit":false,"messageTitle":"Update ParserTest.java to use the simple date format","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":10,"deletions":8}}},{"hash":"9df79b39c059353a93f08eafc8e4b7d18ad2f05d","isMergeCommit":false,"messageTitle":"Remove unused imports in ParserTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":3}}},{"hash":"cf2a8632d771bd33ff541e631215fa836bea4197","isMergeCommit":false,"messageTitle":"Update test cases to use new date format","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":2}}}]},{"date":"2023-10-18","commitResults":[{"hash":"25ef375710b28911a84a3ce82d04acdc42e3dd84","isMergeCommit":true,"messageTitle":"Merge pull request #30 from spaceman03/storage-test","messageBody":"Add JUnit test for Storage class","fileTypesAndContributionMap":{}}]}],"choonkit-nus":[{"date":"2023-10-05","commitResults":[{"hash":"1dbcb2d61ad0f260016699378b381211523c50bc","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-18","commitResults":[{"hash":"511c46e086a462bdae64f923b42917f0e7facd26","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]}],"vvhuiling":[{"date":"2023-10-17","commitResults":[{"hash":"52e38b24e3ec89852845e3f05891edb24089a5aa","isMergeCommit":false,"messageTitle":"Add the ability to view","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":42,"deletions":0}}}]},{"date":"2023-10-18","commitResults":[{"hash":"55109d6d740a41d86769c6515a2fb9bea4dc0f14","isMergeCommit":false,"messageTitle":"Bug fix: remove unused import","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"b733fd9a00b0a5e3d642b6514bc249340ae97136","isMergeCommit":false,"messageTitle":"Add JUnit for Parse.parseTaskIndex","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":5},"test-code":{"insertions":35,"deletions":0}}},{"hash":"85118bd8a57099c060b7ff36329d51c6377e4503","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into JUnit","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f9917100e23506d9370660194c12ca887ab35b36","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"7f5ee5148f17418aebe6f7c234a90fb2f2b86a8a","isMergeCommit":true,"messageTitle":"Merge pull request #35 from vvhuiling/doc-update","messageBody":"Update AboutUs.md","tags":["v1.0"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"aaronxujiachen":{"docs":1,"functional-code":27,"test-code":22},"spaceman03":{"docs":1,"functional-code":559,"test-code":65,"other":2},"lckjosh":{"docs":2,"functional-code":265,"test-code":75},"choonkit-nus":{"docs":2,"functional-code":0,"test-code":0},"vvhuiling":{"docs":1,"functional-code":48,"test-code":36}},"authorContributionVariance":{"aaronxujiachen":121.452805,"spaceman03":27370.361,"lckjosh":26246.791,"choonkit-nus":0.26530612,"vvhuiling":155.38774},"authorDisplayNameMap":{"aaronxujiachen":"CS2113-T18-4 XU J..CHEN","spaceman03":"CS2113-T18-4 CHUN..XUAN","lckjosh":"CS2113-T18-4 LIM ..SHUA","choonkit-nus":"CS2113-T18-4 ONG .. KIT","vvhuiling":"CS2113-T18-4 HUAN..LING"}} +{"authorDailyContributionsMap":{"aaronxujiachen":[{"date":"2023-10-05","commitResults":[{"hash":"17c9a4e3a542ff3dc4a6c3ed6a9bd9da669b145b","isMergeCommit":false,"messageTitle":"Update AboutUs.md by JiaChen","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"ec6f013464e01ce604f2a63f6d61b455ab004167","isMergeCommit":true,"messageTitle":"Merge pull request #1 from aaronxujiachen/master","messageBody":"Update AboutUs.md by JiaChen","fileTypesAndContributionMap":{}}]},{"date":"2023-10-06","commitResults":[{"hash":"6e3f56311ee411e153f38eeb41bc75a57ae2855a","isMergeCommit":true,"messageTitle":"Merge pull request #3 from spaceman03/master","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"850d7a31292733b20329d8ba32a63238bc1356b1","isMergeCommit":false,"messageTitle":"Change ByeCommand to ExitCommand and add expected output.","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":6}}},{"hash":"8bda423e797242a4bc1fd5c4e1d23d790bb198f9","isMergeCommit":true,"messageTitle":"Merge pull request #15 from aaronxujiachen/branch-exitCommand","messageBody":"Change ByeCommand to ExitCommand and add expected output.","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"8b83607f9cc27428bce02ee676e86dc2834cbabc","isMergeCommit":true,"messageTitle":"Merge pull request #17 from lckjosh/master","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}},{"hash":"e93ce50f7c287a73645c998de40126edcc354e80","isMergeCommit":false,"messageTitle":"Add Help Command and expected output.","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":10}}},{"hash":"fb4b452acd3f041bcefc1e25866722cb0702536e","isMergeCommit":true,"messageTitle":"Merge pull request #21 from aaronxujiachen/branch-helpCommand","messageBody":"Add Help Command and expected output.","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"bf640476b177a63a63cd624f370e24300559e85a","isMergeCommit":false,"messageTitle":"Add exception handling and JUnit test for helpCommand.","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":8},"test-code":{"insertions":23,"deletions":1}}},{"hash":"6bfe6c3dceb5c9390033fadfce4e5e976a17e12c","isMergeCommit":false,"messageTitle":"Fix method naming to adhere to Checkstyle requirements","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":2}}},{"hash":"237dc4671d1f652487f7425161de4570b0a9ec8d","isMergeCommit":true,"messageTitle":"Merge pull request #29 from aaronxujiachen/branch-helpCommand","messageBody":"Add exception handling and JUnit test for helpCommand.","fileTypesAndContributionMap":{}}]}],"spaceman03":[{"date":"2023-10-05","commitResults":[{"hash":"b907cadd31762b2a2bdb3a283a54dfd7f92927fa","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"faa31cbe7f7687f6c651a58e1748dcaed936fe18","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-13","commitResults":[{"hash":"3d5bdfe9a1272e0a46e389a96d56fdbd0316af75","isMergeCommit":false,"messageTitle":"Rename Duke to Nuscents","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":22,"deletions":0}}},{"hash":"68d76a9cc00e597e05c8b5a3dcb4176bffcdef4c","isMergeCommit":false,"messageTitle":"Rename Duke to Nuscents","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":21}}},{"hash":"36c498dbe3012c4116c424f3afb1caeb9e4586a6","isMergeCommit":false,"messageTitle":"Rename DukeTest to NuscentsTest","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":2}}},{"hash":"1688d6be91f47c63662a52ccae34845c41115104","isMergeCommit":false,"messageTitle":"Fix CI failing","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":2,"deletions":2}}},{"hash":"950aec2ffa8deab6e559dc180e2466052356287c","isMergeCommit":false,"messageTitle":"Remove whitespace","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"3f40057ae31451b3d67b61439e6f1a2c87db19d5","isMergeCommit":true,"messageTitle":"Merge pull request #11 from spaceman03/rename","messageBody":"Rename Duke to NUScents","fileTypesAndContributionMap":{}},{"hash":"544f9081305f1ce200b7638a2b082ed90ffabb30","isMergeCommit":false,"messageTitle":"Update expected output","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"83c0db186c2bb106cf0b9cd8eff469b689803008","isMergeCommit":true,"messageTitle":"Merge pull request #12 from spaceman03/rename","messageBody":"Update expected output","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"f942bf08edf2e985993fed72163040feb0617647","isMergeCommit":false,"messageTitle":"Import code from ip","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":782,"deletions":13}}},{"hash":"47f9a0d4f54d553087355ca077ec5abfb5afd5f0","isMergeCommit":false,"messageTitle":"Remove * import","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":44}}},{"hash":"ed9ece69fe252a2f52e73e437cfa013c3a9b601d","isMergeCommit":false,"messageTitle":"Edit code to abide java coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":4}}},{"hash":"b66d0a2e14d7944408ddbd987f555d887a00fd61","isMergeCommit":true,"messageTitle":"Merge pull request #13 from spaceman03/import-code","messageBody":"Import code from iP","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"25727fa186d10fabf724a65948ef866e4fd83983","isMergeCommit":true,"messageTitle":"Merge pull request #23 from lckjosh/branch-add-expense","messageBody":"Add ability to add expense","fileTypesAndContributionMap":{}},{"hash":"5e928b0b39424af517737bc04400b9e7ecc62706","isMergeCommit":false,"messageTitle":"Rename tasks to transactionList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"7f14cc11220dd5bee3df1e11c8d55f081bb3dfc2","isMergeCommit":false,"messageTitle":"Change date format","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":77,"deletions":63}}},{"hash":"ff7f92ca420aa8f5e1ebace350edc9822ba9a7f6","isMergeCommit":false,"messageTitle":"Change date format","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":4}}},{"hash":"f69aba7c7b86e1c50b10b3a3d80052e5be966b66","isMergeCommit":false,"messageTitle":"Add read error message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"fd92138a4e306c89f8c3d1a0595397dcdfef9a18","isMergeCommit":false,"messageTitle":"Remove unused import statements","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":6}}},{"hash":"77555c990ebdbaf52416f4b2dba7c01cf9eaac2e","isMergeCommit":false,"messageTitle":"Add newline at the end of file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"61f4961057f9a811c85965f87eb2f0faaaebb6ef","isMergeCommit":true,"messageTitle":"Merge pull request #25 from lckjosh/branch-add-transaction-test","messageBody":"Add JUnit testing for adding a transaction","fileTypesAndContributionMap":{}},{"hash":"5ba6e96b4eb1ec14c444bab4ca7b7d54036bd5d8","isMergeCommit":false,"messageTitle":"Display transaction index for each transaction","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":3}}},{"hash":"5b065e3c7145dcb5a4e6a77526c9c3584f63eae2","isMergeCommit":false,"messageTitle":"Display additional info for transactions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":5}}},{"hash":"1ca4c9c376b58e158605dfabff1fec1c211cda31","isMergeCommit":true,"messageTitle":"Merge pull request #26 from spaceman03/list-feature","messageBody":"Display serial number and additional info for list feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"3dec0fc88434a962ce2871a04f3cf7a572c6c52e","isMergeCommit":true,"messageTitle":"Merge pull request #28 from vvhuiling/view-feature","messageBody":"Add the ability to view","fileTypesAndContributionMap":{}},{"hash":"a0cb0bcdfb50ce6e31d6922dc76ba577f47753e1","isMergeCommit":false,"messageTitle":"Add Junit test for Storage class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":1},"test-code":{"insertions":63,"deletions":0}}},{"hash":"ddcd241833935eb0162106cb7f95b3d57fbeb241","isMergeCommit":true,"messageTitle":"Merge pull request #31 from vvhuiling/JUnit","messageBody":"Add JUnit for Parse.parseTaskIndex","fileTypesAndContributionMap":{}},{"hash":"b51fb88b291d3375bbc8f996ec4f8610a8ef23cb","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"715e2bdaf0266244aa149895acc42c8811b82642","isMergeCommit":true,"messageTitle":"Merge pull request #32 from spaceman03/assertions","messageBody":"Add assertions","fileTypesAndContributionMap":{}},{"hash":"153959f9f867bd1b6654136b72c41276be598722","isMergeCommit":false,"messageTitle":"Add logging for Storage class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":18}}},{"hash":"b7421b2ee2b393c1b2cd7465f6315f3edcfecdc8","isMergeCommit":false,"messageTitle":"Edit code to abide java coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"9ed3e0451d16a8459ec078eefb93fbc7b158b39a","isMergeCommit":true,"messageTitle":"Merge pull request #33 from spaceman03/logging","messageBody":"Add logging for Storage class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"e95c76a83817807a7f2bc34aa2b8d649a18ee448","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into branch-Update-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"214ee847617bfb6a14d40e7b94b829f0e8576bb0","isMergeCommit":true,"messageTitle":"Merge pull request #34 from choonkit-nus/branch-Update-AboutUs","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}}]}],"lckjosh":[{"date":"2023-10-17","commitResults":[{"hash":"2b2b3b78f2af5be61d76c7c5d276da8dbeb4151d","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3}}},{"hash":"ec62f5e245ac20384cd1cb946bf88a92390af944","isMergeCommit":false,"messageTitle":"Rename Task to Transaction","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":140,"deletions":140},"other":{"insertions":6,"deletions":6}}},{"hash":"55b6c1373057a6797b2a58afe4e07a09d52251ff","isMergeCommit":false,"messageTitle":"Rename task to transaction in UI","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":21}}},{"hash":"c8b1586d25c4622e571843619d413730178a427b","isMergeCommit":false,"messageTitle":"Rename the TransactionList variable from tasks to transactions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":6}}},{"hash":"e1bce9867751d941051d57b7d42363cc1c95bf6b","isMergeCommit":false,"messageTitle":"Fix typo by renamingg trasactions to transactions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":6}}},{"hash":"edf9ee5125927e5a29cfde07e29b902bee9c5860","isMergeCommit":false,"messageTitle":"Add ability to add allowance","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":95,"deletions":26}}},{"hash":"f4dd482c6faeb0f74e20cab5cb74ef7ebc4c7ee9","isMergeCommit":false,"messageTitle":"Fix storage class such that it can now write and read allowances to and from file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":8}}},{"hash":"3ad42995f2f2d460b6637abce4cc99bfadc17a4c","isMergeCommit":false,"messageTitle":"Fix code style violations","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":3}}},{"hash":"66ad8279f6d5ff9638a9794f1cdfea3cbb6b149c","isMergeCommit":false,"messageTitle":"Rename taskDecoder to transactionDecoder","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"1467f34d13f9f5f3238b0795d4a0eed08dce8788","isMergeCommit":false,"messageTitle":"Remove classes and methods related to marking and unmarking tasks","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":107}}},{"hash":"39891815321430b803cecd30226c80d3004dc531","isMergeCommit":false,"messageTitle":"Update parser to only accept hyphen for datetime input and not forward slash","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":9}}},{"hash":"2063ea7a4cda9321d32e085bff31d981c6497c43","isMergeCommit":true,"messageTitle":"Merge pull request #22 from lckjosh/branch-add-allowance","messageBody":"Merge branch-add-allowance","fileTypesAndContributionMap":{}},{"hash":"f7f76befb8837e86c38494e840d1d4ccb4c22326","isMergeCommit":false,"messageTitle":"Add ability to add expense","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":73,"deletions":12}}},{"hash":"bcd028a3048bfaceb3f923c4ee85543426dc7d61","isMergeCommit":false,"messageTitle":"Rename allowance to expense in parseExpense() header comment","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"861d27e5be59a84cec92f174d5c2ed6689a486f5","isMergeCommit":false,"messageTitle":"Add JUnit testing for adding a transaction","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":11},"test-code":{"insertions":75,"deletions":0}}},{"hash":"f71cf094a277c1c5c7f65d22f8376c18c58d8e0c","isMergeCommit":false,"messageTitle":"Fix coding standard violations in ParserTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":7,"deletions":6}}},{"hash":"5b42ba630ccf6e3eda827897344646ff18d92efd","isMergeCommit":true,"messageTitle":"Merge pull request #24 from spaceman03/list-feature","messageBody":"Add list feature\r\nFixes #9 ","fileTypesAndContributionMap":{}},{"hash":"d349b116005dcef8dcde7948b01f9b053dea8c60","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-T18-4/tp into branch-add-transaction-test","messageBody":"# Conflicts:\n#\tsrc/main/java/seedu/nuscents/parser/Parser.java\n#\tsrc/main/java/seedu/nuscents/ui/Messages.java\n","fileTypesAndContributionMap":{}},{"hash":"564051ab0d85d2a6d4898af9d949fb94a451a1b0","isMergeCommit":false,"messageTitle":"Update ParserTest.java to use the simple date format","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":10,"deletions":8}}},{"hash":"9df79b39c059353a93f08eafc8e4b7d18ad2f05d","isMergeCommit":false,"messageTitle":"Remove unused imports in ParserTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":3}}},{"hash":"cf2a8632d771bd33ff541e631215fa836bea4197","isMergeCommit":false,"messageTitle":"Update test cases to use new date format","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":2}}}]},{"date":"2023-10-18","commitResults":[{"hash":"25ef375710b28911a84a3ce82d04acdc42e3dd84","isMergeCommit":true,"messageTitle":"Merge pull request #30 from spaceman03/storage-test","messageBody":"Add JUnit test for Storage class","fileTypesAndContributionMap":{}}]}],"choonkit-nus":[{"date":"2023-10-05","commitResults":[{"hash":"1dbcb2d61ad0f260016699378b381211523c50bc","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-18","commitResults":[{"hash":"511c46e086a462bdae64f923b42917f0e7facd26","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-22","commitResults":[{"hash":"11399d0dca8f2bbc35a2f2e7b300d94c5999496e","isMergeCommit":false,"messageTitle":"Update transaction amount to float","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":9},"test-code":{"insertions":2,"deletions":2}}},{"hash":"ff5a0cc610e480f16d4746524642f73038322672","isMergeCommit":false,"messageTitle":"Add exception to ensure transaction amount is float","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":2}}},{"hash":"662449e464679a98e132cbdb36e643074248bcf9","isMergeCommit":false,"messageTitle":"Update list feature to calculate and show net balance","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":4}}},{"hash":"9362e236dd13c885dd8c0922948d152989060b4e","isMergeCommit":false,"messageTitle":"Fix coding standard violation in Parser.java and Ui.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":6}}},{"hash":"70d3e877d5aa55c2ea057bf809a93bd9e7693f92","isMergeCommit":false,"messageTitle":"Edit ParserTest.java","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":2}}}]},{"date":"2023-10-23","commitResults":[{"hash":"76687e3496bb89d0a435713c1622e5d926fbdcb8","isMergeCommit":false,"messageTitle":"Edit ParserTest.java to use float for transaction amount","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":6,"deletions":6}}},{"hash":"901313117dcfcea39e8fd49ae3f8d6abcb1bb5fb","isMergeCommit":false,"messageTitle":"Bug fixes on Parser.java for transaction exception message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"e08ad91d443f58618cbb4e22838ba30c38c8348f","isMergeCommit":true,"messageTitle":"Merge pull request #36 from choonkit-nus/branch-netbalance","messageBody":"Branch netbalance","fileTypesAndContributionMap":{}}]}],"vvhuiling":[{"date":"2023-10-17","commitResults":[{"hash":"52e38b24e3ec89852845e3f05891edb24089a5aa","isMergeCommit":false,"messageTitle":"Add the ability to view","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":42,"deletions":0}}}]},{"date":"2023-10-18","commitResults":[{"hash":"55109d6d740a41d86769c6515a2fb9bea4dc0f14","isMergeCommit":false,"messageTitle":"Bug fix: remove unused import","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"b733fd9a00b0a5e3d642b6514bc249340ae97136","isMergeCommit":false,"messageTitle":"Add JUnit for Parse.parseTaskIndex","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":5},"test-code":{"insertions":35,"deletions":0}}},{"hash":"85118bd8a57099c060b7ff36329d51c6377e4503","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into JUnit","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f9917100e23506d9370660194c12ca887ab35b36","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"7f5ee5148f17418aebe6f7c234a90fb2f2b86a8a","isMergeCommit":true,"messageTitle":"Merge pull request #35 from vvhuiling/doc-update","messageBody":"Update AboutUs.md","tags":["v1.0"],"fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"aaronxujiachen":{"docs":1,"functional-code":27,"test-code":22},"spaceman03":{"docs":1,"functional-code":550,"test-code":63,"other":2},"lckjosh":{"docs":2,"functional-code":258,"test-code":67},"choonkit-nus":{"docs":2,"functional-code":32,"test-code":10},"vvhuiling":{"docs":1,"functional-code":47,"test-code":36}},"authorContributionVariance":{"aaronxujiachen":107.694336,"spaceman03":24163.924,"lckjosh":23072.262,"choonkit-nus":131.67871,"vvhuiling":137.25},"authorDisplayNameMap":{"aaronxujiachen":"CS2113-T18-4 XU J..CHEN","spaceman03":"CS2113-T18-4 CHUN..XUAN","lckjosh":"CS2113-T18-4 LIM ..SHUA","choonkit-nus":"CS2113-T18-4 ONG .. KIT","vvhuiling":"CS2113-T18-4 HUAN..LING"}} diff --git a/AY2324S1-CS2113-W12-1_tp_master/authorship.json b/AY2324S1-CS2113-W12-1_tp_master/authorship.json index 50d5ece..123e1f3 100644 --- a/AY2324S1-CS2113-W12-1_tp_master/authorship.json +++ b/AY2324S1-CS2113-W12-1_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"yeo-menghan"},"content":"# QuizHub project template","lastModifiedDate":"2023-10-04"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11 (use the exact version), update Intellij to the most recent version.","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. **Ensure Intellij JDK 11 is defined as an SDK**, as described [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk) -- this step is not needed if you have used JDK 11 in a previous Intellij project.","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. **Import the project _as a Gradle project_**, as described [here](https://se-education.org/guides/tutorials/intellijImportGradleProject.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"1. **Verify the set up**: After the importing is complete, locate the `src/main/java/seedu/duke/Duke.java` file, right-click it, and choose `Run Duke.main()`. If the setup is correct, you should see something like the below:","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003e Task :compileJava","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003e Task :processResources NO-SOURCE","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003e Task :classes","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003e Task :Duke.main()","lastModifiedDate":"2020-05-24"},{"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-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":" What is your name?","lastModifiedDate":"2020-05-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" Type some word and press enter to let the execution proceed to the end.","lastModifiedDate":"2020-05-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":"## Build automation using Gradle","lastModifiedDate":"2020-05-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":"* This project uses Gradle for build automation and dependency management. It includes a basic build script as well (i.e. the `build.gradle` file).","lastModifiedDate":"2020-05-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":"* If you are new to Gradle, refer to the [Gradle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/gradle.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":"## Testing","lastModifiedDate":"2020-05-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":"### I/O redirection tests","lastModifiedDate":"2020-05-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"* To run _I/O redirection_ tests (aka _Text UI tests_), navigate to the `text-ui-test` and run the `runtest(.bat/.sh)` script.","lastModifiedDate":"2020-05-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":"### JUnit tests","lastModifiedDate":"2020-05-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":42,"author":{"gitId":"-"},"content":"* A skeleton JUnit test (`src/test/java/seedu/duke/DukeTest.java`) is provided with this project template. ","lastModifiedDate":"2020-05-24"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* If you are new to JUnit, refer to the [JUnit Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/junit.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":"## Checkstyle","lastModifiedDate":"2020-05-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* A sample CheckStyle rule configuration is provided in this project.","lastModifiedDate":"2020-05-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* If you are new to Checkstyle, refer to the [Checkstyle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/checkstyle.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":"## CI using GitHub Actions","lastModifiedDate":"2020-05-24"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":52,"author":{"gitId":"-"},"content":"The project uses [GitHub actions](https://github.com/features/actions) for CI. When you push a commit to this repo or PR against it, GitHub actions will run automatically to build and verify the code as updated by the commit/PR.","lastModifiedDate":"2020-05-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":"## Documentation","lastModifiedDate":"2020-05-24"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":56,"author":{"gitId":"-"},"content":"`/docs` folder contains a skeleton version of the project documentation.","lastModifiedDate":"2020-05-24"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":58,"author":{"gitId":"-"},"content":"Steps for publishing documentation to the public: ","lastModifiedDate":"2020-05-24"},{"lineNumber":59,"author":{"gitId":"-"},"content":"1. If you are using this project template for an individual project, go your fork on GitHub.\u003cbr\u003e","lastModifiedDate":"2020-05-24"},{"lineNumber":60,"author":{"gitId":"-"},"content":" If you are using this project template for a team project, go to the team fork on GitHub.","lastModifiedDate":"2020-05-24"},{"lineNumber":61,"author":{"gitId":"-"},"content":"1. Click on the `settings` tab.","lastModifiedDate":"2020-05-24"},{"lineNumber":62,"author":{"gitId":"-"},"content":"1. Scroll down to the `GitHub Pages` section.","lastModifiedDate":"2020-05-24"},{"lineNumber":63,"author":{"gitId":"-"},"content":"1. Set the `source` as `master branch /docs folder`.","lastModifiedDate":"2020-05-24"},{"lineNumber":64,"author":{"gitId":"-"},"content":"1. Optionally, use the `choose a theme` button to choose a theme for your documentation.","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"yeo-menghan":1,"-":63}},{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" mainClass.set(\"Quizhub\")","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" archiveBaseName.set(\"quizhub\")","lastModifiedDate":"2023-10-21"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-10-21"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"lisizhuang-0121"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"spinoandraptos":2,"lisizhuang-0121":1,"-":44}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Portfolio ","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":"--------|:--------------:|:--------------------------------------------:|:---------:","lastModifiedDate":"2023-10-04"},{"lineNumber":5,"author":{"gitId":"James-Hong-Jey"},"content":"![](https://www.comp.nus.edu.sg/~stevenha/images/sh7.jpg) | James Hong Jey | [Github](https://github.com/James-Hong-Jey) | [Portfolio](docs/team/jameshong.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":6,"author":{"gitId":"StevenGX12"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Guan Xiao | [Github](https://github.com/StevenGX12) | [Portfolio](docs/team/guanxiao.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"![](https://avatars.githubusercontent.com/u/111041948?s\u003d400\u0026u\u003d6619a8328eba45edbc88fe01cf54efeb1f986d11\u0026v\u003d4) | Man Juncheng | [Github](https://github.com/spinoandraptos) | [Portfolio](docs/team/juncheng.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"lisizhuang-0121"},"content":"![](https://i.redd.it/6do158vk2ue61.png) | Li Sizhuang | [Github](https://github.com/lisizhuang-0121) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"yeo-menghan"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Yeo Meng Han | [Github](https://github.com/yeo-menghan) | [Portfolio](https://linkedin.com/in/yeo-meng-han/)","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":1,"StevenGX12":1,"James-Hong-Jey":1,"yeo-menghan":1,"lisizhuang-0121":2,"-":3}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# Developer Guide","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c .merge_file_0HpctG","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"-"},"content":"## Acknowledgements","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"{list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well}","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"## Design \u0026 implementation","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"{Describe the design and implementation of the product. Use UML diagrams and short code snippets where applicable.}","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"### Target user profile","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":"{Describe the target user profile}","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":"### Value proposition","lastModifiedDate":"2020-05-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":"{Describe the value proposition: what problem does it solve?}","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":22,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":"|Version| As a ... | I want to ... | So that I can ...|","lastModifiedDate":"2020-05-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":"|--------|----------|---------------|------------------|","lastModifiedDate":"2023-10-21"},{"lineNumber":26,"author":{"gitId":"-"},"content":"|v1.0|new user|see usage instructions|refer to them when I forget how to use the application|","lastModifiedDate":"2023-10-21"},{"lineNumber":27,"author":{"gitId":"-"},"content":"|v2.0|user|find a to-do item by name|locate a to-do without having to go through the entire list|","lastModifiedDate":"2023-10-21"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-10-21"},{"lineNumber":29,"author":{"gitId":"lisizhuang-0121"},"content":"## Table of Contents","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"lisizhuang-0121"},"content":"* [Acknowledgements](#acknowledgements)","lastModifiedDate":"2023-10-21"},{"lineNumber":31,"author":{"gitId":"lisizhuang-0121"},"content":"* [Design and Implementation](#design--implementation)","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"lisizhuang-0121"},"content":" * [Application Lifecycle](#application-lifecycle)","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"lisizhuang-0121"},"content":"* [Product Scope](#product-scope)","lastModifiedDate":"2023-10-21"},{"lineNumber":34,"author":{"gitId":"lisizhuang-0121"},"content":"* [Non Functional Requirements](#non-functional-requirements)","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"lisizhuang-0121"},"content":"* [Glossary](#glossary)","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"lisizhuang-0121"},"content":"* [Instructions for Manual Testing](#instructions-for-manual-testing)","lastModifiedDate":"2023-10-21"},{"lineNumber":37,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":38,"author":{"gitId":"-"},"content":"## Acknowledgements","lastModifiedDate":"2020-05-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"lisizhuang-0121"},"content":"1. For the main structure of the program, we have adapted the project structure","lastModifiedDate":"2023-10-21"},{"lineNumber":41,"author":{"gitId":"lisizhuang-0121"},"content":"from the Individual Project of Man JunCheng at [Link](https://github.com/spinoandraptos/ip/tree/master) \u003c/li\u003e","lastModifiedDate":"2023-10-21"},{"lineNumber":42,"author":{"gitId":"James-Hong-Jey"},"content":"2. For JUnit testing, we have adapted the testing codes from the AddressBook level-2","lastModifiedDate":"2023-10-21"},{"lineNumber":43,"author":{"gitId":"lisizhuang-0121"},"content":"codes at [Link](https://github.com/se-edu/addressbook-level2)\u003c/li\u003e","lastModifiedDate":"2023-10-21"},{"lineNumber":44,"author":{"gitId":"lisizhuang-0121"},"content":"3. For the developer\u0027s guide, we have reverenced the developer\u0027s guide from AddressBook","lastModifiedDate":"2023-10-21"},{"lineNumber":45,"author":{"gitId":"lisizhuang-0121"},"content":"level-3 [Link](https://se-education.org/addressbook-level3/DeveloperGuide.html)","lastModifiedDate":"2023-10-21"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":"## Design \u0026 implementation","lastModifiedDate":"2020-05-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"James-Hong-Jey"},"content":"### Architecture","lastModifiedDate":"2023-10-21"},{"lineNumber":50,"author":{"gitId":"lisizhuang-0121"},"content":"The main execution of the QuizHub application will concern 4 components which","lastModifiedDate":"2023-10-21"},{"lineNumber":51,"author":{"gitId":"lisizhuang-0121"},"content":"are the QuizHub, Ui, Parser and Command packages.","lastModifiedDate":"2023-10-21"},{"lineNumber":52,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":53,"author":{"gitId":"James-Hong-Jey"},"content":"![](./UML/architecture.jpg)","lastModifiedDate":"2023-10-21"},{"lineNumber":54,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":55,"author":{"gitId":"James-Hong-Jey"},"content":"`Quizhub` is the \"main\" class, which is responsible for starting the program, ","lastModifiedDate":"2023-10-21"},{"lineNumber":56,"author":{"gitId":"James-Hong-Jey"},"content":"initialising all other objects, executing commands, and shutting down.","lastModifiedDate":"2023-10-21"},{"lineNumber":57,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":58,"author":{"gitId":"James-Hong-Jey"},"content":"`UI` is the component that interacts with the user, taking inputs and displaying ","lastModifiedDate":"2023-10-21"},{"lineNumber":59,"author":{"gitId":"James-Hong-Jey"},"content":"the results of the executed commands.","lastModifiedDate":"2023-10-21"},{"lineNumber":60,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":61,"author":{"gitId":"James-Hong-Jey"},"content":"`Parser` acts as a multiplexer to determine which command to run, and what parameters","lastModifiedDate":"2023-10-21"},{"lineNumber":62,"author":{"gitId":"James-Hong-Jey"},"content":"it has, based on the user input.","lastModifiedDate":"2023-10-21"},{"lineNumber":63,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":64,"author":{"gitId":"James-Hong-Jey"},"content":"`Commands` refer to a package of individual commands with complex and specific","lastModifiedDate":"2023-10-21"},{"lineNumber":65,"author":{"gitId":"James-Hong-Jey"},"content":"logic, which is later executed in Quizhub and displayed in Utility.","lastModifiedDate":"2023-10-21"},{"lineNumber":66,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":67,"author":{"gitId":"James-Hong-Jey"},"content":"`Storage` is the class through which questions can be stored on the hard drive and `Utility Classes` ","lastModifiedDate":"2023-10-21"},{"lineNumber":68,"author":{"gitId":"James-Hong-Jey"},"content":"refer to any miscellaneous utility classes used by all the components.","lastModifiedDate":"2023-10-21"},{"lineNumber":69,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":70,"author":{"gitId":"James-Hong-Jey"},"content":"### Application Lifecycle","lastModifiedDate":"2023-10-21"},{"lineNumber":71,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":72,"author":{"gitId":"lisizhuang-0121"},"content":"![](./UML/lifecycle.jpg)","lastModifiedDate":"2023-10-21"},{"lineNumber":73,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":74,"author":{"gitId":"lisizhuang-0121"},"content":"The program will begin through the `run()` call to QuizHub class, with the","lastModifiedDate":"2023-10-21"},{"lineNumber":75,"author":{"gitId":"lisizhuang-0121"},"content":"necessary classes to be interacted throughout the execution.","lastModifiedDate":"2023-10-21"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":77,"author":{"gitId":"lisizhuang-0121"},"content":"The `run` function contains a loop that accepts user inputs through the `Ui`","lastModifiedDate":"2023-10-21"},{"lineNumber":78,"author":{"gitId":"lisizhuang-0121"},"content":"class. The input is captured and passed to the `parseCommand()` function of the","lastModifiedDate":"2023-10-21"},{"lineNumber":79,"author":{"gitId":"lisizhuang-0121"},"content":"Parser class. A command object is returned by the Parser class to be executed.","lastModifiedDate":"2023-10-21"},{"lineNumber":80,"author":{"gitId":"lisizhuang-0121"},"content":"If the command is of Exit type, the Loop will exit.","lastModifiedDate":"2023-10-21"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":82,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":83,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":84,"author":{"gitId":"lisizhuang-0121"},"content":"### Our Product","lastModifiedDate":"2023-10-21"},{"lineNumber":85,"author":{"gitId":"lisizhuang-0121"},"content":"QuizHub","lastModifiedDate":"2023-10-21"},{"lineNumber":86,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":87,"author":{"gitId":"-"},"content":"### Target user profile","lastModifiedDate":"2020-05-24"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":89,"author":{"gitId":"lisizhuang-0121"},"content":"Our target users are ","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"lisizhuang-0121"},"content":"* NUS Students preparing for exams","lastModifiedDate":"2023-10-21"},{"lineNumber":91,"author":{"gitId":"lisizhuang-0121"},"content":"* Like to take notes in class","lastModifiedDate":"2023-10-21"},{"lineNumber":92,"author":{"gitId":"lisizhuang-0121"},"content":"* Fear to miss out of important knowledge","lastModifiedDate":"2023-10-21"},{"lineNumber":93,"author":{"gitId":"lisizhuang-0121"},"content":"* Like to test their understanding of knowledge","lastModifiedDate":"2023-10-21"},{"lineNumber":94,"author":{"gitId":"lisizhuang-0121"},"content":"* Want to be better prepared for exams","lastModifiedDate":"2023-10-21"},{"lineNumber":95,"author":{"gitId":"lisizhuang-0121"},"content":"* Majoring in computing or engineering where there are lots of exams","lastModifiedDate":"2023-10-21"},{"lineNumber":96,"author":{"gitId":"lisizhuang-0121"},"content":"* Coders and tech geeks who enjoy using the CLI interface","lastModifiedDate":"2023-10-21"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":98,"author":{"gitId":"-"},"content":"### Value proposition","lastModifiedDate":"2020-05-24"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":100,"author":{"gitId":"lisizhuang-0121"},"content":"Allow NUS Students to easily take notes in class and allow them to ","lastModifiedDate":"2023-10-21"},{"lineNumber":101,"author":{"gitId":"lisizhuang-0121"},"content":"generate quizzes to test their knowledge of understanding. By using the ","lastModifiedDate":"2023-10-21"},{"lineNumber":102,"author":{"gitId":"lisizhuang-0121"},"content":"QuizHub application, students can input notes taken in class in a question form,","lastModifiedDate":"2023-10-21"},{"lineNumber":103,"author":{"gitId":"lisizhuang-0121"},"content":"which they could use to take quizzes to ensure their understanding of the topic.","lastModifiedDate":"2023-10-21"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":105,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":107,"author":{"gitId":"-"},"content":"| Version | As a ... | I want to ... | So that I can ... |","lastModifiedDate":"2020-05-24"},{"lineNumber":108,"author":{"gitId":"lisizhuang-0121"},"content":"|:-------:|:-------------------------------------:|:---------------------------------------------------------------------------------:|:-------------------------------------------------------------------------:|","lastModifiedDate":"2023-10-21"},{"lineNumber":109,"author":{"gitId":"lisizhuang-0121"},"content":"| v1.0 | New student user | I can access the tutorial on how to operate the app | Easily use the app effectively for my studies |","lastModifiedDate":"2023-10-21"},{"lineNumber":110,"author":{"gitId":"lisizhuang-0121"},"content":"| v1.0 | Efficient student | I can add a question and its answer easily to my question and answer bank | Build my question and answer bank quickly |","lastModifiedDate":"2023-10-21"},{"lineNumber":111,"author":{"gitId":"lisizhuang-0121"},"content":"| v1.0 | Organized student | I can view all the questions and answers in my question and answer bank | Review my study materials comprehensively |","lastModifiedDate":"2023-10-21"},{"lineNumber":112,"author":{"gitId":"lisizhuang-0121"},"content":"| v1.0 | Detail-oriented student | I can edit the content of a question or its answer | Correct any mistakes or make improvements |","lastModifiedDate":"2023-10-21"},{"lineNumber":113,"author":{"gitId":"lisizhuang-0121"},"content":"| v1.0 | Student focused on clarity | I can delete a question and its answer from my question and answer bank | Maintain a clean and relevant set of questions for revision |","lastModifiedDate":"2023-10-21"},{"lineNumber":114,"author":{"gitId":"lisizhuang-0121"},"content":"| v1.0 | Student focused on revising for tests | I can start and end a quiz which tests me on questions in my question bank | Consolidate understanding of my learnt knowledge through rigorous testing |","lastModifiedDate":"2023-10-21"},{"lineNumber":115,"author":{"gitId":"lisizhuang-0121"},"content":"| v1.0 | Student focused on revising for tests | I can see my final quiz score and whether I have answered each question correctly | Identify areas of weakness to be improved upon for my tests |","lastModifiedDate":"2023-10-21"},{"lineNumber":116,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.0 | User seeking efficiency | I can search for a specific question within a flashcard deck | locate information quickly. |","lastModifiedDate":"2023-10-21"},{"lineNumber":117,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.0 | User with diverse interests | I can categorize questions by topic or subject | tailor my quizzes |","lastModifiedDate":"2023-10-21"},{"lineNumber":118,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.0 | User seeking variety | I can shuffle the order of questions in a flashcard deck | keep my quizzes engaging. |","lastModifiedDate":"2023-10-21"},{"lineNumber":119,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.0 | User aiming for improvement | I can mark a question as \"difficult\" or \"easy\" for later review | optimize my learning. |","lastModifiedDate":"2023-10-21"},{"lineNumber":120,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.0 | User seeking a challenge | I can practice questions in a random order | test my knowledge comprehensively. |","lastModifiedDate":"2023-10-21"},{"lineNumber":121,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.0 | User seeking structure | I can practice questions in a sequential order | follow a specific learning path. |","lastModifiedDate":"2023-10-21"},{"lineNumber":122,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.1 | user aiming for accuracy | I can see how many questions I\u0027ve answered correctly | track my proficiency. |","lastModifiedDate":"2023-10-21"},{"lineNumber":123,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.1 | user tracking progress | I can reset the progress of a specific flashcard deck | start fresh. |","lastModifiedDate":"2023-10-21"},{"lineNumber":124,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.1 | time-conscious user | I can set a timer for each flashcard question during practice | manage my study sessions effectively. |","lastModifiedDate":"2023-10-21"},{"lineNumber":125,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.1 | goal-oriented user | I can view my overall progress and performance statistics | gauge my improvement. |","lastModifiedDate":"2023-10-21"},{"lineNumber":126,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.1 | user aiming for improvement | I can see how many questions I\u0027ve answered incorrectly | focus on weak areas. |","lastModifiedDate":"2023-10-21"},{"lineNumber":127,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.1 | user committed to learning | I can review the questions I\u0027ve answered incorrectly | reinforce my knowledge. |","lastModifiedDate":"2023-10-21"},{"lineNumber":128,"author":{"gitId":"spinoandraptos"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e .merge_file_eTgh6a","lastModifiedDate":"2023-10-21"},{"lineNumber":129,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":130,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":131,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":132,"author":{"gitId":"-"},"content":"{Give non-functional requirements}","lastModifiedDate":"2020-05-24"},{"lineNumber":133,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":134,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":135,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":136,"author":{"gitId":"-"},"content":"* *glossary item* - Definition","lastModifiedDate":"2020-05-24"},{"lineNumber":137,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":138,"author":{"gitId":"-"},"content":"## Instructions for manual testing","lastModifiedDate":"2020-05-24"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":140,"author":{"gitId":"-"},"content":"{Give instructions on how to do a manual product testing e.g., how to load sample data to be used for testing}","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"spinoandraptos":3,"James-Hong-Jey":21,"lisizhuang-0121":61,"-":55}},{"path":"src/main/java/Quizhub.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.command.Command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" * The main program running for the Duke chatbot.","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" * The program bridges the user interface (Ui),","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" * hard disk data (dataStorage) and supports","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" * dynamic data manipulation.","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":"public class Quizhub {","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" private Ui ui;","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" private Storage dataStorage;","lastModifiedDate":"2023-10-04"},{"lineNumber":16,"author":{"gitId":"James-Hong-Jey"},"content":" private QuestionList questions;","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" private Parser parser;","lastModifiedDate":"2023-10-04"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" * Initiates the program with the necessary components.","lastModifiedDate":"2023-10-04"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" * @param filePath File location where data is","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" * written to and read from by the program.","lastModifiedDate":"2023-10-04"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" public Quizhub(String filePath){","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" dataStorage \u003d new Storage(filePath);","lastModifiedDate":"2023-10-04"},{"lineNumber":26,"author":{"gitId":"James-Hong-Jey"},"content":" questions \u003d new QuestionList();","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"James-Hong-Jey"},"content":" ui \u003d new Ui(dataStorage, questions);","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-10-04"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" * Starts the chatbot by showing opening message.","lastModifiedDate":"2023-10-04"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" * Chatbot repeatedly handles user commands","lastModifiedDate":"2023-10-04"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" * until it is requested to terminate.","lastModifiedDate":"2023-10-04"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" * Chatbot closes by showing closing message.","lastModifiedDate":"2023-10-04"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" public void run(){","lastModifiedDate":"2023-10-04"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" ui.displayOpeningMessage();","lastModifiedDate":"2023-10-04"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" boolean toExit \u003d false;","lastModifiedDate":"2023-10-04"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" while(!toExit){","lastModifiedDate":"2023-10-04"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" String fullCommand \u003d ui.getUserInput();","lastModifiedDate":"2023-10-21"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" ui.showLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d parser.parseCommand(fullCommand);","lastModifiedDate":"2023-10-04"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" toExit \u003d command.toExit();","lastModifiedDate":"2023-10-04"},{"lineNumber":44,"author":{"gitId":"James-Hong-Jey"},"content":" command.executeCommand(ui, dataStorage, questions);","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" if(!toExit){","lastModifiedDate":"2023-10-04"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" ui.showLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" ui.displayClosingMessage();","lastModifiedDate":"2023-10-04"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-04"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" new Quizhub(\"tasklist.txt\").run();","lastModifiedDate":"2023-10-08"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":46,"James-Hong-Jey":5,"lisizhuang-0121":4}},{"path":"src/main/java/quizhub/command/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":" * Represents a user command to execute an action.","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"public class Command {","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" public enum CommandType {HELP, ADD, LIST, EDIT, DELETE, START, SHUFFLE, MARKDIFFICULTY, END, RESULT, FIND, EXIT, INVALID};","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" private CommandType commandType;","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new blank command.","lastModifiedDate":"2023-10-04"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" public Command(){}","lastModifiedDate":"2023-10-04"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new command of given type.","lastModifiedDate":"2023-10-04"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" * @param commandType Type of command.","lastModifiedDate":"2023-10-04"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" public Command(CommandType commandType){","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-10-04"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" * Performs an action according to command.","lastModifiedDate":"2023-10-04"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-04"},{"lineNumber":28,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage Hard disk storage for storing question data.","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":31,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions){}","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" * Checks if the latest command calls for program termination.","lastModifiedDate":"2023-10-04"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" public boolean toExit(){","lastModifiedDate":"2023-10-04"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" return commandType \u003d\u003d CommandType.EXIT;","lastModifiedDate":"2023-10-04"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":32,"James-Hong-Jey":3,"lisizhuang-0121":3}},{"path":"src/main/java/quizhub/command/CommandDelete.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" * Represents a command to delete a question.","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"public class CommandDelete extends Command {","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"James-Hong-Jey"},"content":" private int qnIndex;","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new delete command for a question.","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" * @param userInput User input from CLI.","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" public CommandDelete(String userInput){","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" super(CommandType.DELETE);","lastModifiedDate":"2023-10-04"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" String[] editDetails;","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" editDetails \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" qnIndex \u003d Integer.parseInt(editDetails[1].strip());","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" } catch (NumberFormatException incompleteCommand) {","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(Parser.INVALID_INTEGER_INDEX);","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as delete [question number]\");","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate question index :\u003c\");","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as delete [question number]!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" * Checks if specified task exists.","lastModifiedDate":"2023-10-04"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" * Deletes the specified task and updates storage data.","lastModifiedDate":"2023-10-04"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-04"},{"lineNumber":36,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-08"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage Hard disk storage for storing task data.","lastModifiedDate":"2023-10-04"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-04"},{"lineNumber":40,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions){","lastModifiedDate":"2023-10-08"},{"lineNumber":41,"author":{"gitId":"James-Hong-Jey"},"content":" String taskName \u003d questions.viewQuestionByIndex(qnIndex);","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" if(!taskName.equals(\"Question Not Found\")) {","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"James-Hong-Jey"},"content":" questions.deleteQuestionByIndex(qnIndex);","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"James-Hong-Jey"},"content":" dataStorage.updateData(questions);","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":37,"James-Hong-Jey":7,"lisizhuang-0121":3}},{"path":"src/main/java/quizhub/command/CommandEdit.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" * Represents a command to edit a task.","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":"public class CommandEdit extends Command {","lastModifiedDate":"2023-10-05"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" private int qnIndex;","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" private String newDescription;","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" private String newAnswer;","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new edit command","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" * @param userInput User input from CLI.","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" public CommandEdit(String userInput) {","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"lisizhuang-0121"},"content":" super(CommandType.EDIT);","lastModifiedDate":"2023-10-05"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" String[] editDetails;","lastModifiedDate":"2023-10-08"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" String editCriteria;","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-08"},{"lineNumber":24,"author":{"gitId":"lisizhuang-0121"},"content":" editDetails \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"lisizhuang-0121"},"content":" qnIndex \u003d Integer.parseInt(editDetails[1].strip());","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" } catch (NumberFormatException incompleteCommand) {","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(Parser.INVALID_INTEGER_INDEX);","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as edit [question number] /description [description] \" +","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" \"or edit /answer [answer]!\");","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" return;","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate question index :\u003c\");","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as edit [question number] /description [description] \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" \"or edit /answer [answer]!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" editCriteria \u003d editDetails[2].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate if you are editing question description or answer :\u003c\");","lastModifiedDate":"2023-10-08"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as edit [question number] /description [description] \" +","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" \"or edit /answer [answer]!\");","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" return;","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" switch (editCriteria){","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"lisizhuang-0121"},"content":" case \"/description\":","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" newDescription \u003d Parser.getContentAfterKeyword(userInput, \"/description\");","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":50,"author":{"gitId":"lisizhuang-0121"},"content":" case \"/answer\":","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" newAnswer \u003d Parser.getContentAfterKeyword(userInput, \"/answer\");","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-08"},{"lineNumber":54,"author":{"gitId":"lisizhuang-0121"},"content":" throw new ArrayIndexOutOfBoundsException();","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate the content you are editing to :\u003c\");","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as edit [question number] /description [description] \" +","lastModifiedDate":"2023-10-08"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" \"or edit /answer [answer]!\");","lastModifiedDate":"2023-10-08"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":61,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":62,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":63,"author":{"gitId":"lisizhuang-0121"},"content":" @Override","lastModifiedDate":"2023-10-05"},{"lineNumber":64,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-08"},{"lineNumber":65,"author":{"gitId":"lisizhuang-0121"},"content":" if (newDescription \u003d\u003d null \u0026\u0026 newAnswer \u003d\u003d null) {","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"lisizhuang-0121"},"content":" return;","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" questions.editQuestionByIndex(qnIndex, newDescription, newAnswer);","lastModifiedDate":"2023-10-08"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" dataStorage.updateData(questions);","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":71,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"spinoandraptos":50,"James-Hong-Jey":2,"lisizhuang-0121":19}},{"path":"src/main/java/quizhub/command/CommandExit.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":" * Represents a command to exit the program.","lastModifiedDate":"2023-10-04"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"public class CommandExit extends Command {","lastModifiedDate":"2023-10-04"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new exit command to terminate program.","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" public CommandExit() {","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" super(CommandType.EXIT);","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":11,"lisizhuang-0121":1}},{"path":"src/main/java/quizhub/command/CommandFind.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":" * Represents a command to search for a task.","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"public class CommandFind extends Command{","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" private String searchDetails;","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new find command to search for a task.","lastModifiedDate":"2023-10-04"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" * @param searchDetails User input containing details of what to search.","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" public CommandFind(String searchDetails){","lastModifiedDate":"2023-10-04"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" super((CommandType.FIND));","lastModifiedDate":"2023-10-04"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" this.searchDetails \u003d searchDetails;","lastModifiedDate":"2023-10-04"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" * Checks if specified task exists.","lastModifiedDate":"2023-10-04"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" * Marks the specified task as not done and updates storage data.","lastModifiedDate":"2023-10-04"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-04"},{"lineNumber":26,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage Hard disk storage for storing task data.","lastModifiedDate":"2023-10-04"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-04"},{"lineNumber":30,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"James-Hong-Jey"},"content":" questions.searchList(searchDetails);","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":26,"James-Hong-Jey":4,"lisizhuang-0121":3}},{"path":"src/main/java/quizhub/command/CommandHelp.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":7,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":8,"author":{"gitId":"lisizhuang-0121"},"content":"public class CommandHelp extends Command{","lastModifiedDate":"2023-10-05"},{"lineNumber":9,"author":{"gitId":"lisizhuang-0121"},"content":" public CommandHelp() {","lastModifiedDate":"2023-10-05"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":" super(CommandType.HELP);","lastModifiedDate":"2023-10-05"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":12,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":13,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"StevenGX12"},"content":" * Displays all commands available to the user.","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"StevenGX12"},"content":" * ","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"StevenGX12"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-09"},{"lineNumber":17,"author":{"gitId":"StevenGX12"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"StevenGX12"},"content":" * @param dataStorage Hard disk storage for storing task data.","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"lisizhuang-0121"},"content":" @Override","lastModifiedDate":"2023-10-05"},{"lineNumber":21,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-08"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(Parser.INVALID_COMMAND_FEEDBACK);","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":24,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"spinoandraptos":2,"StevenGX12":7,"James-Hong-Jey":2,"lisizhuang-0121":13}},{"path":"src/main/java/quizhub/command/CommandInvalid.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":" * Represents an invalid command to be handled.","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"lisizhuang-0121"},"content":"public class CommandInvalid extends Command {","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":" public String feedback;","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new invalid command with error feedback for user.","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"lisizhuang-0121"},"content":" public CommandInvalid(String feedback) {","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"lisizhuang-0121"},"content":" super(CommandType.INVALID);","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"lisizhuang-0121"},"content":" this.feedback \u003d feedback;","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" * Displays the error feedback on CLI for user.","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"lisizhuang-0121"},"content":" @Override","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"lisizhuang-0121"},"content":" ui.showInvalidCommandHelp(feedback);","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"spinoandraptos":9,"lisizhuang-0121":17}},{"path":"src/main/java/quizhub/command/CommandList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":" * Represents a command to list all tasks.","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"public class CommandList extends Command {","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new list command to list all tasks.","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" public CommandList(){","lastModifiedDate":"2023-10-04"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" super(CommandType.LIST);","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" * Prints all tasks in current task list.","lastModifiedDate":"2023-10-04"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-04"},{"lineNumber":20,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-08"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage Hard disk storage for storing task data.","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-04"},{"lineNumber":24,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions){","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"James-Hong-Jey"},"content":" questions.printQuestionList();","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":20,"James-Hong-Jey":4,"lisizhuang-0121":3}},{"path":"src/main/java/quizhub/command/CommandMarkDifficulty.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spinoandraptos"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.exception.QuizHubExceptions;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" * Represents a command to mark the difficulty of a question.","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":"public class CommandMarkDifficulty extends Command{","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" private int qnIndex;","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" private Question.QnDifficulty qnDifficulty \u003d Question.QnDifficulty.DEFAULT;","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new command to mark the difficulty of a question of specified index","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" * @param userInput User input from CLI.","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" public CommandMarkDifficulty(String userInput){","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" super(CommandType.MARKDIFFICULTY);","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" String[] commandDetails \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" qnIndex \u003d Integer.parseInt(commandDetails[1].strip());","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" if(qnIndex \u003c 0){","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" throw new QuizHubExceptions(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" } catch (NumberFormatException incompleteCommand) {","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(Parser.INVALID_INTEGER_INDEX);","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate index of question to be marked :\u003c\");","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as markdiff [question number] [question difficulty]!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" } catch (QuizHubExceptions invalidIndex){","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(invalidIndex.getMessage());","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" qnDifficulty \u003d Parser.extractQuestionDifficulty(commandDetails[2].strip());","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" if(qnDifficulty \u003d\u003d Question.QnDifficulty.DEFAULT){","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" No changes made to original question difficulty!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate difficulty to be assigned the question :\u003c\");","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" assert qnDifficulty !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" if(qnDifficulty !\u003d Question.QnDifficulty.DEFAULT) {","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" questions.markQuestionDifficulty(qnIndex, qnDifficulty, true);","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" dataStorage.updateData(questions);","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"spinoandraptos":58}},{"path":"src/main/java/quizhub/command/CommandShortAnswer.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"lisizhuang-0121"},"content":" * Represents a command to add a quiz question.","lastModifiedDate":"2023-10-05"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"James-Hong-Jey"},"content":"public class CommandShortAnswer extends Command {","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"James-Hong-Jey"},"content":" private final String userInput;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":14,"author":{"gitId":"James-Hong-Jey"},"content":" * Creates a new question command to add a SHORTANSWER question","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":16,"author":{"gitId":"James-Hong-Jey"},"content":" * @param userInput User input containing details of the SHORTANSWER question","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":18,"author":{"gitId":"James-Hong-Jey"},"content":" public CommandShortAnswer(String userInput){","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"lisizhuang-0121"},"content":" super(CommandType.ADD);","lastModifiedDate":"2023-10-05"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"James-Hong-Jey"},"content":" * Get userInput item (still in the short Question / Answer format)","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"James-Hong-Jey"},"content":" * @return String userInput","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"James-Hong-Jey"},"content":" public String getUserInput() {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"James-Hong-Jey"},"content":" return userInput;","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":32,"author":{"gitId":"James-Hong-Jey"},"content":" * Adds the SHORTANSWER question and updates storage data.","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-04"},{"lineNumber":35,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-08"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage Hard disk storage for storing task data.","lastModifiedDate":"2023-10-04"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-04"},{"lineNumber":39,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions){","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" questions.addToQuestionList(userInput, Question.QnType.SHORTANSWER, true);","lastModifiedDate":"2023-10-21"},{"lineNumber":41,"author":{"gitId":"James-Hong-Jey"},"content":" dataStorage.updateData(questions);","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":19,"James-Hong-Jey":20,"lisizhuang-0121":5}},{"path":"src/main/java/quizhub/command/CommandShuffle.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"James-Hong-Jey"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-21"},{"lineNumber":2,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":3,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"James-Hong-Jey"},"content":"public class CommandShuffle extends Command {","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" public CommandShuffle() {","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" super(CommandType.SHUFFLE);","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"James-Hong-Jey"},"content":" @Override","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"James-Hong-Jey"},"content":" questions.shuffleQuestions();","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"James-Hong-Jey"},"content":"}","lastModifiedDate":"2023-10-21"}],"authorContributionMap":{"spinoandraptos":3,"James-Hong-Jey":12}},{"path":"src/main/java/quizhub/command/CommandStart.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":7,"author":{"gitId":"yeo-menghan"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"yeo-menghan"},"content":" * Command to Start the Quiz","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":"public class CommandStart extends Command{","lastModifiedDate":"2023-10-05"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" private String startMode;","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" private String startDetails \u003d \"\";","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new start command","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" * @param userInput User input from CLI.","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" public CommandStart(String userInput) {","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"lisizhuang-0121"},"content":" super(CommandType.START);","lastModifiedDate":"2023-10-05"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" String[] commandDetails \u003d userInput.split(\"/\");","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" startMode \u003d commandDetails[1].split(\" \")[0].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate mode of the quiz :\u003c\");","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as start /[quiz mode] [start details]!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" if(!startMode.equalsIgnoreCase(\"all\")){","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" startDetails \u003d commandDetails[1].split(\" \")[1].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate start details :\u003c\");","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as start /[quiz mode] [start details]!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":37,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":38,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":39,"author":{"gitId":"yeo-menghan"},"content":" * Loop through the array list of questions \u0026 allow the user to answer them.","lastModifiedDate":"2023-10-09"},{"lineNumber":40,"author":{"gitId":"yeo-menghan"},"content":" * If the input given matches EXACTLY (v1.0), then the answer is correct","lastModifiedDate":"2023-10-09"},{"lineNumber":41,"author":{"gitId":"yeo-menghan"},"content":" * returns \"Correct\" or \"Wrong\"","lastModifiedDate":"2023-10-09"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage Hard disk storage for storing question data.","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-21"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-21"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" assert questions !\u003d null \u0026\u0026 ui !\u003d null \u0026\u0026 dataStorage !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" if(startMode !\u003d null) {","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" switch (startMode.toLowerCase()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" case \"module\":","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" assert startDetails !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" questions.startQuiz(ui, questions.categoriseListByModule(startDetails));","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" case \"all\":","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" questions.startQuiz(ui, questions.getAllQns());","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please enter valid quiz mode :\u003c\");","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":65,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"spinoandraptos":45,"James-Hong-Jey":1,"yeo-menghan":8,"lisizhuang-0121":11}},{"path":"src/main/java/quizhub/exception/QuizHubExceptions.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.exception;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"lisizhuang-0121"},"content":"/**","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"lisizhuang-0121"},"content":" * Represents non-standard exceptions thrown by this program specifically.","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"public class QuizHubExceptions extends Exception{","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"lisizhuang-0121"},"content":" public QuizHubExceptions(String message) {","lastModifiedDate":"2023-10-05"},{"lineNumber":7,"author":{"gitId":"lisizhuang-0121"},"content":" super(message);","lastModifiedDate":"2023-10-05"},{"lineNumber":8,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":9,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-05"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"lisizhuang-0121":10}},{"path":"src/main/java/quizhub/logger/CustomLogger.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"yeo-menghan"},"content":"package quizhub.logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"yeo-menghan"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"yeo-menghan"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"yeo-menghan"},"content":"public class CustomLogger {","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"yeo-menghan"},"content":" private static final Logger logger \u003d Logger.getLogger(CustomLogger.class.getName());","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"yeo-menghan"},"content":" // Log a message at the INFO level","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"yeo-menghan"},"content":" public static void info(String message) {","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"yeo-menghan"},"content":" logger.log(Level.INFO, message);","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"yeo-menghan"},"content":" // Log a message at the WARNING level","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"yeo-menghan"},"content":" public static void warning(String message) {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"yeo-menghan"},"content":" logger.log(Level.WARNING, message);","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"yeo-menghan"},"content":" // Log an error message at the SEVERE level","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"yeo-menghan"},"content":" public static void error(String message) {","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"yeo-menghan"},"content":" logger.log(Level.SEVERE, message);","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"James-Hong-Jey"},"content":" // Log an error message in greater detail","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"James-Hong-Jey"},"content":" public static void fineError(String message) {","lastModifiedDate":"2023-10-21"},{"lineNumber":26,"author":{"gitId":"James-Hong-Jey"},"content":" logger.log(Level.FINE, message);","lastModifiedDate":"2023-10-21"},{"lineNumber":27,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":28,"author":{"gitId":"yeo-menghan"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"yeo-menghan":23,"James-Hong-Jey":5}},{"path":"src/main/java/quizhub/parser/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.parser;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.command.*;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.exception.QuizHubExceptions;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" * Represents a parser that converts user inputs into command objects.","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"public class Parser {","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" public static final String INVALID_COMMAND_FEEDBACK \u003d \"Here are the list of commands you can use:\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" \" 1. help - shows the list of commands you can use\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" \" 2. short [question]/[answer] - adds a short answer question and its answer to the list,\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" \" 3. list - shows the list of questions and answers,\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" \" 4. delete [question number] - deletes the question and answer at the specified number,\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" \" 5. find /[description] - displays all questions that contains the the specified description,\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" \" 6. edit [question number] /description [description] - edits the description of the question \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" \"with the specified number,\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" \" 7. edit [question number] /answer [answer] - edits the answer to the question with \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" \"the specified number,\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" \" 8. start - starts the quiz,\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" \" 9. shuffle - shuffle quiz questions to a random order,\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" \" 10. markdiff [question number] [question difficulty] - sets the difficulty of question \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" \"with the specified number,\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" \" 11. bye - exits the program\";","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String INVALID_INTEGER_INDEX \u003d \" Please enter valid integer index!\";","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"lisizhuang-0121"},"content":" * Analyses and extracts relevant information from user input","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"lisizhuang-0121"},"content":" * to create a new Command object of the right type.","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"lisizhuang-0121"},"content":" * @param userInput The full user CLI input.","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"lisizhuang-0121"},"content":" public Command parseCommand(String userInput) {","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"lisizhuang-0121"},"content":" String[] commandTokens \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-12"},{"lineNumber":47,"author":{"gitId":"lisizhuang-0121"},"content":" if (commandTokens.length \u003d\u003d 0) {","lastModifiedDate":"2023-10-12"},{"lineNumber":48,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandInvalid(INVALID_COMMAND_FEEDBACK);","lastModifiedDate":"2023-10-12"},{"lineNumber":49,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"lisizhuang-0121"},"content":" String commandTitle \u003d commandTokens[0];","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-04"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" switch (commandTitle) {","lastModifiedDate":"2023-10-04"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" case \"bye\":","lastModifiedDate":"2023-10-04"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" return new CommandExit();","lastModifiedDate":"2023-10-04"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" case \"list\":","lastModifiedDate":"2023-10-04"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" return new CommandList();","lastModifiedDate":"2023-10-04"},{"lineNumber":58,"author":{"gitId":"James-Hong-Jey"},"content":" case \"short\":","lastModifiedDate":"2023-10-08"},{"lineNumber":59,"author":{"gitId":"James-Hong-Jey"},"content":" return new CommandShortAnswer(userInput);","lastModifiedDate":"2023-10-08"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" case \"start\":","lastModifiedDate":"2023-10-08"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" return new CommandStart(userInput);","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" case \"edit\":","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" return new CommandEdit(userInput);","lastModifiedDate":"2023-10-08"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":" case \"delete\":","lastModifiedDate":"2023-10-04"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" return new CommandDelete(userInput);","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" case \"find\":","lastModifiedDate":"2023-10-04"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" return new CommandFind(userInput);","lastModifiedDate":"2023-10-04"},{"lineNumber":68,"author":{"gitId":"James-Hong-Jey"},"content":" case \"shuffle\":","lastModifiedDate":"2023-10-21"},{"lineNumber":69,"author":{"gitId":"James-Hong-Jey"},"content":" return new CommandShuffle();","lastModifiedDate":"2023-10-21"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" case \"markdiff\":","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":" return new CommandMarkDifficulty(userInput);","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" case \"help\":","lastModifiedDate":"2023-10-08"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" return new CommandHelp();","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-04"},{"lineNumber":75,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandInvalid(INVALID_COMMAND_FEEDBACK);","lastModifiedDate":"2023-10-12"},{"lineNumber":76,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":" catch (NumberFormatException | ArrayIndexOutOfBoundsException invalidIndex) {","lastModifiedDate":"2023-10-04"},{"lineNumber":79,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandInvalid(INVALID_INTEGER_INDEX);","lastModifiedDate":"2023-10-12"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":81,"author":{"gitId":"lisizhuang-0121"},"content":" catch (Exception error) {","lastModifiedDate":"2023-10-12"},{"lineNumber":82,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandInvalid(INVALID_COMMAND_FEEDBACK);","lastModifiedDate":"2023-10-12"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" * Extracts relevant information after a specified keyword","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" * from CLI user input.","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":" * @param userInput The full user CLI input.","lastModifiedDate":"2023-10-22"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" * @param keyWord The keyword used to partition the user input.","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":" public static String getContentAfterKeyword(String userInput, String keyWord) throws ArrayIndexOutOfBoundsException {","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":" String content;","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":" content \u003d userInput.split(keyWord)[1].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" if (content.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" throw new ArrayIndexOutOfBoundsException();","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":" return content;","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" * Extracts difficulty from user command to assign to a question.","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" * Default invalid difficulty is assigned if invalid difficulty given.","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" * @param difficulty The difficulty level defined by user in CLI.","lastModifiedDate":"2023-10-22"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":106,"author":{"gitId":"spinoandraptos"},"content":" public static Question.QnDifficulty extractQuestionDifficulty(String difficulty){","lastModifiedDate":"2023-10-22"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":" Question.QnDifficulty qnDifficulty \u003d Question.QnDifficulty.DEFAULT;","lastModifiedDate":"2023-10-22"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":109,"author":{"gitId":"spinoandraptos"},"content":" switch (difficulty.toLowerCase()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":110,"author":{"gitId":"spinoandraptos"},"content":" case \"easy\":","lastModifiedDate":"2023-10-22"},{"lineNumber":111,"author":{"gitId":"spinoandraptos"},"content":" qnDifficulty \u003d Question.QnDifficulty.EASY;","lastModifiedDate":"2023-10-22"},{"lineNumber":112,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":113,"author":{"gitId":"spinoandraptos"},"content":" case \"hard\":","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"spinoandraptos"},"content":" qnDifficulty \u003d Question.QnDifficulty.HARD;","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":116,"author":{"gitId":"spinoandraptos"},"content":" case \"normal\":","lastModifiedDate":"2023-10-22"},{"lineNumber":117,"author":{"gitId":"spinoandraptos"},"content":" qnDifficulty \u003d Question.QnDifficulty.NORMAL;","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"spinoandraptos"},"content":" throw new QuizHubExceptions(\" Ono! We only support easy, normal and hard difficulty levels\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":121,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":122,"author":{"gitId":"spinoandraptos"},"content":" \" Please only use \u0027easy\u0027, \u0027normal\u0027 or \u0027hard\u0027 for difficulty levels!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":123,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":124,"author":{"gitId":"spinoandraptos"},"content":" } catch (QuizHubExceptions incorrectDifficulty){","lastModifiedDate":"2023-10-22"},{"lineNumber":125,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(incorrectDifficulty.getMessage());","lastModifiedDate":"2023-10-22"},{"lineNumber":126,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":127,"author":{"gitId":"spinoandraptos"},"content":" return qnDifficulty;","lastModifiedDate":"2023-10-22"},{"lineNumber":128,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":129,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":130,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":105,"James-Hong-Jey":4,"lisizhuang-0121":21}},{"path":"src/main/java/quizhub/question/Question.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.question;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":" * Represents all questions in the question list in general.","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"public class Question {","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":" public enum QnType {SHORTANSWER, DEFAULT};","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":" public enum QnDifficulty {EASY, HARD, NORMAL, DEFAULT};","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" private QnType qnType;","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" private QnDifficulty qnDifficulty;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" private String description;","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" private boolean done;","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"StevenGX12"},"content":" private String module;","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new question with a blank description,","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" * not done status, default question type and normal difficulty..","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":18,"author":{"gitId":"lisizhuang-0121"},"content":" public Question(){","lastModifiedDate":"2023-10-05"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" description \u003d \"\";","lastModifiedDate":"2023-10-04"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" done \u003d false;","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" qnType \u003d QnType.DEFAULT;","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"StevenGX12"},"content":" module \u003d \"\";","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" qnDifficulty \u003d QnDifficulty.NORMAL;","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new question with a given description,","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" * not done status, default task type and normal difficulty.","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" * @param questionBody Description given to the question.","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":31,"author":{"gitId":"James-Hong-Jey"},"content":" public Question(String questionBody){","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"James-Hong-Jey"},"content":" this.description \u003d questionBody;","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" done \u003d false;","lastModifiedDate":"2023-10-04"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" qnType \u003d QnType.DEFAULT;","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"StevenGX12"},"content":" module \u003d \"\";","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" qnDifficulty \u003d QnDifficulty.NORMAL;","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new question with a given description,","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" * not done status, given question type and normal difficulty.","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" * @param questionBody Description given to the question.","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" * @param qnType Type given to the question.","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" public Question(String questionBody, QnType qnType){","lastModifiedDate":"2023-10-21"},{"lineNumber":46,"author":{"gitId":"James-Hong-Jey"},"content":" this.description \u003d questionBody;","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" done \u003d false;","lastModifiedDate":"2023-10-04"},{"lineNumber":48,"author":{"gitId":"James-Hong-Jey"},"content":" this.qnType \u003d qnType;","lastModifiedDate":"2023-10-08"},{"lineNumber":49,"author":{"gitId":"StevenGX12"},"content":" module \u003d \"\";","lastModifiedDate":"2023-10-21"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" qnDifficulty \u003d QnDifficulty.NORMAL;","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":52,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":53,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":54,"author":{"gitId":"StevenGX12"},"content":" * Creates a new question with a given description,","lastModifiedDate":"2023-10-21"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" * not done status, given question type, and given module and normal difficulty.","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"StevenGX12"},"content":" *","lastModifiedDate":"2023-10-21"},{"lineNumber":57,"author":{"gitId":"StevenGX12"},"content":" * @param questionBody Description given to the question.","lastModifiedDate":"2023-10-21"},{"lineNumber":58,"author":{"gitId":"StevenGX12"},"content":" * @param qnType Type given to the question.","lastModifiedDate":"2023-10-21"},{"lineNumber":59,"author":{"gitId":"StevenGX12"},"content":" * @param module Module given to the question.","lastModifiedDate":"2023-10-21"},{"lineNumber":60,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" public Question(String questionBody, QnType qnType, String module){","lastModifiedDate":"2023-10-21"},{"lineNumber":62,"author":{"gitId":"StevenGX12"},"content":" this.description \u003d questionBody;","lastModifiedDate":"2023-10-21"},{"lineNumber":63,"author":{"gitId":"StevenGX12"},"content":" done \u003d false;","lastModifiedDate":"2023-10-21"},{"lineNumber":64,"author":{"gitId":"StevenGX12"},"content":" this.qnType \u003d qnType;","lastModifiedDate":"2023-10-21"},{"lineNumber":65,"author":{"gitId":"StevenGX12"},"content":" this.module \u003d module;","lastModifiedDate":"2023-10-21"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" qnDifficulty \u003d QnDifficulty.NORMAL;","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new question with a given description,","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":" * not done status. given question type, given module,","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" * and given difficulty.","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" * @param questionBody Description given to the question.","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"spinoandraptos"},"content":" * @param qnType Type given to the question.","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"spinoandraptos"},"content":" * @param module Module given to the question.","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":" * @param qnDifficulty Difficulty level assigned to the question.","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":79,"author":{"gitId":"spinoandraptos"},"content":" public Question(String questionBody, QnType qnType, String module, QnDifficulty qnDifficulty){","lastModifiedDate":"2023-10-22"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" this.description \u003d questionBody;","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":" done \u003d false;","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":" this.qnType \u003d qnType;","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":" this.module \u003d module;","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" this.qnDifficulty \u003d qnDifficulty;","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":86,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" * Mark a question as done.","lastModifiedDate":"2023-10-21"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" public void markAsDone(){","lastModifiedDate":"2023-10-21"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" done \u003d true;","lastModifiedDate":"2023-10-21"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":" * Mark a question as not done.","lastModifiedDate":"2023-10-21"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" public void markAsNotDone(){","lastModifiedDate":"2023-10-21"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":" done \u003d false;","lastModifiedDate":"2023-10-21"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" * Checks if a question has been done.","lastModifiedDate":"2023-10-08"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":103,"author":{"gitId":"James-Hong-Jey"},"content":" public boolean questionIsDone(){","lastModifiedDate":"2023-10-08"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" return done;","lastModifiedDate":"2023-10-04"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":106,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":" * Returns question description.","lastModifiedDate":"2023-10-08"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":109,"author":{"gitId":"James-Hong-Jey"},"content":" public String getQuestionDescription(){","lastModifiedDate":"2023-10-08"},{"lineNumber":110,"author":{"gitId":"spinoandraptos"},"content":" return description;","lastModifiedDate":"2023-10-04"},{"lineNumber":111,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":112,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":113,"author":{"gitId":"spinoandraptos"},"content":" * Returns question timing details.","lastModifiedDate":"2023-10-08"},{"lineNumber":114,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":115,"author":{"gitId":"James-Hong-Jey"},"content":" public String getQuestionTiming(boolean useDefaultTiming){","lastModifiedDate":"2023-10-08"},{"lineNumber":116,"author":{"gitId":"spinoandraptos"},"content":" return \"\";","lastModifiedDate":"2023-10-04"},{"lineNumber":117,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":118,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":119,"author":{"gitId":"spinoandraptos"},"content":" * Returns task type.","lastModifiedDate":"2023-10-04"},{"lineNumber":120,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":121,"author":{"gitId":"spinoandraptos"},"content":" public QnType getQuestionType(){","lastModifiedDate":"2023-10-21"},{"lineNumber":122,"author":{"gitId":"James-Hong-Jey"},"content":" return qnType;","lastModifiedDate":"2023-10-08"},{"lineNumber":123,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":124,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":125,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":126,"author":{"gitId":"StevenGX12"},"content":" * Returns module.","lastModifiedDate":"2023-10-21"},{"lineNumber":127,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":128,"author":{"gitId":"StevenGX12"},"content":" public String getModule(){","lastModifiedDate":"2023-10-21"},{"lineNumber":129,"author":{"gitId":"StevenGX12"},"content":" return module;","lastModifiedDate":"2023-10-21"},{"lineNumber":130,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":131,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":132,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":133,"author":{"gitId":"StevenGX12"},"content":" * Returns question details in a string.","lastModifiedDate":"2023-10-21"},{"lineNumber":134,"author":{"gitId":"StevenGX12"},"content":" * @param newDescription New description of the question.","lastModifiedDate":"2023-10-21"},{"lineNumber":135,"author":{"gitId":"StevenGX12"},"content":" * @param newAnswer New answer of the question.","lastModifiedDate":"2023-10-21"},{"lineNumber":136,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":137,"author":{"gitId":"spinoandraptos"},"content":" public void editQuestion(String newDescription, String newAnswer){","lastModifiedDate":"2023-10-08"},{"lineNumber":138,"author":{"gitId":"lisizhuang-0121"},"content":" if(null !\u003d newDescription){","lastModifiedDate":"2023-10-18"},{"lineNumber":139,"author":{"gitId":"spinoandraptos"},"content":" this.description \u003d newDescription;","lastModifiedDate":"2023-10-08"},{"lineNumber":140,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":141,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":142,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":143,"author":{"gitId":"spinoandraptos"},"content":" * Returns question details in a string.","lastModifiedDate":"2023-10-22"},{"lineNumber":144,"author":{"gitId":"spinoandraptos"},"content":" * @param qnDifficulty New difficulty level of the question.","lastModifiedDate":"2023-10-22"},{"lineNumber":145,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":146,"author":{"gitId":"spinoandraptos"},"content":" public void markDifficulty (QnDifficulty qnDifficulty) {","lastModifiedDate":"2023-10-22"},{"lineNumber":147,"author":{"gitId":"spinoandraptos"},"content":" this.qnDifficulty \u003d qnDifficulty;","lastModifiedDate":"2023-10-22"},{"lineNumber":148,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":149,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":150,"author":{"gitId":"spinoandraptos"},"content":" * Returns question difficulty.","lastModifiedDate":"2023-10-22"},{"lineNumber":151,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":152,"author":{"gitId":"spinoandraptos"},"content":" public QnDifficulty getDifficulty(){","lastModifiedDate":"2023-10-22"},{"lineNumber":153,"author":{"gitId":"spinoandraptos"},"content":" return qnDifficulty;","lastModifiedDate":"2023-10-22"},{"lineNumber":154,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":155,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":111,"StevenGX12":32,"James-Hong-Jey":8,"lisizhuang-0121":4}},{"path":"src/main/java/quizhub/question/ShortAnsQn.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.question;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":" * Represents Short Answer Questions. This means answers are a simple string.","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"public class ShortAnsQn extends Question {","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"James-Hong-Jey"},"content":" private String answer;","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new question of type SHORTANSWER with specified module.","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" * @param description Question description.","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" * @param answer Question answer.","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" * @param module Question module.","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":14,"author":{"gitId":"StevenGX12"},"content":" public ShortAnsQn(String description, String answer, String module){","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" super(description, QnType.SHORTANSWER, module);","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"James-Hong-Jey"},"content":" this.answer \u003d answer;","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new question of type SHORTANSWER with specified module.","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" * @param description Question description.","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" * @param answer Question answer.","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" * @param module Question module.","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" * @param qnDifficulty Question difficulty.","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" public ShortAnsQn(String description, String answer, String module, QnDifficulty qnDifficulty){","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" super(description, QnType.SHORTANSWER, module, qnDifficulty);","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" this.answer \u003d answer;","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" * Returns question answer.","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"James-Hong-Jey"},"content":" public String getQuestionAnswer() {","lastModifiedDate":"2023-10-08"},{"lineNumber":34,"author":{"gitId":"James-Hong-Jey"},"content":" return this.answer;","lastModifiedDate":"2023-10-08"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" public void editQuestion(String newDescription, String newAnswer) {","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" super.editQuestion(newDescription, newAnswer);","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"lisizhuang-0121"},"content":" if(null !\u003d newAnswer){","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" this.answer \u003d newAnswer;","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" * Returns question-answer pair, separated by a vertical bar.","lastModifiedDate":"2023-10-08"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-08"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" public String getQuestionDescription() {","lastModifiedDate":"2023-10-08"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" return super.getQuestionDescription().strip() + \" / \" + this.answer.strip() + \" | \" + super.getModule()","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" + \" | \" + super.getDifficulty().toString();","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":43,"StevenGX12":1,"James-Hong-Jey":5,"lisizhuang-0121":3}},{"path":"src/main/java/quizhub/questionlist/QuestionList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"James-Hong-Jey"},"content":"package quizhub.questionlist;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.question.ShortAnsQn;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.exception.QuizHubExceptions;","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"yeo-menghan"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"James-Hong-Jey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"James-Hong-Jey"},"content":"import java.util.Collections;","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"StevenGX12"},"content":"import java.util.InputMismatchException;","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"James-Hong-Jey"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" * Represents the list of questions currently registered in Quizhub.","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"James-Hong-Jey"},"content":" * This list is created on program start and disposed on program termination.","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"James-Hong-Jey"},"content":"public class QuestionList {","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"James-Hong-Jey"},"content":" private ArrayList\u003cQuestion\u003e allQns; //array of inputs","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new empty question list.","lastModifiedDate":"2023-10-21"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" public QuestionList(){","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" allQns \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"James-Hong-Jey"},"content":" * Adds a user-requested question to the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"James-Hong-Jey"},"content":" * Depending on the type of question to add to the list,","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"James-Hong-Jey"},"content":" * the program extracts the relevant information from","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"James-Hong-Jey"},"content":" * the user input and builds a Question object to be added.","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"James-Hong-Jey"},"content":" * @param input The full user input from CLI.","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" * @param qnType The type of question to be added (SHORTANSWER).","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"James-Hong-Jey"},"content":" * @param showMessage If true, program will print response message on CLI after question is added.","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" public void addToQuestionList(String input, Question.QnType qnType, boolean showMessage){","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"James-Hong-Jey"},"content":" switch (qnType) {","lastModifiedDate":"2023-10-08"},{"lineNumber":36,"author":{"gitId":"James-Hong-Jey"},"content":" case SHORTANSWER:","lastModifiedDate":"2023-10-08"},{"lineNumber":37,"author":{"gitId":"James-Hong-Jey"},"content":" try {","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"James-Hong-Jey"},"content":" String[] inputTokens \u003d input.split(\"short\")[1].strip().split(\"/\");","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" assert inputTokens.length \u003d\u003d 4;","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" String description \u003d inputTokens[0].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" String answer \u003d inputTokens[1].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" String module \u003d inputTokens[2].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" String difficulty \u003d inputTokens[3].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" if (description.isEmpty() || answer.isEmpty() || module.isEmpty() || difficulty.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"James-Hong-Jey"},"content":" throw new QuizHubExceptions(\"Incomplete Command\");","lastModifiedDate":"2023-10-08"},{"lineNumber":46,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" Question.QnDifficulty qnDifficulty \u003d Parser.extractQuestionDifficulty(difficulty);","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" if(qnDifficulty \u003d\u003d Question.QnDifficulty.DEFAULT){","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Question created using default normal difficulty\"","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" + System.lineSeparator());","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"StevenGX12"},"content":" allQns.add(new ShortAnsQn(description, answer, module));","lastModifiedDate":"2023-10-21"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" allQns.add(new ShortAnsQn(description, answer, module, qnDifficulty));","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"James-Hong-Jey"},"content":" if (showMessage) {","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" I have added the following question OwO:\");","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" [S] %s\\n\", viewQuestionByIndex(getQuestionListSize()));","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Now you have \" + getQuestionListSize() + \" questions in the list! UWU\");","lastModifiedDate":"2023-10-08"},{"lineNumber":59,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":60,"author":{"gitId":"James-Hong-Jey"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":61,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (ArrayIndexOutOfBoundsException | QuizHubExceptions incompleteCommand) {","lastModifiedDate":"2023-10-08"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not input a proper question!\");","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as short [question]/[answer]/[module]/[difficulty]!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-21"},{"lineNumber":65,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-21"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-21"},{"lineNumber":68,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":69,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":70,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":71,"author":{"gitId":"James-Hong-Jey"},"content":" * Prints the details of a question in CLI.","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":73,"author":{"gitId":"James-Hong-Jey"},"content":" * @param question The question in which details are to be printed.","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"James-Hong-Jey"},"content":" * @param asList If true, prints out the index of the question in the question list","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"James-Hong-Jey"},"content":" * in addition to the details of the question.","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"James-Hong-Jey"},"content":" public void printQuestion(Question question, boolean asList){","lastModifiedDate":"2023-10-08"},{"lineNumber":78,"author":{"gitId":"James-Hong-Jey"},"content":" int qnIndex \u003d allQns.indexOf(question);","lastModifiedDate":"2023-10-08"},{"lineNumber":79,"author":{"gitId":"James-Hong-Jey"},"content":" switch(question.getQuestionType()) {","lastModifiedDate":"2023-10-08"},{"lineNumber":80,"author":{"gitId":"James-Hong-Jey"},"content":" case SHORTANSWER:","lastModifiedDate":"2023-10-08"},{"lineNumber":81,"author":{"gitId":"James-Hong-Jey"},"content":" if (question.questionIsDone()) {","lastModifiedDate":"2023-10-08"},{"lineNumber":82,"author":{"gitId":"James-Hong-Jey"},"content":" if (asList) {","lastModifiedDate":"2023-10-08"},{"lineNumber":83,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" %d: [S][X] %s\\n\", qnIndex + 1, question.getQuestionDescription());","lastModifiedDate":"2023-10-08"},{"lineNumber":84,"author":{"gitId":"James-Hong-Jey"},"content":" } else {","lastModifiedDate":"2023-10-08"},{"lineNumber":85,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" [S][X] %s\\n\", question.getQuestionDescription());","lastModifiedDate":"2023-10-08"},{"lineNumber":86,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":87,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":88,"author":{"gitId":"James-Hong-Jey"},"content":" } else {","lastModifiedDate":"2023-10-08"},{"lineNumber":89,"author":{"gitId":"James-Hong-Jey"},"content":" if (asList) {","lastModifiedDate":"2023-10-08"},{"lineNumber":90,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" %d: [S][] %s\\n\", qnIndex + 1, question.getQuestionDescription());","lastModifiedDate":"2023-10-08"},{"lineNumber":91,"author":{"gitId":"James-Hong-Jey"},"content":" } else {","lastModifiedDate":"2023-10-08"},{"lineNumber":92,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" [S][] %s\\n\", question.getQuestionDescription());","lastModifiedDate":"2023-10-08"},{"lineNumber":93,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":94,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":95,"author":{"gitId":"James-Hong-Jey"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-21"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-21"},{"lineNumber":98,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":99,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":100,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":101,"author":{"gitId":"James-Hong-Jey"},"content":" * Prints all the questions in the current question list as an indexed list.","lastModifiedDate":"2023-10-08"},{"lineNumber":102,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":103,"author":{"gitId":"James-Hong-Jey"},"content":" public void printQuestionList(){","lastModifiedDate":"2023-10-08"},{"lineNumber":104,"author":{"gitId":"James-Hong-Jey"},"content":" if(allQns.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":105,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" No questions found! Time to add some OWO\");","lastModifiedDate":"2023-10-08"},{"lineNumber":106,"author":{"gitId":"lisizhuang-0121"},"content":" return;","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":108,"author":{"gitId":"James-Hong-Jey"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-08"},{"lineNumber":109,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, true);","lastModifiedDate":"2023-10-08"},{"lineNumber":110,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":111,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":112,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":113,"author":{"gitId":"James-Hong-Jey"},"content":" * Mark a question in the current question list as done.","lastModifiedDate":"2023-10-08"},{"lineNumber":114,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":115,"author":{"gitId":"James-Hong-Jey"},"content":" * @param index The list index of the question to be marked as done.","lastModifiedDate":"2023-10-08"},{"lineNumber":116,"author":{"gitId":"James-Hong-Jey"},"content":" * @param showMessage If true, program will print response message on CLI","lastModifiedDate":"2023-10-08"},{"lineNumber":117,"author":{"gitId":"James-Hong-Jey"},"content":" * after question is marked as done.","lastModifiedDate":"2023-10-08"},{"lineNumber":118,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":119,"author":{"gitId":"James-Hong-Jey"},"content":" public void markQuestionAsDone(int index, boolean showMessage){","lastModifiedDate":"2023-10-08"},{"lineNumber":120,"author":{"gitId":"James-Hong-Jey"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":121,"author":{"gitId":"James-Hong-Jey"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-08"},{"lineNumber":122,"author":{"gitId":"spinoandraptos"},"content":" if(!question.questionIsDone()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":123,"author":{"gitId":"spinoandraptos"},"content":" question.markAsDone();","lastModifiedDate":"2023-10-22"},{"lineNumber":124,"author":{"gitId":"spinoandraptos"},"content":" if (showMessage) {","lastModifiedDate":"2023-10-22"},{"lineNumber":125,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Roger that! I have marked the following question as done \u003ew\u003c !\");","lastModifiedDate":"2023-10-08"},{"lineNumber":126,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-08"},{"lineNumber":127,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":128,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":129,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Question originally done! No changes made!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":130,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":131,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-08"},{"lineNumber":132,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-08"},{"lineNumber":133,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":134,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":135,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":136,"author":{"gitId":"James-Hong-Jey"},"content":" * Mark a question in the current question list as not done.","lastModifiedDate":"2023-10-08"},{"lineNumber":137,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":138,"author":{"gitId":"James-Hong-Jey"},"content":" public void markQuestionAsNotDone(int index){","lastModifiedDate":"2023-10-08"},{"lineNumber":139,"author":{"gitId":"James-Hong-Jey"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":140,"author":{"gitId":"James-Hong-Jey"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-08"},{"lineNumber":141,"author":{"gitId":"spinoandraptos"},"content":" if(question.questionIsDone()){","lastModifiedDate":"2023-10-22"},{"lineNumber":142,"author":{"gitId":"spinoandraptos"},"content":" question.markAsNotDone();","lastModifiedDate":"2023-10-22"},{"lineNumber":143,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Roger that! I have unmarked the following question as done \u003ew\u003c !\");","lastModifiedDate":"2023-10-08"},{"lineNumber":144,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-08"},{"lineNumber":145,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":146,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Question originally not done! No changes made!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":147,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":148,"author":{"gitId":"spinoandraptos"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-22"},{"lineNumber":149,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-22"},{"lineNumber":150,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":151,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":152,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":153,"author":{"gitId":"spinoandraptos"},"content":" * Mark the difficulty of a question in the current question list.","lastModifiedDate":"2023-10-22"},{"lineNumber":154,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":155,"author":{"gitId":"spinoandraptos"},"content":" * @param index The list index of the question to be marked.","lastModifiedDate":"2023-10-22"},{"lineNumber":156,"author":{"gitId":"spinoandraptos"},"content":" * @param qnDifficulty Difficulty to be assigned to the question.","lastModifiedDate":"2023-10-22"},{"lineNumber":157,"author":{"gitId":"spinoandraptos"},"content":" * @param showMessage If true, program will print response message on CLI","lastModifiedDate":"2023-10-22"},{"lineNumber":158,"author":{"gitId":"spinoandraptos"},"content":" * after question difficulty is marked.","lastModifiedDate":"2023-10-22"},{"lineNumber":159,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":160,"author":{"gitId":"spinoandraptos"},"content":" public void markQuestionDifficulty(int index, Question.QnDifficulty qnDifficulty, boolean showMessage){","lastModifiedDate":"2023-10-22"},{"lineNumber":161,"author":{"gitId":"spinoandraptos"},"content":" String difficulty \u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":162,"author":{"gitId":"spinoandraptos"},"content":" switch (qnDifficulty){","lastModifiedDate":"2023-10-22"},{"lineNumber":163,"author":{"gitId":"spinoandraptos"},"content":" case EASY:","lastModifiedDate":"2023-10-22"},{"lineNumber":164,"author":{"gitId":"spinoandraptos"},"content":" difficulty \u003d \"easy\";","lastModifiedDate":"2023-10-22"},{"lineNumber":165,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":166,"author":{"gitId":"spinoandraptos"},"content":" case HARD:","lastModifiedDate":"2023-10-22"},{"lineNumber":167,"author":{"gitId":"spinoandraptos"},"content":" difficulty \u003d \"hard\";","lastModifiedDate":"2023-10-22"},{"lineNumber":168,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":169,"author":{"gitId":"spinoandraptos"},"content":" case NORMAL:","lastModifiedDate":"2023-10-22"},{"lineNumber":170,"author":{"gitId":"spinoandraptos"},"content":" difficulty \u003d \"normal\";","lastModifiedDate":"2023-10-22"},{"lineNumber":171,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":172,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-22"},{"lineNumber":173,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":174,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":175,"author":{"gitId":"spinoandraptos"},"content":" try{","lastModifiedDate":"2023-10-22"},{"lineNumber":176,"author":{"gitId":"spinoandraptos"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-22"},{"lineNumber":177,"author":{"gitId":"spinoandraptos"},"content":" if(question.getDifficulty() !\u003d qnDifficulty){","lastModifiedDate":"2023-10-22"},{"lineNumber":178,"author":{"gitId":"spinoandraptos"},"content":" allQns.get(index-1).markDifficulty(qnDifficulty);","lastModifiedDate":"2023-10-22"},{"lineNumber":179,"author":{"gitId":"spinoandraptos"},"content":" if(showMessage) {","lastModifiedDate":"2023-10-22"},{"lineNumber":180,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Roger that! I have marked the following question as \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":181,"author":{"gitId":"spinoandraptos"},"content":" difficulty +","lastModifiedDate":"2023-10-22"},{"lineNumber":182,"author":{"gitId":"spinoandraptos"},"content":" \" \u003ew\u003c !\");","lastModifiedDate":"2023-10-22"},{"lineNumber":183,"author":{"gitId":"spinoandraptos"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-22"},{"lineNumber":184,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":185,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":186,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Question is already set as \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":187,"author":{"gitId":"spinoandraptos"},"content":" difficulty +","lastModifiedDate":"2023-10-22"},{"lineNumber":188,"author":{"gitId":"spinoandraptos"},"content":" \" ! No changes made!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":189,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":190,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-08"},{"lineNumber":191,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-08"},{"lineNumber":192,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":193,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":194,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":195,"author":{"gitId":"James-Hong-Jey"},"content":" * Delete a question from the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":196,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":197,"author":{"gitId":"James-Hong-Jey"},"content":" * @param index The list index of the question to be deleted.","lastModifiedDate":"2023-10-08"},{"lineNumber":198,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":199,"author":{"gitId":"James-Hong-Jey"},"content":" public void deleteQuestionByIndex(int index){","lastModifiedDate":"2023-10-08"},{"lineNumber":200,"author":{"gitId":"James-Hong-Jey"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":201,"author":{"gitId":"James-Hong-Jey"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-08"},{"lineNumber":202,"author":{"gitId":"James-Hong-Jey"},"content":" allQns.remove(index - 1);","lastModifiedDate":"2023-10-08"},{"lineNumber":203,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Roger that! I have deleted the following question \u003ew\u003c !\");","lastModifiedDate":"2023-10-08"},{"lineNumber":204,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-08"},{"lineNumber":205,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Now you have \" + getQuestionListSize() + \" questions in the list! UWU\");","lastModifiedDate":"2023-10-08"},{"lineNumber":206,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-08"},{"lineNumber":207,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-08"},{"lineNumber":208,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":209,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":210,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":211,"author":{"gitId":"James-Hong-Jey"},"content":" * Returns the description and all other details of a question in one String object.","lastModifiedDate":"2023-10-08"},{"lineNumber":212,"author":{"gitId":"James-Hong-Jey"},"content":" * Used to display question details in CLI.","lastModifiedDate":"2023-10-08"},{"lineNumber":213,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":214,"author":{"gitId":"James-Hong-Jey"},"content":" * @param index The list index of the question to be viewed.","lastModifiedDate":"2023-10-08"},{"lineNumber":215,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":216,"author":{"gitId":"James-Hong-Jey"},"content":" public String viewQuestionByIndex(int index){","lastModifiedDate":"2023-10-08"},{"lineNumber":217,"author":{"gitId":"James-Hong-Jey"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":218,"author":{"gitId":"James-Hong-Jey"},"content":" switch(allQns.get(index-1).getQuestionType()) {","lastModifiedDate":"2023-10-08"},{"lineNumber":219,"author":{"gitId":"James-Hong-Jey"},"content":" case SHORTANSWER:","lastModifiedDate":"2023-10-08"},{"lineNumber":220,"author":{"gitId":"James-Hong-Jey"},"content":" return allQns.get(index-1).getQuestionDescription();","lastModifiedDate":"2023-10-08"},{"lineNumber":221,"author":{"gitId":"James-Hong-Jey"},"content":" default:","lastModifiedDate":"2023-10-08"},{"lineNumber":222,"author":{"gitId":"James-Hong-Jey"},"content":" return \"Question Not Found\";","lastModifiedDate":"2023-10-08"},{"lineNumber":223,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":224,"author":{"gitId":"StevenGX12"},"content":" } catch(InputMismatchException |NullPointerException | IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-21"},{"lineNumber":225,"author":{"gitId":"James-Hong-Jey"},"content":" return \"Question Not Found\";","lastModifiedDate":"2023-10-08"},{"lineNumber":226,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":227,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":228,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":229,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":230,"author":{"gitId":"spinoandraptos"},"content":" * Delete a question from the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":231,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":232,"author":{"gitId":"spinoandraptos"},"content":" * @param index The list index of the question to be deleted.","lastModifiedDate":"2023-10-08"},{"lineNumber":233,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":234,"author":{"gitId":"spinoandraptos"},"content":" public void editQuestionByIndex(int index, String newDescription, String newAnswer){","lastModifiedDate":"2023-10-08"},{"lineNumber":235,"author":{"gitId":"spinoandraptos"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":236,"author":{"gitId":"spinoandraptos"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-08"},{"lineNumber":237,"author":{"gitId":"spinoandraptos"},"content":" question.editQuestion(newDescription, newAnswer);","lastModifiedDate":"2023-10-08"},{"lineNumber":238,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Roger that! I have edited the following question \u003ew\u003c !\");","lastModifiedDate":"2023-10-08"},{"lineNumber":239,"author":{"gitId":"spinoandraptos"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-08"},{"lineNumber":240,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Now you have \" + getQuestionListSize() + \" questions in the list! UWU\");","lastModifiedDate":"2023-10-08"},{"lineNumber":241,"author":{"gitId":"spinoandraptos"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-08"},{"lineNumber":242,"author":{"gitId":"spinoandraptos"},"content":" if(index !\u003d 0){","lastModifiedDate":"2023-10-08"},{"lineNumber":243,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-08"},{"lineNumber":244,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":245,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":246,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":247,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":248,"author":{"gitId":"James-Hong-Jey"},"content":" * Search for questions in the current question list using their description.","lastModifiedDate":"2023-10-08"},{"lineNumber":249,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":250,"author":{"gitId":"James-Hong-Jey"},"content":" * @param keyword Description keyword(s) used to search for matches.","lastModifiedDate":"2023-10-08"},{"lineNumber":251,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":252,"author":{"gitId":"James-Hong-Jey"},"content":" public void searchListByDescription(String keyword){","lastModifiedDate":"2023-10-08"},{"lineNumber":253,"author":{"gitId":"James-Hong-Jey"},"content":" ArrayList\u003cQuestion\u003e matchedQuestions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-08"},{"lineNumber":254,"author":{"gitId":"James-Hong-Jey"},"content":" if(allQns.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":255,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Question list is empty! Time to add some OWO\");","lastModifiedDate":"2023-10-08"},{"lineNumber":256,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":257,"author":{"gitId":"James-Hong-Jey"},"content":" else {","lastModifiedDate":"2023-10-08"},{"lineNumber":258,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Here are questions that matched your search:\");","lastModifiedDate":"2023-10-08"},{"lineNumber":259,"author":{"gitId":"James-Hong-Jey"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-08"},{"lineNumber":260,"author":{"gitId":"StevenGX12"},"content":" if(question.getQuestionDescription().toLowerCase().contains(keyword.toLowerCase())){","lastModifiedDate":"2023-10-21"},{"lineNumber":261,"author":{"gitId":"James-Hong-Jey"},"content":" matchedQuestions.add(question);","lastModifiedDate":"2023-10-08"},{"lineNumber":262,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, true);","lastModifiedDate":"2023-10-08"},{"lineNumber":263,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":264,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":265,"author":{"gitId":"James-Hong-Jey"},"content":" if(matchedQuestions.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":266,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" No results found :\u003c Check your keyword is correct?\");","lastModifiedDate":"2023-10-08"},{"lineNumber":267,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":268,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":269,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":270,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":271,"author":{"gitId":"James-Hong-Jey"},"content":" * Search for questions in the current question list using their date and time.","lastModifiedDate":"2023-10-08"},{"lineNumber":272,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":273,"author":{"gitId":"James-Hong-Jey"},"content":" * @param dateTime Date and time used to search for matches.","lastModifiedDate":"2023-10-08"},{"lineNumber":274,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":275,"author":{"gitId":"James-Hong-Jey"},"content":" public void searchListByTime(String dateTime){","lastModifiedDate":"2023-10-08"},{"lineNumber":276,"author":{"gitId":"James-Hong-Jey"},"content":" ArrayList\u003cQuestion\u003e matchedQuestions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-08"},{"lineNumber":277,"author":{"gitId":"James-Hong-Jey"},"content":" if(allQns.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":278,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Question list is empty! Time to add some OWO\");","lastModifiedDate":"2023-10-08"},{"lineNumber":279,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":280,"author":{"gitId":"James-Hong-Jey"},"content":" else {","lastModifiedDate":"2023-10-08"},{"lineNumber":281,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Here are questions that matched your search:\");","lastModifiedDate":"2023-10-08"},{"lineNumber":282,"author":{"gitId":"James-Hong-Jey"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-08"},{"lineNumber":283,"author":{"gitId":"James-Hong-Jey"},"content":" if(question.getQuestionTiming(true).contains(dateTime)){","lastModifiedDate":"2023-10-08"},{"lineNumber":284,"author":{"gitId":"James-Hong-Jey"},"content":" matchedQuestions.add(question);","lastModifiedDate":"2023-10-08"},{"lineNumber":285,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, true);","lastModifiedDate":"2023-10-08"},{"lineNumber":286,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":287,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":288,"author":{"gitId":"James-Hong-Jey"},"content":" if(matchedQuestions.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":289,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" No results found :\u003c Check your time format is in dd-MM-yyyy HH:mm?\");","lastModifiedDate":"2023-10-08"},{"lineNumber":290,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":291,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":292,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":293,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":294,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":295,"author":{"gitId":"StevenGX12"},"content":" * Search for questions in the current question list using their module.","lastModifiedDate":"2023-10-21"},{"lineNumber":296,"author":{"gitId":"StevenGX12"},"content":" *","lastModifiedDate":"2023-10-21"},{"lineNumber":297,"author":{"gitId":"StevenGX12"},"content":" * @param module Module used to search for matches.","lastModifiedDate":"2023-10-21"},{"lineNumber":298,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":299,"author":{"gitId":"StevenGX12"},"content":" public void searchListByModule(String module){","lastModifiedDate":"2023-10-21"},{"lineNumber":300,"author":{"gitId":"StevenGX12"},"content":" ArrayList\u003cQuestion\u003e matchedQuestions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-21"},{"lineNumber":301,"author":{"gitId":"StevenGX12"},"content":" if(allQns.isEmpty()){","lastModifiedDate":"2023-10-21"},{"lineNumber":302,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Question list is empty! Time to add some OWO\");","lastModifiedDate":"2023-10-21"},{"lineNumber":303,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":304,"author":{"gitId":"StevenGX12"},"content":" else {","lastModifiedDate":"2023-10-21"},{"lineNumber":305,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Here are questions that matched your search:\");","lastModifiedDate":"2023-10-21"},{"lineNumber":306,"author":{"gitId":"StevenGX12"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-21"},{"lineNumber":307,"author":{"gitId":"StevenGX12"},"content":" if(question.getModule().toLowerCase().contains(module.toLowerCase())){","lastModifiedDate":"2023-10-21"},{"lineNumber":308,"author":{"gitId":"StevenGX12"},"content":" matchedQuestions.add(question);","lastModifiedDate":"2023-10-21"},{"lineNumber":309,"author":{"gitId":"StevenGX12"},"content":" printQuestion(question, true);","lastModifiedDate":"2023-10-21"},{"lineNumber":310,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":311,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":312,"author":{"gitId":"StevenGX12"},"content":" if(matchedQuestions.isEmpty()){","lastModifiedDate":"2023-10-21"},{"lineNumber":313,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" No results found :\u003c Check your module is correct?\");","lastModifiedDate":"2023-10-21"},{"lineNumber":314,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":315,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":316,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":317,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":318,"author":{"gitId":"spinoandraptos"},"content":" * Build a new list of questions based on specified module.","lastModifiedDate":"2023-10-22"},{"lineNumber":319,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":320,"author":{"gitId":"spinoandraptos"},"content":" * @param module Module used to search for matches.","lastModifiedDate":"2023-10-22"},{"lineNumber":321,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":322,"author":{"gitId":"spinoandraptos"},"content":" public ArrayList\u003cQuestion\u003e categoriseListByModule(String module){","lastModifiedDate":"2023-10-22"},{"lineNumber":323,"author":{"gitId":"spinoandraptos"},"content":" ArrayList\u003cQuestion\u003e matchedQuestions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-22"},{"lineNumber":324,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":325,"author":{"gitId":"spinoandraptos"},"content":" if (allQns.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":326,"author":{"gitId":"spinoandraptos"},"content":" throw new QuizHubExceptions(\" Question list is empty! Time to add some OWO\");","lastModifiedDate":"2023-10-22"},{"lineNumber":327,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":328,"author":{"gitId":"spinoandraptos"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-22"},{"lineNumber":329,"author":{"gitId":"spinoandraptos"},"content":" if (question.getModule().toLowerCase().matches(module.toLowerCase())) {","lastModifiedDate":"2023-10-22"},{"lineNumber":330,"author":{"gitId":"spinoandraptos"},"content":" matchedQuestions.add(question);","lastModifiedDate":"2023-10-22"},{"lineNumber":331,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":332,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":333,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":334,"author":{"gitId":"spinoandraptos"},"content":" } catch (QuizHubExceptions emptyList){","lastModifiedDate":"2023-10-22"},{"lineNumber":335,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(emptyList.getMessage());","lastModifiedDate":"2023-10-22"},{"lineNumber":336,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":337,"author":{"gitId":"spinoandraptos"},"content":" return matchedQuestions;","lastModifiedDate":"2023-10-22"},{"lineNumber":338,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":339,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":340,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":341,"author":{"gitId":"James-Hong-Jey"},"content":" * Search for a question in the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":342,"author":{"gitId":"James-Hong-Jey"},"content":" * Depending on user command, this method will search by","lastModifiedDate":"2023-10-08"},{"lineNumber":343,"author":{"gitId":"spinoandraptos"},"content":" * either description matches or module matches.","lastModifiedDate":"2023-10-22"},{"lineNumber":344,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":345,"author":{"gitId":"James-Hong-Jey"},"content":" * @param input Full user command input.","lastModifiedDate":"2023-10-08"},{"lineNumber":346,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":347,"author":{"gitId":"James-Hong-Jey"},"content":" public void searchList(String input){","lastModifiedDate":"2023-10-08"},{"lineNumber":348,"author":{"gitId":"spinoandraptos"},"content":" String searchCriteria;","lastModifiedDate":"2023-10-22"},{"lineNumber":349,"author":{"gitId":"spinoandraptos"},"content":" String searchKeyword;","lastModifiedDate":"2023-10-22"},{"lineNumber":350,"author":{"gitId":"James-Hong-Jey"},"content":" try {","lastModifiedDate":"2023-10-08"},{"lineNumber":351,"author":{"gitId":"spinoandraptos"},"content":" searchCriteria \u003d input.split(\"/\")[1].strip().split(\" \")[0].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":352,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-08"},{"lineNumber":353,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate if you are searching by description or module :\u003c\");","lastModifiedDate":"2023-10-22"},{"lineNumber":354,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as find /description [description] \" +","lastModifiedDate":"2023-10-08"},{"lineNumber":355,"author":{"gitId":"James-Hong-Jey"},"content":" \"or find /module [module]!\");","lastModifiedDate":"2023-10-21"},{"lineNumber":356,"author":{"gitId":"James-Hong-Jey"},"content":" return;","lastModifiedDate":"2023-10-08"},{"lineNumber":357,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":358,"author":{"gitId":"James-Hong-Jey"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":359,"author":{"gitId":"spinoandraptos"},"content":" searchKeyword \u003d input.split(\"/\" + searchCriteria)[1].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":360,"author":{"gitId":"James-Hong-Jey"},"content":" searchListByDescription(searchKeyword);","lastModifiedDate":"2023-10-08"},{"lineNumber":361,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-08"},{"lineNumber":362,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate the keywords you are searching by :\u003c\");","lastModifiedDate":"2023-10-08"},{"lineNumber":363,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as find /description [description] \" +","lastModifiedDate":"2023-10-08"},{"lineNumber":364,"author":{"gitId":"spinoandraptos"},"content":" \"or find /module [module]!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":365,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":366,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":367,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":368,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":369,"author":{"gitId":"James-Hong-Jey"},"content":" * Returns the size of current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":370,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":371,"author":{"gitId":"James-Hong-Jey"},"content":" public int getQuestionListSize(){","lastModifiedDate":"2023-10-08"},{"lineNumber":372,"author":{"gitId":"James-Hong-Jey"},"content":" return allQns.size();","lastModifiedDate":"2023-10-08"},{"lineNumber":373,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":374,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":375,"author":{"gitId":"James-Hong-Jey"},"content":" * Returns a list of all questions in the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":376,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":377,"author":{"gitId":"James-Hong-Jey"},"content":" public ArrayList\u003cQuestion\u003e getAllQns(){","lastModifiedDate":"2023-10-08"},{"lineNumber":378,"author":{"gitId":"James-Hong-Jey"},"content":" return allQns;","lastModifiedDate":"2023-10-08"},{"lineNumber":379,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":380,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":381,"author":{"gitId":"James-Hong-Jey"},"content":" * Shuffles the order of questions in the deck","lastModifiedDate":"2023-10-21"},{"lineNumber":382,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":383,"author":{"gitId":"James-Hong-Jey"},"content":" public void shuffleQuestions() {","lastModifiedDate":"2023-10-21"},{"lineNumber":384,"author":{"gitId":"James-Hong-Jey"},"content":" Collections.shuffle(allQns);","lastModifiedDate":"2023-10-21"},{"lineNumber":385,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":386,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":387,"author":{"gitId":"yeo-menghan"},"content":" * Retrieves the answer for a question by its index in the question list.","lastModifiedDate":"2023-10-09"},{"lineNumber":388,"author":{"gitId":"yeo-menghan"},"content":" * @param index The index of the question in the list.","lastModifiedDate":"2023-10-09"},{"lineNumber":389,"author":{"gitId":"yeo-menghan"},"content":" * @return The answer to the question, or null if the index is invalid or the question is of a different type.","lastModifiedDate":"2023-10-09"},{"lineNumber":390,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":391,"author":{"gitId":"spinoandraptos"},"content":" public String getAnswerByIndex(int index, ArrayList\u003cQuestion\u003e questions) {","lastModifiedDate":"2023-10-22"},{"lineNumber":392,"author":{"gitId":"yeo-menghan"},"content":" try {","lastModifiedDate":"2023-10-09"},{"lineNumber":393,"author":{"gitId":"spinoandraptos"},"content":" Question question \u003d questions.get(index - 1);","lastModifiedDate":"2023-10-22"},{"lineNumber":394,"author":{"gitId":"yeo-menghan"},"content":" if (question instanceof ShortAnsQn) {","lastModifiedDate":"2023-10-09"},{"lineNumber":395,"author":{"gitId":"yeo-menghan"},"content":" return ((ShortAnsQn) question).getQuestionAnswer();","lastModifiedDate":"2023-10-09"},{"lineNumber":396,"author":{"gitId":"yeo-menghan"},"content":" } else {","lastModifiedDate":"2023-10-09"},{"lineNumber":397,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" This question is not a Short Answer question.\");","lastModifiedDate":"2023-10-09"},{"lineNumber":398,"author":{"gitId":"yeo-menghan"},"content":" return null;","lastModifiedDate":"2023-10-09"},{"lineNumber":399,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":400,"author":{"gitId":"yeo-menghan"},"content":" } catch (IndexOutOfBoundsException invalidIndex) {","lastModifiedDate":"2023-10-09"},{"lineNumber":401,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Ono! Please enter a valid question number *sobs*\");","lastModifiedDate":"2023-10-09"},{"lineNumber":402,"author":{"gitId":"yeo-menghan"},"content":" return null;","lastModifiedDate":"2023-10-09"},{"lineNumber":403,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":404,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":405,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":406,"author":{"gitId":"yeo-menghan"},"content":" * Retrieves the question by its index in the question list.","lastModifiedDate":"2023-10-16"},{"lineNumber":407,"author":{"gitId":"yeo-menghan"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":408,"author":{"gitId":"yeo-menghan"},"content":" * @param index The index of the question in the list.","lastModifiedDate":"2023-10-16"},{"lineNumber":409,"author":{"gitId":"yeo-menghan"},"content":" * @return The question, or null if the index is invalid or the question is of a different type.","lastModifiedDate":"2023-10-16"},{"lineNumber":410,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":411,"author":{"gitId":"yeo-menghan"},"content":" public String getQuestionTextByIndex(int index) {","lastModifiedDate":"2023-10-16"},{"lineNumber":412,"author":{"gitId":"yeo-menghan"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c allQns.size()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":413,"author":{"gitId":"yeo-menghan"},"content":" Question question \u003d allQns.get(index);","lastModifiedDate":"2023-10-16"},{"lineNumber":414,"author":{"gitId":"yeo-menghan"},"content":" return question.toString(); // Use the toString() method to get the text of the question","lastModifiedDate":"2023-10-16"},{"lineNumber":415,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":416,"author":{"gitId":"yeo-menghan"},"content":" return null; // Handle invalid index","lastModifiedDate":"2023-10-16"},{"lineNumber":417,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":418,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":419,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":420,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":421,"author":{"gitId":"yeo-menghan"},"content":" * Starts a quiz session using the provided user interface (UI).","lastModifiedDate":"2023-10-09"},{"lineNumber":422,"author":{"gitId":"yeo-menghan"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":423,"author":{"gitId":"yeo-menghan"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-10-09"},{"lineNumber":424,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":425,"author":{"gitId":"spinoandraptos"},"content":" public void startQuiz(Ui ui, ArrayList\u003cQuestion\u003e questions) {","lastModifiedDate":"2023-10-22"},{"lineNumber":426,"author":{"gitId":"spinoandraptos"},"content":" if (questions.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":427,"author":{"gitId":"yeo-menghan"},"content":" ui.displayMessage(\" No questions found! Add questions before starting the quiz.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":428,"author":{"gitId":"yeo-menghan"},"content":" return;","lastModifiedDate":"2023-10-09"},{"lineNumber":429,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":430,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":431,"author":{"gitId":"yeo-menghan"},"content":" ui.displayMessage(\" Starting the quiz...\");","lastModifiedDate":"2023-10-17"},{"lineNumber":432,"author":{"gitId":"spinoandraptos"},"content":" int totalQuestions \u003d questions.size();","lastModifiedDate":"2023-10-22"},{"lineNumber":433,"author":{"gitId":"yeo-menghan"},"content":" int correctAnswers \u003d 0;","lastModifiedDate":"2023-10-09"},{"lineNumber":434,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":435,"author":{"gitId":"yeo-menghan"},"content":" for (int i \u003d 0; i \u003c totalQuestions; i++) {","lastModifiedDate":"2023-10-09"},{"lineNumber":436,"author":{"gitId":"spinoandraptos"},"content":" Question question \u003d questions.get(i);","lastModifiedDate":"2023-10-22"},{"lineNumber":437,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":438,"author":{"gitId":"yeo-menghan"},"content":" ui.displayQuestion(question, i + 1, totalQuestions);","lastModifiedDate":"2023-10-09"},{"lineNumber":439,"author":{"gitId":"spinoandraptos"},"content":" String correctAnswer \u003d getAnswerByIndex(i + 1, questions).strip(); // Get correct answer by index","lastModifiedDate":"2023-10-22"},{"lineNumber":440,"author":{"gitId":"lisizhuang-0121"},"content":" String userAnswer \u003d ui.getUserInput().strip();","lastModifiedDate":"2023-10-17"},{"lineNumber":441,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":442,"author":{"gitId":"yeo-menghan"},"content":" if (userAnswer.equalsIgnoreCase(correctAnswer)) {","lastModifiedDate":"2023-10-09"},{"lineNumber":443,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Correct!\");","lastModifiedDate":"2023-10-09"},{"lineNumber":444,"author":{"gitId":"yeo-menghan"},"content":" correctAnswers++;","lastModifiedDate":"2023-10-09"},{"lineNumber":445,"author":{"gitId":"yeo-menghan"},"content":" } else {","lastModifiedDate":"2023-10-09"},{"lineNumber":446,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Wrong!\");","lastModifiedDate":"2023-10-09"},{"lineNumber":447,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":448,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":449,"author":{"gitId":"yeo-menghan"},"content":" int questionsLeft \u003d totalQuestions - (i + 1);","lastModifiedDate":"2023-10-09"},{"lineNumber":450,"author":{"gitId":"yeo-menghan"},"content":" if (questionsLeft \u003e 0) {","lastModifiedDate":"2023-10-09"},{"lineNumber":451,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Questions left: \" + questionsLeft);","lastModifiedDate":"2023-10-09"},{"lineNumber":452,"author":{"gitId":"yeo-menghan"},"content":" } else {","lastModifiedDate":"2023-10-09"},{"lineNumber":453,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Quiz completed!\");","lastModifiedDate":"2023-10-09"},{"lineNumber":454,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":455,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":456,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Your score: \" + correctAnswers + \"/\" + totalQuestions);","lastModifiedDate":"2023-10-09"},{"lineNumber":457,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":458,"author":{"gitId":"James-Hong-Jey"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"spinoandraptos":144,"StevenGX12":29,"James-Hong-Jey":218,"yeo-menghan":64,"lisizhuang-0121":3}},{"path":"src/main/java/quizhub/storage/Storage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.question.ShortAnsQn;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"import java.io.File;","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" * Represents the hard disk storage where","lastModifiedDate":"2023-10-04"},{"lineNumber":14,"author":{"gitId":"James-Hong-Jey"},"content":" * question data is stored, read and updated.","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":"public class Storage {","lastModifiedDate":"2023-10-04"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" private File dataFile;","lastModifiedDate":"2023-10-04"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":19,"author":{"gitId":"James-Hong-Jey"},"content":" * Creates a new storage for storing question data.","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" * @param filePath The file location in hard disk where data is stored and read from.","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-10-04"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" dataFile \u003d new File(filePath);","lastModifiedDate":"2023-10-04"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" * Write in new data to storage.","lastModifiedDate":"2023-10-04"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" * @param filePath The file location in hard disk where data is written to.","lastModifiedDate":"2023-10-04"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" * @param textToAdd Data to be written.","lastModifiedDate":"2023-10-04"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" * @param toAppend If true, new data is added to the back of existing data instead of overwriting them.","lastModifiedDate":"2023-10-04"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" private void writeToFile(String filePath, String textToAdd, boolean toAppend) throws IOException {","lastModifiedDate":"2023-10-04"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath, toAppend);","lastModifiedDate":"2023-10-04"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" fileWriter.write(textToAdd);","lastModifiedDate":"2023-10-04"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" fileWriter.close();","lastModifiedDate":"2023-10-04"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" * Adds a question from storage into question list being built.","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" * @param questions The question list to be built.","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" * @param currentQuestion The current question loaded from storage.","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" * @param questionIndex Index of current question in question list being built","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" * @param questionType Type of current question.","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" * @param questionDescription Description of current question.","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" * @param questionDoneStatus Done status of current question.","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" * @param questionDifficulty Difficulty of current question.","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" * @param questionModule Module of current question.","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" private void addQuestionFromFile(QuestionList questions, String currentQuestion, int questionIndex,","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" String questionType, String questionDescription, String questionDoneStatus,","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" String questionDifficulty, String questionModule) {","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" switch (questionType) {","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" case \"S\":","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" questions.addToQuestionList(\"short \" + questionDescription + \"/\" + questionModule +","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" \"/\" + questionDifficulty, Question.QnType.SHORTANSWER, false);","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" if (questionDoneStatus.equals(\"done\")) {","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" questions.markQuestionAsDone(questionIndex, false);","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(currentQuestion);","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"lisizhuang-0121"},"content":" * Parse raw questions read from the question file and store them in the questionList","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"lisizhuang-0121"},"content":" * Used at start of program to load all questions from the file","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"lisizhuang-0121"},"content":" * @param rawQuestions the arrayList of question strings to be parsed","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"lisizhuang-0121"},"content":" * @param questions the questionList object for string parsed questions","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"lisizhuang-0121"},"content":" private void parseQuestionsFromStrings(ArrayList\u003cString\u003e rawQuestions, QuestionList questions) {","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"lisizhuang-0121"},"content":" int questionIndex \u003d 1;","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"lisizhuang-0121"},"content":" for (int i \u003d 1; i \u003c rawQuestions.size(); i++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"lisizhuang-0121"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"lisizhuang-0121"},"content":" String currentQuestion \u003d rawQuestions.get(i);","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"lisizhuang-0121"},"content":" String[] questionSubStrings \u003d currentQuestion.split(\"\\\\|\");","lastModifiedDate":"2023-10-22"},{"lineNumber":79,"author":{"gitId":"lisizhuang-0121"},"content":" String questionType \u003d questionSubStrings[0].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":80,"author":{"gitId":"lisizhuang-0121"},"content":" String questionDoneStatus \u003d questionSubStrings[1].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"lisizhuang-0121"},"content":" String questionDescription \u003d questionSubStrings[2].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"lisizhuang-0121"},"content":" String questionModule \u003d questionSubStrings[3].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"lisizhuang-0121"},"content":" String questionDifficulty \u003d questionSubStrings[4].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty difficulty \u003d Parser.extractQuestionDifficulty(questionDifficulty);","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"lisizhuang-0121"},"content":" if (difficulty \u003d\u003d Question.QnDifficulty.DEFAULT) {","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"lisizhuang-0121"},"content":" difficulty \u003d Question.QnDifficulty.NORMAL;","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"lisizhuang-0121"},"content":" addQuestionFromFile(questions, currentQuestion, questionIndex, questionType, questionDescription,","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"lisizhuang-0121"},"content":" questionDoneStatus, String.valueOf(difficulty), questionModule);","lastModifiedDate":"2023-10-22"},{"lineNumber":90,"author":{"gitId":"lisizhuang-0121"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"lisizhuang-0121"},"content":" // if parsed unsuccessfully, maintain question order","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"lisizhuang-0121"},"content":" questionIndex -\u003d 1;","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":97,"author":{"gitId":"James-Hong-Jey"},"content":" * Build a new question list from data stored in hard disk.","lastModifiedDate":"2023-10-08"},{"lineNumber":98,"author":{"gitId":"James-Hong-Jey"},"content":" * Used at program start to build the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":100,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions The question list to be built.","lastModifiedDate":"2023-10-08"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":102,"author":{"gitId":"James-Hong-Jey"},"content":" public void buildCurrentListFromFile(QuestionList questions){","lastModifiedDate":"2023-10-08"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-04"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" if (dataFile.createNewFile()) {","lastModifiedDate":"2023-10-04"},{"lineNumber":105,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Question-list created: \" + dataFile.getName());","lastModifiedDate":"2023-10-08"},{"lineNumber":106,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":" } catch(NullPointerException | IOException invalidFilePath){","lastModifiedDate":"2023-10-04"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" \" + invalidFilePath.getMessage());","lastModifiedDate":"2023-10-04"},{"lineNumber":109,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":110,"author":{"gitId":"James-Hong-Jey"},"content":" int questionIndex \u003d 0;","lastModifiedDate":"2023-10-08"},{"lineNumber":111,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-04"},{"lineNumber":112,"author":{"gitId":"spinoandraptos"},"content":" Scanner fileScanner \u003d new Scanner(dataFile);","lastModifiedDate":"2023-10-04"},{"lineNumber":113,"author":{"gitId":"lisizhuang-0121"},"content":" // Pipe all lines into string arrayList for processing","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"lisizhuang-0121"},"content":" ArrayList\u003cString\u003e rawQuestions \u003d new ArrayList\u003cString\u003e();","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"spinoandraptos"},"content":" while (fileScanner.hasNext()) {","lastModifiedDate":"2023-10-04"},{"lineNumber":116,"author":{"gitId":"lisizhuang-0121"},"content":" String rawQuestion \u003d fileScanner.nextLine();","lastModifiedDate":"2023-10-22"},{"lineNumber":117,"author":{"gitId":"lisizhuang-0121"},"content":" rawQuestions.add(rawQuestion);","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"lisizhuang-0121"},"content":" if (rawQuestions.size() \u003c\u003d 1) {","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"lisizhuang-0121"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":121,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":122,"author":{"gitId":"lisizhuang-0121"},"content":" parseQuestionsFromStrings(rawQuestions, questions);","lastModifiedDate":"2023-10-22"},{"lineNumber":123,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":124,"author":{"gitId":"spinoandraptos"},"content":" catch(NullPointerException | IOException invalidFilePath){","lastModifiedDate":"2023-10-04"},{"lineNumber":125,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" \" + invalidFilePath.getMessage());","lastModifiedDate":"2023-10-04"},{"lineNumber":126,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":127,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":128,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":129,"author":{"gitId":"James-Hong-Jey"},"content":" * Build a new question list from data stored in hard disk.","lastModifiedDate":"2023-10-08"},{"lineNumber":130,"author":{"gitId":"James-Hong-Jey"},"content":" * Prints out the questions in the list in CLI.","lastModifiedDate":"2023-10-08"},{"lineNumber":131,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":132,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions The question list that has been built.","lastModifiedDate":"2023-10-08"},{"lineNumber":133,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":134,"author":{"gitId":"James-Hong-Jey"},"content":" public void loadData(QuestionList questions) {","lastModifiedDate":"2023-10-08"},{"lineNumber":135,"author":{"gitId":"James-Hong-Jey"},"content":" buildCurrentListFromFile(questions);","lastModifiedDate":"2023-10-08"},{"lineNumber":136,"author":{"gitId":"lisizhuang-0121"},"content":" if (questions.getQuestionListSize() \u003d\u003d 0) {","lastModifiedDate":"2023-10-22"},{"lineNumber":137,"author":{"gitId":"lisizhuang-0121"},"content":" System.out.println(\" You currently have no saved questions uWu\");","lastModifiedDate":"2023-10-22"},{"lineNumber":138,"author":{"gitId":"lisizhuang-0121"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":139,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":140,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" You currently have the following questions uWu\");","lastModifiedDate":"2023-10-08"},{"lineNumber":141,"author":{"gitId":"James-Hong-Jey"},"content":" questions.printQuestionList();","lastModifiedDate":"2023-10-08"},{"lineNumber":142,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":143,"author":{"gitId":"lisizhuang-0121"},"content":" private void storeQuestionToFile(Question question) throws IOException {","lastModifiedDate":"2023-10-22"},{"lineNumber":144,"author":{"gitId":"lisizhuang-0121"},"content":" String isDoneString \u003d \"undone\";","lastModifiedDate":"2023-10-22"},{"lineNumber":145,"author":{"gitId":"lisizhuang-0121"},"content":" if (question.questionIsDone()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":146,"author":{"gitId":"lisizhuang-0121"},"content":" isDoneString \u003d \"done\";","lastModifiedDate":"2023-10-22"},{"lineNumber":147,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":148,"author":{"gitId":"lisizhuang-0121"},"content":" switch (question.getQuestionType()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":149,"author":{"gitId":"lisizhuang-0121"},"content":" case SHORTANSWER:","lastModifiedDate":"2023-10-22"},{"lineNumber":150,"author":{"gitId":"lisizhuang-0121"},"content":" writeToFile(dataFile.getPath(), \"S | \" + isDoneString + \" | \" + question.getQuestionDescription()","lastModifiedDate":"2023-10-22"},{"lineNumber":151,"author":{"gitId":"lisizhuang-0121"},"content":" + System.lineSeparator(), true);","lastModifiedDate":"2023-10-22"},{"lineNumber":152,"author":{"gitId":"lisizhuang-0121"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":153,"author":{"gitId":"lisizhuang-0121"},"content":" default:","lastModifiedDate":"2023-10-22"},{"lineNumber":154,"author":{"gitId":"lisizhuang-0121"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":155,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":156,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":157,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":158,"author":{"gitId":"spinoandraptos"},"content":" * Overwrites all existing data in storage with","lastModifiedDate":"2023-10-04"},{"lineNumber":159,"author":{"gitId":"James-Hong-Jey"},"content":" * the current questions in the question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":160,"author":{"gitId":"James-Hong-Jey"},"content":" * Used after every question change and on program termination.","lastModifiedDate":"2023-10-08"},{"lineNumber":161,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":162,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions The question list to overwrite current data with.","lastModifiedDate":"2023-10-08"},{"lineNumber":163,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":164,"author":{"gitId":"James-Hong-Jey"},"content":" public void updateData(QuestionList questions){","lastModifiedDate":"2023-10-08"},{"lineNumber":165,"author":{"gitId":"spinoandraptos"},"content":" try{","lastModifiedDate":"2023-10-04"},{"lineNumber":166,"author":{"gitId":"spinoandraptos"},"content":" //flush all current records","lastModifiedDate":"2023-10-04"},{"lineNumber":167,"author":{"gitId":"James-Hong-Jey"},"content":" writeToFile(dataFile.getPath(), \"Latest Questions\" + System.lineSeparator(), false);","lastModifiedDate":"2023-10-08"},{"lineNumber":168,"author":{"gitId":"James-Hong-Jey"},"content":" ArrayList\u003cQuestion\u003e allQuestions \u003d questions.getAllQns();","lastModifiedDate":"2023-10-08"},{"lineNumber":169,"author":{"gitId":"James-Hong-Jey"},"content":" for (Question question : allQuestions) {","lastModifiedDate":"2023-10-08"},{"lineNumber":170,"author":{"gitId":"lisizhuang-0121"},"content":" storeQuestionToFile(question);","lastModifiedDate":"2023-10-22"},{"lineNumber":171,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":172,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":173,"author":{"gitId":"spinoandraptos"},"content":" catch(NullPointerException | IOException invalidFilePath){","lastModifiedDate":"2023-10-04"},{"lineNumber":174,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" \" + invalidFilePath.getMessage());","lastModifiedDate":"2023-10-04"},{"lineNumber":175,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-10-04"},{"lineNumber":176,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":177,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":178,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":96,"James-Hong-Jey":24,"lisizhuang-0121":58}},{"path":"src/main/java/quizhub/ui/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"yeo-menghan"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" * Represents the user interface for CLI displays.","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" * Supports CLI interactions with users.","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":"public class Ui {","lastModifiedDate":"2023-10-04"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" private final Scanner input \u003d new Scanner(System.in); // Create a Scanner object","lastModifiedDate":"2023-10-04"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" private Storage dataStorage;","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"James-Hong-Jey"},"content":" private QuestionList tasks;","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" * Sets up the bridging between the UI and tasks data.","lastModifiedDate":"2023-10-21"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-21"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" * @param tasks A record of all tasks documented that is built on program start and disposed on program exit.","lastModifiedDate":"2023-10-21"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage The hard disk record of all tasks documented that persists even on program exit.","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" public Ui(Storage dataStorage, QuestionList tasks){","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" this.dataStorage \u003d dataStorage;","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" * Print out separating line in CLI to mark","lastModifiedDate":"2023-10-04"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" * start and end of chatbot replies.","lastModifiedDate":"2023-10-04"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" public void showLine(){","lastModifiedDate":"2023-10-04"},{"lineNumber":31,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" ____________________________________________________________\\n\");","lastModifiedDate":"2023-10-09"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":34,"author":{"gitId":"StevenGX12"},"content":" * Displays app logo and opening message to welcome users","lastModifiedDate":"2023-10-09"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" * on the launch of chatbot.","lastModifiedDate":"2023-10-04"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" public void displayOpeningMessage(){","lastModifiedDate":"2023-10-04"},{"lineNumber":38,"author":{"gitId":"StevenGX12"},"content":" String logo \u003d \" _______ _________ _______ ______ \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":39,"author":{"gitId":"StevenGX12"},"content":" \" ( ___ )|\\\\ /|\\\\__ __// ___ )|\\\\ /||\\\\ /|( ___ \\\\ \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":40,"author":{"gitId":"StevenGX12"},"content":" \" | ( ) || ) ( | ) ( \\\\/ ) || ) ( || ) ( || ( ) )\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":41,"author":{"gitId":"StevenGX12"},"content":" \" | | | || | | | | | / )| (___) || | | || (__/ / \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":42,"author":{"gitId":"StevenGX12"},"content":" \" | | | || | | | | | / / | ___ || | | || __ ( \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":43,"author":{"gitId":"StevenGX12"},"content":" \" | | /\\\\| || | | | | | / / | ( ) || | | || ( \\\\ \\\\ \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":44,"author":{"gitId":"StevenGX12"},"content":" \" | (_\\\\ \\\\ || (___) |___) (___ / (_/\\\\| ) ( || (___) || )___) )\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"StevenGX12"},"content":" \" (____\\\\/_)(_______)\\\\_______/(_______/|/ \\\\|(_______)|/ \\\\___/\";","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"StevenGX12"},"content":" System.out.println(logo);","lastModifiedDate":"2023-10-09"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" showLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":48,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Welcome to Quizhub!!!\\n\");","lastModifiedDate":"2023-10-09"},{"lineNumber":49,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Let the quizzing begin XDD\");","lastModifiedDate":"2023-10-09"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" System.out.println();","lastModifiedDate":"2023-10-04"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" dataStorage.loadData(tasks);","lastModifiedDate":"2023-10-04"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" showLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" * Retrieves the CLI input from the user","lastModifiedDate":"2023-10-04"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" * and documents it as a String object.","lastModifiedDate":"2023-10-04"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" public String getUserInput() {","lastModifiedDate":"2023-10-21"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" if(input.hasNextLine()){","lastModifiedDate":"2023-10-21"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" return input.nextLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-21"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" return \"\";","lastModifiedDate":"2023-10-21"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" * Displays closing message on exiting the chatbot.","lastModifiedDate":"2023-10-04"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" public void displayClosingMessage(){","lastModifiedDate":"2023-10-04"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" dataStorage.updateData(tasks);","lastModifiedDate":"2023-10-04"},{"lineNumber":71,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Are you sure you want to stop quizzing?\");","lastModifiedDate":"2023-10-09"},{"lineNumber":72,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Well... hope you had fun quizzing :D\");","lastModifiedDate":"2023-10-09"},{"lineNumber":73,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" See you again soon!\");","lastModifiedDate":"2023-10-09"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" showLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":75,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":76,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":77,"author":{"gitId":"yeo-menghan"},"content":" * Displays a question along with its index in a set of questions and the total count of questions.","lastModifiedDate":"2023-10-09"},{"lineNumber":78,"author":{"gitId":"yeo-menghan"},"content":" * Extracts and displays the question part from the question description, which is in the \"question/answer\" format.","lastModifiedDate":"2023-10-09"},{"lineNumber":79,"author":{"gitId":"yeo-menghan"},"content":" * If the format is invalid or missing, it prompts the user to edit the question via the edit function.","lastModifiedDate":"2023-10-09"},{"lineNumber":80,"author":{"gitId":"yeo-menghan"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":81,"author":{"gitId":"yeo-menghan"},"content":" * @param question The Question object containing the question description.","lastModifiedDate":"2023-10-09"},{"lineNumber":82,"author":{"gitId":"yeo-menghan"},"content":" * @param currentQuestionIndex The index of the current question in the set of questions.","lastModifiedDate":"2023-10-09"},{"lineNumber":83,"author":{"gitId":"yeo-menghan"},"content":" * @param totalQuestions The total count of questions in the set.","lastModifiedDate":"2023-10-09"},{"lineNumber":84,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":85,"author":{"gitId":"yeo-menghan"},"content":" public void displayQuestion(Question question, int currentQuestionIndex, int totalQuestions) {","lastModifiedDate":"2023-10-09"},{"lineNumber":86,"author":{"gitId":"yeo-menghan"},"content":" showLine();","lastModifiedDate":"2023-10-09"},{"lineNumber":87,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Question \" + currentQuestionIndex + \" / \" + totalQuestions + \":\");","lastModifiedDate":"2023-10-09"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" // getQuestionDescription returns question/answer","lastModifiedDate":"2023-10-21"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":" String questionDescription \u003d question.getQuestionDescription();","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"yeo-menghan"},"content":" String[] parts \u003d questionDescription.split(\"/\");","lastModifiedDate":"2023-10-09"},{"lineNumber":91,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":92,"author":{"gitId":"yeo-menghan"},"content":" if (parts.length \u003e\u003d 1) {","lastModifiedDate":"2023-10-09"},{"lineNumber":93,"author":{"gitId":"yeo-menghan"},"content":" // Extract and display the question part","lastModifiedDate":"2023-10-09"},{"lineNumber":94,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" \" + parts[0]); // part[0] returns the question part","lastModifiedDate":"2023-10-09"},{"lineNumber":95,"author":{"gitId":"yeo-menghan"},"content":" } else {","lastModifiedDate":"2023-10-09"},{"lineNumber":96,"author":{"gitId":"yeo-menghan"},"content":" // Handle the case where the format is invalid","lastModifiedDate":"2023-10-09"},{"lineNumber":97,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Invalid question format, please edit this question via the edit function\");","lastModifiedDate":"2023-10-09"},{"lineNumber":98,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":99,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":100,"author":{"gitId":"yeo-menghan"},"content":" System.out.print(\" Your Answer: \");","lastModifiedDate":"2023-10-09"},{"lineNumber":101,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":102,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":103,"author":{"gitId":"lisizhuang-0121"},"content":" public void showInvalidCommandHelp( String feedback ) {","lastModifiedDate":"2023-10-12"},{"lineNumber":104,"author":{"gitId":"lisizhuang-0121"},"content":" System.out.println(\" Please enter a valid command :0\");","lastModifiedDate":"2023-10-12"},{"lineNumber":105,"author":{"gitId":"lisizhuang-0121"},"content":" System.out.println(feedback);","lastModifiedDate":"2023-10-12"},{"lineNumber":106,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":107,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"yeo-menghan"},"content":" public void displayMessage(String message) {","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(message);","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"},{"lineNumber":112,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":58,"StevenGX12":16,"James-Hong-Jey":2,"yeo-menghan":30,"lisizhuang-0121":6}},{"path":"src/test/java/quizhub/command/CommandDeleteTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"StevenGX12"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"StevenGX12"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"StevenGX12"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"StevenGX12"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"StevenGX12"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"StevenGX12"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"StevenGX12"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"StevenGX12"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"StevenGX12"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"StevenGX12"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"StevenGX12"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-21"},{"lineNumber":19,"author":{"gitId":"StevenGX12"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-21"},{"lineNumber":20,"author":{"gitId":"StevenGX12"},"content":"import java.util.List;","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"StevenGX12"},"content":"public class CommandDeleteTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"StevenGX12"},"content":" private QuestionList questionList;","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"StevenGX12"},"content":" private Parser parser;","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"StevenGX12"},"content":" private Ui ui;","lastModifiedDate":"2023-10-21"},{"lineNumber":26,"author":{"gitId":"StevenGX12"},"content":" private MockStorage mockStorage;","lastModifiedDate":"2023-10-21"},{"lineNumber":27,"author":{"gitId":"StevenGX12"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"StevenGX12"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"StevenGX12"},"content":" * Create a new question list and populate with dummy SHORTANSWER questions","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"StevenGX12"},"content":" @BeforeEach","lastModifiedDate":"2023-10-21"},{"lineNumber":34,"author":{"gitId":"StevenGX12"},"content":" public void setQuestionList(@TempDir Path tempDir) throws IOException {","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"StevenGX12"},"content":" Path tempFile \u003d tempDir.resolve(\"testStorage.txt\");","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"StevenGX12"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"StevenGX12"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-10-21"},{"lineNumber":38,"author":{"gitId":"StevenGX12"},"content":" mockStorage \u003d new MockStorage(tempFile.toString());","lastModifiedDate":"2023-10-21"},{"lineNumber":39,"author":{"gitId":"StevenGX12"},"content":" ui \u003d new Ui(mockStorage, questionList);","lastModifiedDate":"2023-10-21"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" String[] questionsToAdd \u003d { \"short Question1 / Answer1 / Mod1 / NORMAL\", \"short Question2 / Answer2 / Mod2 / NORMAL\",","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" \"short Question3 / Answer3 / Mod3 / NORMAL\", \"short Question4 / Answer4 / Mod4/ NORMAL\" };","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-21"},{"lineNumber":43,"author":{"gitId":"StevenGX12"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"StevenGX12"},"content":" for (String question : questionsToAdd) {","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"StevenGX12"},"content":" questionList.addToQuestionList(question, qnType, showMessage);","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"StevenGX12"},"content":" questionList.markQuestionAsDone(1, showMessage);","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"StevenGX12"},"content":" questionList.markQuestionAsDone(3, showMessage);","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"StevenGX12"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"StevenGX12"},"content":" @AfterEach","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"StevenGX12"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"StevenGX12"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"StevenGX12"},"content":" * Compares system standard output with expected output","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"StevenGX12"},"content":" * Assertion error is thrown if the two are not the same","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":61,"author":{"gitId":"StevenGX12"},"content":" private void testCliOutputCorrectness(String expectedOutput) {","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"StevenGX12"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"StevenGX12"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"StevenGX12"},"content":" * Test deleting with out-of-bound index","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":69,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"StevenGX12"},"content":" void testDeleteOutOfBoundIndex() {","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"StevenGX12"},"content":" String expectedOutput \u003d \"Ono! Please enter valid question number *sobs*\";","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"StevenGX12"},"content":" questionList.deleteQuestionByIndex(-1);","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":77,"author":{"gitId":"StevenGX12"},"content":" * Test deleting with invalid type index","lastModifiedDate":"2023-10-21"},{"lineNumber":78,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":79,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-21"},{"lineNumber":80,"author":{"gitId":"StevenGX12"},"content":" void testDeleteInvalidTypeIndex() {","lastModifiedDate":"2023-10-21"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Please enter valid integer index!\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":" \" Please format your input as delete [question number]\";","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"StevenGX12"},"content":" parser.parseCommand(\"delete test\").executeCommand(ui, mockStorage, questionList);;","lastModifiedDate":"2023-10-21"},{"lineNumber":84,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-21"},{"lineNumber":85,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":86,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":87,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":88,"author":{"gitId":"StevenGX12"},"content":" * Test deleting with missing index","lastModifiedDate":"2023-10-21"},{"lineNumber":89,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-21"},{"lineNumber":91,"author":{"gitId":"StevenGX12"},"content":" void testDeleteMissingIndex() {","lastModifiedDate":"2023-10-21"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Ono! You did not indicate question index :\u003c\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":" \" Please format your input as delete [question number]!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"StevenGX12"},"content":" parser.parseCommand(\"delete\").executeCommand(ui, mockStorage, questionList);;","lastModifiedDate":"2023-10-21"},{"lineNumber":95,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-21"},{"lineNumber":96,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":97,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":98,"author":{"gitId":"StevenGX12"},"content":" // /**","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"StevenGX12"},"content":" // * Test deleting with valid index","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"StevenGX12"},"content":" // * */","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-21"},{"lineNumber":102,"author":{"gitId":"StevenGX12"},"content":" void testDeleteValidIndex() {","lastModifiedDate":"2023-10-21"},{"lineNumber":103,"author":{"gitId":"StevenGX12"},"content":" String expectedOutput \u003d \"Roger that! I have deleted the following question \u003ew\u003c !\\r\\n\" +","lastModifiedDate":"2023-10-21"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" \" [S][X] Question1 / Answer1 | Mod1 | NORMAL\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":105,"author":{"gitId":"StevenGX12"},"content":" \" Now you have 3 questions in the list! UWU\";","lastModifiedDate":"2023-10-21"},{"lineNumber":106,"author":{"gitId":"StevenGX12"},"content":" questionList.deleteQuestionByIndex(1);","lastModifiedDate":"2023-10-21"},{"lineNumber":107,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-21"},{"lineNumber":108,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":109,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":110,"author":{"gitId":"StevenGX12"},"content":" public class MockStorage extends Storage {","lastModifiedDate":"2023-10-21"},{"lineNumber":111,"author":{"gitId":"StevenGX12"},"content":" private List\u003cString\u003e questions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-21"},{"lineNumber":112,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":113,"author":{"gitId":"StevenGX12"},"content":" public MockStorage(String filepath) {","lastModifiedDate":"2023-10-21"},{"lineNumber":114,"author":{"gitId":"StevenGX12"},"content":" super(filepath);","lastModifiedDate":"2023-10-21"},{"lineNumber":115,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":116,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":117,"author":{"gitId":"StevenGX12"},"content":" public void saveData(String dataToAdd) {","lastModifiedDate":"2023-10-21"},{"lineNumber":118,"author":{"gitId":"StevenGX12"},"content":" questions.add(dataToAdd);","lastModifiedDate":"2023-10-21"},{"lineNumber":119,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":120,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":121,"author":{"gitId":"StevenGX12"},"content":" public String loadData() {","lastModifiedDate":"2023-10-21"},{"lineNumber":122,"author":{"gitId":"StevenGX12"},"content":" // In-memory storage, retrieve data from the list","lastModifiedDate":"2023-10-21"},{"lineNumber":123,"author":{"gitId":"StevenGX12"},"content":" if (questions.isEmpty()) {","lastModifiedDate":"2023-10-21"},{"lineNumber":124,"author":{"gitId":"StevenGX12"},"content":" return \"\";","lastModifiedDate":"2023-10-21"},{"lineNumber":125,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":126,"author":{"gitId":"StevenGX12"},"content":" // Concatenate the data with line breaks","lastModifiedDate":"2023-10-21"},{"lineNumber":127,"author":{"gitId":"StevenGX12"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-10-21"},{"lineNumber":128,"author":{"gitId":"StevenGX12"},"content":" for (String line : questions) {","lastModifiedDate":"2023-10-21"},{"lineNumber":129,"author":{"gitId":"StevenGX12"},"content":" result.append(line).append(System.lineSeparator());","lastModifiedDate":"2023-10-21"},{"lineNumber":130,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":131,"author":{"gitId":"StevenGX12"},"content":" return result.toString().trim();","lastModifiedDate":"2023-10-21"},{"lineNumber":132,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":133,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":134,"author":{"gitId":"StevenGX12"},"content":" public boolean dataExists() {","lastModifiedDate":"2023-10-21"},{"lineNumber":135,"author":{"gitId":"StevenGX12"},"content":" return !questions.isEmpty();","lastModifiedDate":"2023-10-21"},{"lineNumber":136,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":137,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":138,"author":{"gitId":"StevenGX12"},"content":" public void clearData() {","lastModifiedDate":"2023-10-21"},{"lineNumber":139,"author":{"gitId":"StevenGX12"},"content":" questions.clear();","lastModifiedDate":"2023-10-21"},{"lineNumber":140,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":141,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":142,"author":{"gitId":"StevenGX12"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"spinoandraptos":12,"StevenGX12":130}},{"path":"src/test/java/quizhub/command/CommandEditTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"spinoandraptos"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.BeforeAll;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":"public class CommandEditTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" private static QuestionList questionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" * Create a new question list and populate with dummy SHORTANSWER questions","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" @BeforeAll","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" public static void setQuestionList(){","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" String[] questionsToAdd \u003d { \"short Question1 / Answer1 / Mod1 / NORMAL\", \"short Question2 / Answer2 / Mod2 / NORMAL\",","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" \"short Question3 / Answer3 / Mod3 / NORMAL\", \"short Question4 / Answer4 / Mod4 / NORMAL\" };","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-21"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" for (String question:questionsToAdd) {","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" questionList.addToQuestionList(question, qnType, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(1, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(3, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" public void setUpOutput() {","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" @AfterEach","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" * Compares system standard output with expected output","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" * Assertion error is thrown if the two are not the same","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" private void testCliOutputCorrectness(String expectedOutput){","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with out-of-bound index","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" void testEditOutOfBoundIndex(){","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Ono! Please enter valid question number *sobs*\";","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" questionList.editQuestionByIndex(-1, \"\", \"\");","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with non-integer index","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" void testEditNonIntIndex(){","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Ono! Please enter valid question number *sobs*\";","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":" questionList.editQuestionByIndex(\u0027a\u0027, \"\", \"\");","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with blank description and answer","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"spinoandraptos"},"content":" void testEditBlankDescAns(){","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Roger that! I have edited the following question \u003ew\u003c !\\r\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":" \" [S][X] / | Mod1 | NORMAL\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":" \" Now you have 4 questions in the list! UWU\";","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":" questionList.editQuestionByIndex(1, \"\", \"\");","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with filled answer and blank description","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" void testEditOnlyBlankDesc(){","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Roger that! I have edited the following question \u003ew\u003c !\\r\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":" \" [S][] / NewAnswer | Mod2 | NORMAL\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":" \" Now you have 4 questions in the list! UWU\";","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":" questionList.editQuestionByIndex(2, \"\", \"NewAnswer\");","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with filled description and blank answer","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" void testEditOnlyBlankAns(){","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Roger that! I have edited the following question \u003ew\u003c !\\r\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" \" [S][X] NewDescription / | Mod3 | NORMAL\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" \" Now you have 4 questions in the list! UWU\";","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"spinoandraptos"},"content":" questionList.editQuestionByIndex(3, \"NewDescription\", \"\");","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with filled description and answer","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"spinoandraptos"},"content":" void testEditNonBlankDescAns(){","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Roger that! I have edited the following question \u003ew\u003c !\\r\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"spinoandraptos"},"content":" \" [S][] NewDescription / NewAnswer | Mod4 | NORMAL\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":117,"author":{"gitId":"spinoandraptos"},"content":" \" Now you have 4 questions in the list! UWU\";","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"spinoandraptos"},"content":" questionList.editQuestionByIndex(4, \"NewDescription\", \"NewAnswer\");","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":122,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"spinoandraptos":122}},{"path":"src/test/java/quizhub/command/CommandFindTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"StevenGX12"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.BeforeAll;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"StevenGX12"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"StevenGX12"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"StevenGX12"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"StevenGX12"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"StevenGX12"},"content":"public class CommandFindTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"StevenGX12"},"content":" private static QuestionList questionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"StevenGX12"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"StevenGX12"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"StevenGX12"},"content":" * Create a new question list and populate with dummy SHORTANSWER questions","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"StevenGX12"},"content":" @BeforeAll","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"StevenGX12"},"content":" public static void setQuestionList() {","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"StevenGX12"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" String[] questionsToAdd \u003d { \"short Question1 / Answer1 / Mod1 / NORMAL\",","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" \"short Question2 / Answer2 / Mod2 / NORMAL\", \"short Question3 / Answer3 / Mod3 / NORMAL\",","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" \"short Question4 / Answer4 / Mod4 / NORMAL\" };","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"StevenGX12"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"StevenGX12"},"content":" for (String question : questionsToAdd) {","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"StevenGX12"},"content":" questionList.addToQuestionList(question, qnType, showMessage);","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"StevenGX12"},"content":" questionList.markQuestionAsDone(1, showMessage);","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"StevenGX12"},"content":" questionList.markQuestionAsDone(3, showMessage);","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"StevenGX12"},"content":" @BeforeEach","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"StevenGX12"},"content":" public void setUpOutput() {","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"StevenGX12"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"StevenGX12"},"content":" @AfterEach","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"StevenGX12"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"StevenGX12"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"StevenGX12"},"content":" * Compares system standard output with expected output","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"StevenGX12"},"content":" * Assertion error is thrown if the two are not the same","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"StevenGX12"},"content":" private void testCliOutputCorrectness(String expectedOutput) {","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"StevenGX12"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"StevenGX12"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"StevenGX12"},"content":" * Test finding with no criteria","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"StevenGX12"},"content":" void testFindNoCriteria() {","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Ono! You did not indicate if you are searching by description or module :\u003c\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" \"\\r\\n Please format your input as find /description [description] or find /module [module]!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"StevenGX12"},"content":" questionList.searchList(\"find\");","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"StevenGX12"},"content":" * Test finding by description with no keyword","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"StevenGX12"},"content":" void testFindDescriptionNoKeyword() {","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"StevenGX12"},"content":" String expectedOutput \u003d \"Ono! You did not indicate the keywords you are searching by :\u003c\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" \"\\r\\n Please format your input as find /description [description] or find /module [module]!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"StevenGX12"},"content":" questionList.searchList(\"find /description\");","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"StevenGX12"},"content":" * Test finding by description with matches","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-21"},{"lineNumber":83,"author":{"gitId":"StevenGX12"},"content":" void testFindDescriptionWithMatches() {","lastModifiedDate":"2023-10-21"},{"lineNumber":84,"author":{"gitId":"StevenGX12"},"content":" String expectedOutput \u003d \"Here are questions that matched your search:\\r\\n\"","lastModifiedDate":"2023-10-21"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":" + \" 1: [S][X] Question1 / Answer1 | Mod1 | NORMAL\\n\"","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" + \" 2: [S][] Question2 / Answer2 | Mod2 | NORMAL\\n\"","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" + \" 3: [S][X] Question3 / Answer3 | Mod3 | NORMAL\\n\"","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" + \" 4: [S][] Question4 / Answer4 | Mod4 | NORMAL\";","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"StevenGX12"},"content":" questionList.searchList(\"find /description Question\");","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-21"},{"lineNumber":91,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":92,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"StevenGX12"},"content":" * Test finding by description with no matches","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"StevenGX12"},"content":" void testFindDescriptionNoMatches() {","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"StevenGX12"},"content":" String expectedOutput \u003d \"Here are questions that matched your search:\\r\\n\"","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"StevenGX12"},"content":" + \" No results found :\u003c Check your keyword is correct?\";","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"StevenGX12"},"content":" questionList.searchList(\"find /description no matches\");","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":103,"author":{"gitId":"StevenGX12"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"spinoandraptos":16,"StevenGX12":87}},{"path":"src/test/java/quizhub/command/CommandHelpTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"StevenGX12"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"StevenGX12"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"StevenGX12"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"StevenGX12"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"StevenGX12"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"StevenGX12"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"StevenGX12"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"StevenGX12"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"StevenGX12"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"StevenGX12"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"StevenGX12"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"StevenGX12"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"StevenGX12"},"content":"import java.util.List;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"StevenGX12"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"StevenGX12"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"StevenGX12"},"content":"public class CommandHelpTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"StevenGX12"},"content":" private QuestionList questionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"StevenGX12"},"content":" private Ui mockUi;","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"StevenGX12"},"content":" private MockStorage mockStorage;","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"StevenGX12"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"StevenGX12"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"StevenGX12"},"content":" @BeforeEach","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"StevenGX12"},"content":" public void setUp(@TempDir Path tempDir) throws IOException {","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"StevenGX12"},"content":" // Create a temporary file in the tempDir","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"StevenGX12"},"content":" Path tempFile \u003d tempDir.resolve(\"testStorage.txt\");","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"StevenGX12"},"content":" mockStorage \u003d new MockStorage(tempFile.toString()); // Pass the temporary file path","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"StevenGX12"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"StevenGX12"},"content":" mockUi \u003d new Ui(mockStorage,questionList);","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"StevenGX12"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"StevenGX12"},"content":" @AfterEach","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"StevenGX12"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"StevenGX12"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"StevenGX12"},"content":" private void testCliOutputCorrectness(String expectedOutput){","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"StevenGX12"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"StevenGX12"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"StevenGX12"},"content":" ","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" * Test if help command displays the correct output","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"StevenGX12"},"content":" * */","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"StevenGX12"},"content":" public void testHelpCommand() {","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"StevenGX12"},"content":" String expectedOutput \u003d \"Here are the list of commands you can use:\\r\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"StevenGX12"},"content":" \" 1. help - shows the list of commands you can use\\r\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" \" 2. short [question]/[answer] - adds a short answer question and its answer to the list,\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" \" 3. list - shows the list of questions and answers,\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" \" 4. delete [question number] - deletes the question and answer at the specified number,\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" \" 5. find /[description] - displays all questions that contains the the specified description,\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" \" 6. edit [question number] /description [description] - edits the description of the question \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" \"with the specified number,\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" \" 7. edit [question number] /answer [answer] - edits the answer to the question with the \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":" \"specified number,\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" \" 8. start - starts the quiz,\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" \" 9. shuffle - shuffle quiz questions to a random order,\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" \" 10. markdiff [question number] [question difficulty] - sets the difficulty of question \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" \"with the specified number,\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" \" 11. bye - exits the program\";","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"StevenGX12"},"content":" CommandHelp help \u003d new CommandHelp();","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"StevenGX12"},"content":" help.executeCommand(mockUi, mockStorage, questionList);","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"StevenGX12"},"content":" // MockStorage class for testing, using in-data memory","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"StevenGX12"},"content":" public class MockStorage extends Storage {","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"StevenGX12"},"content":" private List\u003cString\u003e questions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"StevenGX12"},"content":" public MockStorage(String filepath) {","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"StevenGX12"},"content":" super(filepath);","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"StevenGX12"},"content":" public void saveData(String dataToAdd) {","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"StevenGX12"},"content":" questions.add(dataToAdd);","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"StevenGX12"},"content":" public String loadData() {","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"StevenGX12"},"content":" // In-memory storage, retrieve data from the list","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"StevenGX12"},"content":" if (questions.isEmpty()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"StevenGX12"},"content":" return \"\";","lastModifiedDate":"2023-10-18"},{"lineNumber":91,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"StevenGX12"},"content":" // Concatenate the data with line breaks","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"StevenGX12"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"StevenGX12"},"content":" for (String line : questions) {","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"StevenGX12"},"content":" result.append(line).append(System.lineSeparator());","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"StevenGX12"},"content":" return result.toString().trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"StevenGX12"},"content":" public boolean dataExists() {","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"StevenGX12"},"content":" return !questions.isEmpty();","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":103,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":104,"author":{"gitId":"StevenGX12"},"content":" public void clearData() {","lastModifiedDate":"2023-10-18"},{"lineNumber":105,"author":{"gitId":"StevenGX12"},"content":" questions.clear();","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":107,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":108,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"StevenGX12"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"spinoandraptos":14,"StevenGX12":95}},{"path":"src/test/java/quizhub/command/CommandListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"spinoandraptos"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":"public class CommandListTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" private QuestionList questionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" public void setUp() {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" @AfterEach","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" * Compares system standard output with expected output.","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" * Assertion error is thrown if the two are not the same.","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" private void testCliOutputCorrectness(String expectedOutput){","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" * Test display of empty question list.","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" void testListEmptyList(){","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"No questions found! Time to add some OWO\";","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" questionList.printQuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" * Test display of populated question list","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" * with one unmarked SHORTANSWER question.","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" void testListOneUnmarkedShort(){","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" String questionToAdd \u003d \"short Question / Answer / Mod1 / EASY\";","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-21"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" questionList.addToQuestionList(questionToAdd, qnType, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"1: [S][] Question / Answer | Mod1 | EASY\";","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" questionList.printQuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":" * Test display of populated question list","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" * with one marked SHORTANSWER question.","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" void testListOneMarkedShort(){","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" String questionToAdd \u003d \"short Question / Answer / Mod1 / HARD\";","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-21"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" questionList.addToQuestionList(questionToAdd, qnType, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(1, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"1: [S][X] Question / Answer | Mod1 | HARD\";","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"spinoandraptos"},"content":" questionList.printQuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":" * Test display of populated question list","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":" * with a mix of marked and unmarked SHORTANSWER questions.","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":" void testListMixedShorts(){","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" String[] questionsToAdd \u003d { \"short Question1 / Answer1 / Mod1 / HARD \", \"short Question2 / Answer2 / Mod2 / HARD\",","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" \"short Question3 / Answer3 / Mod3 / NORMAL\", \"short Question4 / Answer4 / Mod4 / EASY\" };","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-21"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" for (String question:questionsToAdd) {","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" questionList.addToQuestionList(question, qnType, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(1, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(3, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" \"1: [S][X] Question1 / Answer1 | Mod1 | HARD\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":" \" 2: [S][] Question2 / Answer2 | Mod2 | HARD\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":" \" 3: [S][X] Question3 / Answer3 | Mod3 | NORMAL\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" \" 4: [S][] Question4 / Answer4 | Mod4 | EASY\" ;","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" questionList.printQuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"spinoandraptos":105}},{"path":"src/test/java/quizhub/command/StartTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"yeo-menghan"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"yeo-menghan"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"yeo-menghan"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"yeo-menghan"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"yeo-menghan"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"yeo-menghan"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"yeo-menghan"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"yeo-menghan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"yeo-menghan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"yeo-menghan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"yeo-menghan"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"yeo-menghan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"yeo-menghan"},"content":"import java.util.LinkedList;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"yeo-menghan"},"content":"import java.util.List;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"yeo-menghan"},"content":"import java.util.Queue;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"yeo-menghan"},"content":"public class StartTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"yeo-menghan"},"content":" private QuestionList questionList;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"yeo-menghan"},"content":" private UiMock mockUi;","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"yeo-menghan"},"content":" private MockStorage mockStorage;","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"yeo-menghan"},"content":" @BeforeEach","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"yeo-menghan"},"content":" public void setUp(@TempDir Path tempDir) throws IOException {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"yeo-menghan"},"content":" // Create a temporary file in the tempDir","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"yeo-menghan"},"content":" Path tempFile \u003d tempDir.resolve(\"testStorage.txt\");","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"yeo-menghan"},"content":" mockStorage \u003d new MockStorage(tempFile.toString()); // Pass the temporary file path","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"yeo-menghan"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"yeo-menghan"},"content":" mockUi \u003d new UiMock(questionList);","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"yeo-menghan"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"yeo-menghan"},"content":" public void testStartQuizWithNoQuestions() {","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"yeo-menghan"},"content":" // Ensure the quiz doesn\u0027t start if there are no questions","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" questionList.startQuiz(mockUi, questionList.getAllQns());","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" assertEquals(\" No questions found! Add questions before starting the quiz.\",","lastModifiedDate":"2023-10-21"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" mockUi.getLastDisplayedMessage());","lastModifiedDate":"2023-10-21"},{"lineNumber":41,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"yeo-menghan"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yeo-menghan"},"content":" public void testAddQuestionToListAndStorage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"yeo-menghan"},"content":" // Add a question to the question list","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" questionList.addToQuestionList(\"short What is 2 + 2?/4 / MA1511 / EASY\", Question.QnType.SHORTANSWER, false);","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yeo-menghan"},"content":" // Store the question in the mock storage","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yeo-menghan"},"content":" mockStorage.saveData(questionList.toString());","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"yeo-menghan"},"content":" // Retrieve questions from the mock storage (without clearing the list)","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"yeo-menghan"},"content":" mockStorage.loadData(questionList);","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"yeo-menghan"},"content":" // Verify that the question was added to the list and retrieved from storage","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"yeo-menghan"},"content":" assertEquals(1, questionList.getQuestionListSize());","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"yeo-menghan"},"content":" // assertEquals(\"short What is 2 + 2?/4\", questionList.getQuestionTextByIndex(1));","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"yeo-menghan"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"yeo-menghan"},"content":" public void testStartQuizWithQuestions() {","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"yeo-menghan"},"content":" // Add some questions to the question list","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" questionList.addToQuestionList(\"short What is 2 + 2?/4 / MA1511 / EASY\", Question.QnType.SHORTANSWER, false);","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" questionList.addToQuestionList(\"short What is 3 + 3?/6 / MA1511 / EASY\", Question.QnType.SHORTANSWER, false);","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"yeo-menghan"},"content":" // Set up user input for the quiz one by one","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"yeo-menghan"},"content":" mockUi.setUserInput(\"4\");","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"yeo-menghan"},"content":" mockUi.setUserInput(\"6\");","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"yeo-menghan"},"content":" // Start the quiz","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" questionList.startQuiz(mockUi, questionList.getAllQns());","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"yeo-menghan"},"content":" // Verify that the expected messages are displayed","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"yeo-menghan"},"content":" assertEquals(\" Starting the quiz...\", mockUi.getLastDisplayedMessage());","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" //assertEquals(\"Correct!\", mockUi.getLastDisplayedMessage()); // Verify that \"Correct!\" is displayed","lastModifiedDate":"2023-10-21"},{"lineNumber":75,"author":{"gitId":"spinoandraptos"},"content":" //for both questions","lastModifiedDate":"2023-10-21"},{"lineNumber":76,"author":{"gitId":"yeo-menghan"},"content":" //assertEquals(\"Quiz completed!\", mockUi.getLastDisplayedMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"yeo-menghan"},"content":" //assertEquals(\"Your score: 2/2\", mockUi.getLastDisplayedMessage()); // Verify the final score message","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"yeo-menghan"},"content":" // A simple mock class for Ui","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"yeo-menghan"},"content":" public class UiMock extends Ui {","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"yeo-menghan"},"content":" private final Queue\u003cString\u003e userInputQueue \u003d new LinkedList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"yeo-menghan"},"content":" private String lastDisplayedMessage;","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"yeo-menghan"},"content":" public UiMock(QuestionList tasks) {","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"yeo-menghan"},"content":" super(mockStorage, tasks);","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"yeo-menghan"},"content":" public void setUserInput(String input) {","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"yeo-menghan"},"content":" userInputQueue.add(input);","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"yeo-menghan"},"content":" public String getUserInput() {","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"yeo-menghan"},"content":" if (userInputQueue.isEmpty()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"yeo-menghan"},"content":" throw new RuntimeException(\"No more user inputs provided.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"yeo-menghan"},"content":" return userInputQueue.poll();","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"yeo-menghan"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"yeo-menghan"},"content":" public void displayMessage(String message) {","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"yeo-menghan"},"content":" lastDisplayedMessage \u003d message;","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"yeo-menghan"},"content":" public String getLastDisplayedMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"yeo-menghan"},"content":" return lastDisplayedMessage;","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":110,"author":{"gitId":"yeo-menghan"},"content":" // MockStorage class for testing, using in-data memory","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"yeo-menghan"},"content":" public class MockStorage extends Storage {","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"yeo-menghan"},"content":" private List\u003cString\u003e questions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"yeo-menghan"},"content":" public MockStorage(String filepath) {","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"yeo-menghan"},"content":" super(filepath);","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":118,"author":{"gitId":"yeo-menghan"},"content":" public void saveData(String dataToAdd) {","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"yeo-menghan"},"content":" questions.add(dataToAdd);","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"yeo-menghan"},"content":" public String loadData() {","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"yeo-menghan"},"content":" // In-memory storage, retrieve data from the list","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"yeo-menghan"},"content":" if (questions.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"yeo-menghan"},"content":" return \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":126,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":127,"author":{"gitId":"yeo-menghan"},"content":" // Concatenate the data with line breaks","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"yeo-menghan"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-10-17"},{"lineNumber":129,"author":{"gitId":"yeo-menghan"},"content":" for (String line : questions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"yeo-menghan"},"content":" result.append(line).append(System.lineSeparator());","lastModifiedDate":"2023-10-17"},{"lineNumber":131,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":132,"author":{"gitId":"yeo-menghan"},"content":" return result.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":134,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":135,"author":{"gitId":"yeo-menghan"},"content":" public boolean dataExists() {","lastModifiedDate":"2023-10-16"},{"lineNumber":136,"author":{"gitId":"yeo-menghan"},"content":" return !questions.isEmpty();","lastModifiedDate":"2023-10-17"},{"lineNumber":137,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":138,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":139,"author":{"gitId":"yeo-menghan"},"content":" public void clearData() {","lastModifiedDate":"2023-10-16"},{"lineNumber":140,"author":{"gitId":"yeo-menghan"},"content":" questions.clear();","lastModifiedDate":"2023-10-17"},{"lineNumber":141,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":142,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":143,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":144,"author":{"gitId":"yeo-menghan"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spinoandraptos":9,"yeo-menghan":135}},{"path":"src/test/java/quizhub/parser/ParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.parser;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"lisizhuang-0121"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.command.Command;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.command.CommandShortAnswer;","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.command.CommandInvalid;","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"lisizhuang-0121"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"lisizhuang-0121"},"content":"class ParserTest {","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"lisizhuang-0121"},"content":" private Parser parser;","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"lisizhuang-0121"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"lisizhuang-0121"},"content":" public void setUp() {","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"lisizhuang-0121"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"lisizhuang-0121"},"content":" * Test command parser with empty commands (invalid commands)","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":" * */","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"lisizhuang-0121"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"lisizhuang-0121"},"content":" void test_parseCommand_emptyCommand() {","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"lisizhuang-0121"},"content":" final String[] emptyInputs \u003d { \"\", \" \", \"\\n \\n\" };","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"lisizhuang-0121"},"content":" final String resultMessage \u003d Parser.INVALID_COMMAND_FEEDBACK;","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"lisizhuang-0121"},"content":" parseAndAssertIncorrectWithMessage(resultMessage, emptyInputs);","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"lisizhuang-0121"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"lisizhuang-0121"},"content":" void test_parseCommand_invalidIntegerCommand() {","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"lisizhuang-0121"},"content":" final String[] emptyInputs \u003d {","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"lisizhuang-0121"},"content":" \"delete\",","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"lisizhuang-0121"},"content":" \"delete system32\"","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"lisizhuang-0121"},"content":" };","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"lisizhuang-0121"},"content":" final String resultMessage \u003d Parser.INVALID_INTEGER_INDEX;","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"lisizhuang-0121"},"content":" parseAndAssertIncorrectWithMessage(resultMessage, emptyInputs);","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"James-Hong-Jey"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" void test_parseCommand_commandShortAnswer() {","lastModifiedDate":"2023-10-21"},{"lineNumber":43,"author":{"gitId":"James-Hong-Jey"},"content":" final String validInput \u003d \"short What\u0027s 9 + 10 / 21\";","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"James-Hong-Jey"},"content":" CommandShortAnswer result \u003d parseAndAssertCommandType(validInput, CommandShortAnswer.class);","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"James-Hong-Jey"},"content":" assertEquals(\"short What\u0027s 9 + 10 / 21\", result.getUserInput());","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":49,"author":{"gitId":"lisizhuang-0121"},"content":" * Test list of INVALID inputs and validate their feedback","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"lisizhuang-0121"},"content":" * This function is adapted from ADDRESS_BOOK_LEVEL_2","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"lisizhuang-0121"},"content":" * @param feedback The target feedback message for invalid command","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"lisizhuang-0121"},"content":" * @param inputs The invalid inputs that would generate the same feedback","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"lisizhuang-0121"},"content":" * */","lastModifiedDate":"2023-10-12"},{"lineNumber":54,"author":{"gitId":"lisizhuang-0121"},"content":" private void parseAndAssertIncorrectWithMessage(String feedback, String[] inputs) {","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"lisizhuang-0121"},"content":" for (String input : inputs) {","lastModifiedDate":"2023-10-12"},{"lineNumber":56,"author":{"gitId":"lisizhuang-0121"},"content":" final CommandInvalid result \u003d parseAndAssertCommandType(input, CommandInvalid.class);","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"lisizhuang-0121"},"content":" assertEquals(result.feedback, feedback);","lastModifiedDate":"2023-10-12"},{"lineNumber":58,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":59,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":60,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":62,"author":{"gitId":"lisizhuang-0121"},"content":" * Parses and tests the command type returned","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"lisizhuang-0121"},"content":" * This function is adapted from ADDRESS_BOOK_LEVEL_2","lastModifiedDate":"2023-10-12"},{"lineNumber":64,"author":{"gitId":"lisizhuang-0121"},"content":" * @param input The command input to be tested","lastModifiedDate":"2023-10-12"},{"lineNumber":65,"author":{"gitId":"lisizhuang-0121"},"content":" * @param expectedClass The expected command class","lastModifiedDate":"2023-10-12"},{"lineNumber":66,"author":{"gitId":"lisizhuang-0121"},"content":" * */","lastModifiedDate":"2023-10-12"},{"lineNumber":67,"author":{"gitId":"lisizhuang-0121"},"content":" private \u003cT extends Command\u003e T parseAndAssertCommandType(String input, Class\u003cT\u003e expectedClass) {","lastModifiedDate":"2023-10-12"},{"lineNumber":68,"author":{"gitId":"lisizhuang-0121"},"content":" final Command result \u003d parser.parseCommand(input);","lastModifiedDate":"2023-10-12"},{"lineNumber":69,"author":{"gitId":"lisizhuang-0121"},"content":" assertTrue(result.getClass().isAssignableFrom(expectedClass));","lastModifiedDate":"2023-10-12"},{"lineNumber":70,"author":{"gitId":"lisizhuang-0121"},"content":" return (T) result;","lastModifiedDate":"2023-10-12"},{"lineNumber":71,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":72,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"spinoandraptos":4,"James-Hong-Jey":6,"lisizhuang-0121":62}},{"path":"src/test/java/quizhub/questionlist/QuestionListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"James-Hong-Jey"},"content":"package quizhub.questionlist;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"James-Hong-Jey"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"James-Hong-Jey"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"James-Hong-Jey"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"James-Hong-Jey"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"James-Hong-Jey"},"content":"class QuestionListTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"James-Hong-Jey"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"James-Hong-Jey"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"James-Hong-Jey"},"content":" @BeforeEach","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"James-Hong-Jey"},"content":" public void setUp() {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"James-Hong-Jey"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"James-Hong-Jey"},"content":" @AfterEach","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"James-Hong-Jey"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"James-Hong-Jey"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"James-Hong-Jey"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"James-Hong-Jey"},"content":" void test_addToQuestionList_valid() {","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"short Question / Answer / Mod1 / NORMAL\";","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-21"},{"lineNumber":31,"author":{"gitId":"James-Hong-Jey"},"content":" boolean showMessage \u003d true;","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"James-Hong-Jey"},"content":" QuestionList qns \u003d new QuestionList();","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"James-Hong-Jey"},"content":" qns.addToQuestionList(input, qnType, showMessage);","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" assertEquals(\"I have added the following question OwO:\" +","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" \" [S] Question / Answer | Mod1 | NORMAL Now you have 1 questions in the list! UWU\",","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" outputStreamCaptor.toString().strip().replaceAll(\"\\\\R\", \"\"));","lastModifiedDate":"2023-10-21"},{"lineNumber":37,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"James-Hong-Jey"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spinoandraptos":7,"James-Hong-Jey":32}}] +[{"path":"README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"yeo-menghan"},"content":"# QuizHub project template","lastModifiedDate":"2023-10-04"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":3,"author":{"gitId":"-"},"content":"This is a project template for a greenfield Java project. It\u0027s named after the Java mascot _Duke_. Given below are instructions on how to use it.","lastModifiedDate":"2020-05-25"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"## Setting up in Intellij","lastModifiedDate":"2020-05-25"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"Prerequisites: JDK 11 (use the exact version), update Intellij to the most recent version.","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"1. **Ensure Intellij JDK 11 is defined as an SDK**, as described [here](https://www.jetbrains.com/help/idea/sdk.html#set-up-jdk) -- this step is not needed if you have used JDK 11 in a previous Intellij project.","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"1. **Import the project _as a Gradle project_**, as described [here](https://se-education.org/guides/tutorials/intellijImportGradleProject.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"1. **Verify the set up**: After the importing is complete, locate the `src/main/java/seedu/duke/Duke.java` file, right-click it, and choose `Run Duke.main()`. If the setup is correct, you should see something like the below:","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" \u003e Task :compileJava","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":" \u003e Task :processResources NO-SOURCE","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":" \u003e Task :classes","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":" ","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":" \u003e Task :Duke.main()","lastModifiedDate":"2020-05-24"},{"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-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":" What is your name?","lastModifiedDate":"2020-05-24"},{"lineNumber":26,"author":{"gitId":"-"},"content":" ```","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" Type some word and press enter to let the execution proceed to the end.","lastModifiedDate":"2020-05-24"},{"lineNumber":28,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":29,"author":{"gitId":"-"},"content":"## Build automation using Gradle","lastModifiedDate":"2020-05-24"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":31,"author":{"gitId":"-"},"content":"* This project uses Gradle for build automation and dependency management. It includes a basic build script as well (i.e. the `build.gradle` file).","lastModifiedDate":"2020-05-24"},{"lineNumber":32,"author":{"gitId":"-"},"content":"* If you are new to Gradle, refer to the [Gradle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/gradle.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":33,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":34,"author":{"gitId":"-"},"content":"## Testing","lastModifiedDate":"2020-05-24"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":36,"author":{"gitId":"-"},"content":"### I/O redirection tests","lastModifiedDate":"2020-05-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"* To run _I/O redirection_ tests (aka _Text UI tests_), navigate to the `text-ui-test` and run the `runtest(.bat/.sh)` script.","lastModifiedDate":"2020-05-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":"### JUnit tests","lastModifiedDate":"2020-05-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":42,"author":{"gitId":"-"},"content":"* A skeleton JUnit test (`src/test/java/seedu/duke/DukeTest.java`) is provided with this project template. ","lastModifiedDate":"2020-05-24"},{"lineNumber":43,"author":{"gitId":"-"},"content":"* If you are new to JUnit, refer to the [JUnit Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/junit.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":"## Checkstyle","lastModifiedDate":"2020-05-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":"* A sample CheckStyle rule configuration is provided in this project.","lastModifiedDate":"2020-05-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":"* If you are new to Checkstyle, refer to the [Checkstyle Tutorial at se-education.org/guides](https://se-education.org/guides/tutorials/checkstyle.html).","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":"## CI using GitHub Actions","lastModifiedDate":"2020-05-24"},{"lineNumber":51,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":52,"author":{"gitId":"-"},"content":"The project uses [GitHub actions](https://github.com/features/actions) for CI. When you push a commit to this repo or PR against it, GitHub actions will run automatically to build and verify the code as updated by the commit/PR.","lastModifiedDate":"2020-05-24"},{"lineNumber":53,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":54,"author":{"gitId":"-"},"content":"## Documentation","lastModifiedDate":"2020-05-24"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":56,"author":{"gitId":"-"},"content":"`/docs` folder contains a skeleton version of the project documentation.","lastModifiedDate":"2020-05-24"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":58,"author":{"gitId":"-"},"content":"Steps for publishing documentation to the public: ","lastModifiedDate":"2020-05-24"},{"lineNumber":59,"author":{"gitId":"-"},"content":"1. If you are using this project template for an individual project, go your fork on GitHub.\u003cbr\u003e","lastModifiedDate":"2020-05-24"},{"lineNumber":60,"author":{"gitId":"-"},"content":" If you are using this project template for a team project, go to the team fork on GitHub.","lastModifiedDate":"2020-05-24"},{"lineNumber":61,"author":{"gitId":"-"},"content":"1. Click on the `settings` tab.","lastModifiedDate":"2020-05-24"},{"lineNumber":62,"author":{"gitId":"-"},"content":"1. Scroll down to the `GitHub Pages` section.","lastModifiedDate":"2020-05-24"},{"lineNumber":63,"author":{"gitId":"-"},"content":"1. Set the `source` as `master branch /docs folder`.","lastModifiedDate":"2020-05-24"},{"lineNumber":64,"author":{"gitId":"-"},"content":"1. Optionally, use the `choose a theme` button to choose a theme for your documentation.","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"yeo-menghan":1,"-":63}},{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" mainClass.set(\"Quizhub\")","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" archiveBaseName.set(\"quizhub\")","lastModifiedDate":"2023-10-21"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2023-10-21"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"lisizhuang-0121"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"spinoandraptos":2,"lisizhuang-0121":1,"-":44}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Portfolio ","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":"--------|:--------------:|:--------------------------------------------:|:---------:","lastModifiedDate":"2023-10-04"},{"lineNumber":5,"author":{"gitId":"James-Hong-Jey"},"content":"![](https://www.comp.nus.edu.sg/~stevenha/images/sh7.jpg) | James Hong Jey | [Github](https://github.com/James-Hong-Jey) | [Portfolio](docs/team/jameshong.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":6,"author":{"gitId":"StevenGX12"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Guan Xiao | [Github](https://github.com/StevenGX12) | [Portfolio](docs/team/guanxiao.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"![](https://avatars.githubusercontent.com/u/111041948?s\u003d400\u0026u\u003d6619a8328eba45edbc88fe01cf54efeb1f986d11\u0026v\u003d4) | Man Juncheng | [Github](https://github.com/spinoandraptos) | [Portfolio](docs/team/juncheng.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"lisizhuang-0121"},"content":"![](https://i.redd.it/6do158vk2ue61.png) | Li Sizhuang | [Github](https://github.com/lisizhuang-0121) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"yeo-menghan"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Yeo Meng Han | [Github](https://github.com/yeo-menghan) | [Portfolio](https://linkedin.com/in/yeo-meng-han/)","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":1,"StevenGX12":1,"James-Hong-Jey":1,"yeo-menghan":1,"lisizhuang-0121":2,"-":3}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# Developer Guide","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c .merge_file_0HpctG","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"-"},"content":"## Acknowledgements","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"{list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well}","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"## Design \u0026 implementation","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"{Describe the design and implementation of the product. Use UML diagrams and short code snippets where applicable.}","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"author":{"gitId":"-"},"content":"### Target user profile","lastModifiedDate":"2020-05-24"},{"lineNumber":15,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":"{Describe the target user profile}","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":"### Value proposition","lastModifiedDate":"2020-05-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":20,"author":{"gitId":"-"},"content":"{Describe the value proposition: what problem does it solve?}","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":22,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":"|Version| As a ... | I want to ... | So that I can ...|","lastModifiedDate":"2020-05-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":"|--------|----------|---------------|------------------|","lastModifiedDate":"2023-10-21"},{"lineNumber":26,"author":{"gitId":"-"},"content":"|v1.0|new user|see usage instructions|refer to them when I forget how to use the application|","lastModifiedDate":"2023-10-21"},{"lineNumber":27,"author":{"gitId":"-"},"content":"|v2.0|user|find a to-do item by name|locate a to-do without having to go through the entire list|","lastModifiedDate":"2023-10-21"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-10-21"},{"lineNumber":29,"author":{"gitId":"lisizhuang-0121"},"content":"## Table of Contents","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"lisizhuang-0121"},"content":"* [Acknowledgements](#acknowledgements)","lastModifiedDate":"2023-10-21"},{"lineNumber":31,"author":{"gitId":"lisizhuang-0121"},"content":"* [Design and Implementation](#design--implementation)","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"lisizhuang-0121"},"content":" * [Application Lifecycle](#application-lifecycle)","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"lisizhuang-0121"},"content":"* [Product Scope](#product-scope)","lastModifiedDate":"2023-10-21"},{"lineNumber":34,"author":{"gitId":"lisizhuang-0121"},"content":"* [Non Functional Requirements](#non-functional-requirements)","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"lisizhuang-0121"},"content":"* [Glossary](#glossary)","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"lisizhuang-0121"},"content":"* [Instructions for Manual Testing](#instructions-for-manual-testing)","lastModifiedDate":"2023-10-21"},{"lineNumber":37,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":38,"author":{"gitId":"-"},"content":"## Acknowledgements","lastModifiedDate":"2020-05-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"lisizhuang-0121"},"content":"1. For the main structure of the program, we have adapted the project structure","lastModifiedDate":"2023-10-21"},{"lineNumber":41,"author":{"gitId":"lisizhuang-0121"},"content":"from the Individual Project of Man JunCheng at [Link](https://github.com/spinoandraptos/ip/tree/master) \u003c/li\u003e","lastModifiedDate":"2023-10-21"},{"lineNumber":42,"author":{"gitId":"James-Hong-Jey"},"content":"2. For JUnit testing, we have adapted the testing codes from the AddressBook level-2","lastModifiedDate":"2023-10-21"},{"lineNumber":43,"author":{"gitId":"lisizhuang-0121"},"content":"codes at [Link](https://github.com/se-edu/addressbook-level2)\u003c/li\u003e","lastModifiedDate":"2023-10-21"},{"lineNumber":44,"author":{"gitId":"lisizhuang-0121"},"content":"3. For the developer\u0027s guide, we have reverenced the developer\u0027s guide from AddressBook","lastModifiedDate":"2023-10-21"},{"lineNumber":45,"author":{"gitId":"lisizhuang-0121"},"content":"level-3 [Link](https://se-education.org/addressbook-level3/DeveloperGuide.html)","lastModifiedDate":"2023-10-21"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":"## Design \u0026 implementation","lastModifiedDate":"2020-05-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"James-Hong-Jey"},"content":"### Architecture","lastModifiedDate":"2023-10-21"},{"lineNumber":50,"author":{"gitId":"lisizhuang-0121"},"content":"The main execution of the QuizHub application will concern 4 components which","lastModifiedDate":"2023-10-21"},{"lineNumber":51,"author":{"gitId":"lisizhuang-0121"},"content":"are the QuizHub, Ui, Parser and Command packages.","lastModifiedDate":"2023-10-21"},{"lineNumber":52,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":53,"author":{"gitId":"James-Hong-Jey"},"content":"![](./UML/architecture.jpg)","lastModifiedDate":"2023-10-21"},{"lineNumber":54,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":55,"author":{"gitId":"James-Hong-Jey"},"content":"`Quizhub` is the \"main\" class, which is responsible for starting the program, ","lastModifiedDate":"2023-10-21"},{"lineNumber":56,"author":{"gitId":"James-Hong-Jey"},"content":"initialising all other objects, executing commands, and shutting down.","lastModifiedDate":"2023-10-21"},{"lineNumber":57,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":58,"author":{"gitId":"James-Hong-Jey"},"content":"`UI` is the component that interacts with the user, taking inputs and displaying ","lastModifiedDate":"2023-10-21"},{"lineNumber":59,"author":{"gitId":"James-Hong-Jey"},"content":"the results of the executed commands.","lastModifiedDate":"2023-10-21"},{"lineNumber":60,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":61,"author":{"gitId":"James-Hong-Jey"},"content":"`Parser` acts as a multiplexer to determine which command to run, and what parameters","lastModifiedDate":"2023-10-21"},{"lineNumber":62,"author":{"gitId":"James-Hong-Jey"},"content":"it has, based on the user input.","lastModifiedDate":"2023-10-21"},{"lineNumber":63,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":64,"author":{"gitId":"James-Hong-Jey"},"content":"`Commands` refer to a package of individual commands with complex and specific","lastModifiedDate":"2023-10-21"},{"lineNumber":65,"author":{"gitId":"James-Hong-Jey"},"content":"logic, which is later executed in Quizhub and displayed in Utility.","lastModifiedDate":"2023-10-21"},{"lineNumber":66,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":67,"author":{"gitId":"James-Hong-Jey"},"content":"`Storage` is the class through which questions can be stored on the hard drive and `Utility Classes` ","lastModifiedDate":"2023-10-21"},{"lineNumber":68,"author":{"gitId":"James-Hong-Jey"},"content":"refer to any miscellaneous utility classes used by all the components.","lastModifiedDate":"2023-10-21"},{"lineNumber":69,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":70,"author":{"gitId":"James-Hong-Jey"},"content":"### Application Lifecycle","lastModifiedDate":"2023-10-21"},{"lineNumber":71,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":72,"author":{"gitId":"lisizhuang-0121"},"content":"![](./UML/lifecycle.jpg)","lastModifiedDate":"2023-10-21"},{"lineNumber":73,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":74,"author":{"gitId":"lisizhuang-0121"},"content":"The program will begin through the `run()` call to QuizHub class, with the","lastModifiedDate":"2023-10-21"},{"lineNumber":75,"author":{"gitId":"lisizhuang-0121"},"content":"necessary classes to be interacted throughout the execution.","lastModifiedDate":"2023-10-21"},{"lineNumber":76,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":77,"author":{"gitId":"lisizhuang-0121"},"content":"The `run` function contains a loop that accepts user inputs through the `Ui`","lastModifiedDate":"2023-10-21"},{"lineNumber":78,"author":{"gitId":"lisizhuang-0121"},"content":"class. The input is captured and passed to the `parseCommand()` function of the","lastModifiedDate":"2023-10-21"},{"lineNumber":79,"author":{"gitId":"lisizhuang-0121"},"content":"Parser class. A command object is returned by the Parser class to be executed.","lastModifiedDate":"2023-10-21"},{"lineNumber":80,"author":{"gitId":"lisizhuang-0121"},"content":"If the command is of Exit type, the Loop will exit.","lastModifiedDate":"2023-10-21"},{"lineNumber":81,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":82,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":83,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":84,"author":{"gitId":"lisizhuang-0121"},"content":"### Our Product","lastModifiedDate":"2023-10-21"},{"lineNumber":85,"author":{"gitId":"lisizhuang-0121"},"content":"QuizHub","lastModifiedDate":"2023-10-21"},{"lineNumber":86,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":87,"author":{"gitId":"-"},"content":"### Target user profile","lastModifiedDate":"2020-05-24"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":89,"author":{"gitId":"lisizhuang-0121"},"content":"Our target users are ","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"lisizhuang-0121"},"content":"* NUS Students preparing for exams","lastModifiedDate":"2023-10-21"},{"lineNumber":91,"author":{"gitId":"lisizhuang-0121"},"content":"* Like to take notes in class","lastModifiedDate":"2023-10-21"},{"lineNumber":92,"author":{"gitId":"lisizhuang-0121"},"content":"* Fear to miss out of important knowledge","lastModifiedDate":"2023-10-21"},{"lineNumber":93,"author":{"gitId":"lisizhuang-0121"},"content":"* Like to test their understanding of knowledge","lastModifiedDate":"2023-10-21"},{"lineNumber":94,"author":{"gitId":"lisizhuang-0121"},"content":"* Want to be better prepared for exams","lastModifiedDate":"2023-10-21"},{"lineNumber":95,"author":{"gitId":"lisizhuang-0121"},"content":"* Majoring in computing or engineering where there are lots of exams","lastModifiedDate":"2023-10-21"},{"lineNumber":96,"author":{"gitId":"lisizhuang-0121"},"content":"* Coders and tech geeks who enjoy using the CLI interface","lastModifiedDate":"2023-10-21"},{"lineNumber":97,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":98,"author":{"gitId":"-"},"content":"### Value proposition","lastModifiedDate":"2020-05-24"},{"lineNumber":99,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":100,"author":{"gitId":"lisizhuang-0121"},"content":"Allow NUS Students to easily take notes in class and allow them to ","lastModifiedDate":"2023-10-21"},{"lineNumber":101,"author":{"gitId":"lisizhuang-0121"},"content":"generate quizzes to test their knowledge of understanding. By using the ","lastModifiedDate":"2023-10-21"},{"lineNumber":102,"author":{"gitId":"lisizhuang-0121"},"content":"QuizHub application, students can input notes taken in class in a question form,","lastModifiedDate":"2023-10-21"},{"lineNumber":103,"author":{"gitId":"lisizhuang-0121"},"content":"which they could use to take quizzes to ensure their understanding of the topic.","lastModifiedDate":"2023-10-21"},{"lineNumber":104,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":105,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":106,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":107,"author":{"gitId":"-"},"content":"| Version | As a ... | I want to ... | So that I can ... |","lastModifiedDate":"2020-05-24"},{"lineNumber":108,"author":{"gitId":"lisizhuang-0121"},"content":"|:-------:|:-------------------------------------:|:---------------------------------------------------------------------------------:|:-------------------------------------------------------------------------:|","lastModifiedDate":"2023-10-21"},{"lineNumber":109,"author":{"gitId":"lisizhuang-0121"},"content":"| v1.0 | New student user | I can access the tutorial on how to operate the app | Easily use the app effectively for my studies |","lastModifiedDate":"2023-10-21"},{"lineNumber":110,"author":{"gitId":"lisizhuang-0121"},"content":"| v1.0 | Efficient student | I can add a question and its answer easily to my question and answer bank | Build my question and answer bank quickly |","lastModifiedDate":"2023-10-21"},{"lineNumber":111,"author":{"gitId":"lisizhuang-0121"},"content":"| v1.0 | Organized student | I can view all the questions and answers in my question and answer bank | Review my study materials comprehensively |","lastModifiedDate":"2023-10-21"},{"lineNumber":112,"author":{"gitId":"lisizhuang-0121"},"content":"| v1.0 | Detail-oriented student | I can edit the content of a question or its answer | Correct any mistakes or make improvements |","lastModifiedDate":"2023-10-21"},{"lineNumber":113,"author":{"gitId":"lisizhuang-0121"},"content":"| v1.0 | Student focused on clarity | I can delete a question and its answer from my question and answer bank | Maintain a clean and relevant set of questions for revision |","lastModifiedDate":"2023-10-21"},{"lineNumber":114,"author":{"gitId":"lisizhuang-0121"},"content":"| v1.0 | Student focused on revising for tests | I can start and end a quiz which tests me on questions in my question bank | Consolidate understanding of my learnt knowledge through rigorous testing |","lastModifiedDate":"2023-10-21"},{"lineNumber":115,"author":{"gitId":"lisizhuang-0121"},"content":"| v1.0 | Student focused on revising for tests | I can see my final quiz score and whether I have answered each question correctly | Identify areas of weakness to be improved upon for my tests |","lastModifiedDate":"2023-10-21"},{"lineNumber":116,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.0 | User seeking efficiency | I can search for a specific question within a flashcard deck | locate information quickly. |","lastModifiedDate":"2023-10-21"},{"lineNumber":117,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.0 | User with diverse interests | I can categorize questions by topic or subject | tailor my quizzes |","lastModifiedDate":"2023-10-21"},{"lineNumber":118,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.0 | User seeking variety | I can shuffle the order of questions in a flashcard deck | keep my quizzes engaging. |","lastModifiedDate":"2023-10-21"},{"lineNumber":119,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.0 | User aiming for improvement | I can mark a question as \"difficult\" or \"easy\" for later review | optimize my learning. |","lastModifiedDate":"2023-10-21"},{"lineNumber":120,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.0 | User seeking a challenge | I can practice questions in a random order | test my knowledge comprehensively. |","lastModifiedDate":"2023-10-21"},{"lineNumber":121,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.0 | User seeking structure | I can practice questions in a sequential order | follow a specific learning path. |","lastModifiedDate":"2023-10-21"},{"lineNumber":122,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.1 | user aiming for accuracy | I can see how many questions I\u0027ve answered correctly | track my proficiency. |","lastModifiedDate":"2023-10-21"},{"lineNumber":123,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.1 | user tracking progress | I can reset the progress of a specific flashcard deck | start fresh. |","lastModifiedDate":"2023-10-21"},{"lineNumber":124,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.1 | time-conscious user | I can set a timer for each flashcard question during practice | manage my study sessions effectively. |","lastModifiedDate":"2023-10-21"},{"lineNumber":125,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.1 | goal-oriented user | I can view my overall progress and performance statistics | gauge my improvement. |","lastModifiedDate":"2023-10-21"},{"lineNumber":126,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.1 | user aiming for improvement | I can see how many questions I\u0027ve answered incorrectly | focus on weak areas. |","lastModifiedDate":"2023-10-21"},{"lineNumber":127,"author":{"gitId":"lisizhuang-0121"},"content":"| v2.1 | user committed to learning | I can review the questions I\u0027ve answered incorrectly | reinforce my knowledge. |","lastModifiedDate":"2023-10-21"},{"lineNumber":128,"author":{"gitId":"spinoandraptos"},"content":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e .merge_file_eTgh6a","lastModifiedDate":"2023-10-21"},{"lineNumber":129,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":130,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":131,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":132,"author":{"gitId":"-"},"content":"{Give non-functional requirements}","lastModifiedDate":"2020-05-24"},{"lineNumber":133,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":134,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":135,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":136,"author":{"gitId":"-"},"content":"* *glossary item* - Definition","lastModifiedDate":"2020-05-24"},{"lineNumber":137,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":138,"author":{"gitId":"-"},"content":"## Instructions for manual testing","lastModifiedDate":"2020-05-24"},{"lineNumber":139,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":140,"author":{"gitId":"-"},"content":"{Give instructions on how to do a manual product testing e.g., how to load sample data to be used for testing}","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"spinoandraptos":3,"James-Hong-Jey":21,"lisizhuang-0121":61,"-":55}},{"path":"src/main/java/Quizhub.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.command.Command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" * The main program running for the Duke chatbot.","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" * The program bridges the user interface (Ui),","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" * hard disk data (dataStorage) and supports","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" * dynamic data manipulation.","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":"public class Quizhub {","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" private Ui ui;","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" private Storage dataStorage;","lastModifiedDate":"2023-10-04"},{"lineNumber":16,"author":{"gitId":"James-Hong-Jey"},"content":" private QuestionList questions;","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" private Parser parser;","lastModifiedDate":"2023-10-04"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" * Initiates the program with the necessary components.","lastModifiedDate":"2023-10-04"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" * @param filePath File location where data is","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" * written to and read from by the program.","lastModifiedDate":"2023-10-04"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" public Quizhub(String filePath){","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" dataStorage \u003d new Storage(filePath);","lastModifiedDate":"2023-10-04"},{"lineNumber":26,"author":{"gitId":"James-Hong-Jey"},"content":" questions \u003d new QuestionList();","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"James-Hong-Jey"},"content":" ui \u003d new Ui(dataStorage, questions);","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-10-04"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" * Starts the chatbot by showing opening message.","lastModifiedDate":"2023-10-04"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" * Chatbot repeatedly handles user commands","lastModifiedDate":"2023-10-04"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" * until it is requested to terminate.","lastModifiedDate":"2023-10-04"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" * Chatbot closes by showing closing message.","lastModifiedDate":"2023-10-04"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" public void run(){","lastModifiedDate":"2023-10-04"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" ui.displayOpeningMessage();","lastModifiedDate":"2023-10-04"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" boolean toExit \u003d false;","lastModifiedDate":"2023-10-04"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" while(!toExit){","lastModifiedDate":"2023-10-04"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" String fullCommand \u003d ui.getUserInput();","lastModifiedDate":"2023-10-21"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" ui.showLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d parser.parseCommand(fullCommand);","lastModifiedDate":"2023-10-04"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" toExit \u003d command.toExit();","lastModifiedDate":"2023-10-04"},{"lineNumber":44,"author":{"gitId":"James-Hong-Jey"},"content":" command.executeCommand(ui, dataStorage, questions);","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" if(!toExit){","lastModifiedDate":"2023-10-04"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" ui.showLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" ui.displayClosingMessage();","lastModifiedDate":"2023-10-04"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-04"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" new Quizhub(\"tasklist.txt\").run();","lastModifiedDate":"2023-10-08"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":46,"James-Hong-Jey":5,"lisizhuang-0121":4}},{"path":"src/main/java/quizhub/command/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":" * Represents a user command to execute an action.","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"public class Command {","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" public enum CommandType {HELP, ADD, LIST, EDIT, DELETE, START, SHUFFLE, MARKDIFFICULTY, END, RESULT, FIND, EXIT, INVALID};","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" private CommandType commandType;","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new blank command.","lastModifiedDate":"2023-10-04"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" public Command(){}","lastModifiedDate":"2023-10-04"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new command of given type.","lastModifiedDate":"2023-10-04"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" * @param commandType Type of command.","lastModifiedDate":"2023-10-04"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" public Command(CommandType commandType){","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" this.commandType \u003d commandType;","lastModifiedDate":"2023-10-04"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" * Performs an action according to command.","lastModifiedDate":"2023-10-04"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-04"},{"lineNumber":28,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage Hard disk storage for storing question data.","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":31,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions){}","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" * Checks if the latest command calls for program termination.","lastModifiedDate":"2023-10-04"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" public boolean toExit(){","lastModifiedDate":"2023-10-04"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" return commandType \u003d\u003d CommandType.EXIT;","lastModifiedDate":"2023-10-04"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":32,"James-Hong-Jey":3,"lisizhuang-0121":3}},{"path":"src/main/java/quizhub/command/CommandDelete.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" * Represents a command to delete a question.","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"public class CommandDelete extends Command {","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"James-Hong-Jey"},"content":" private int qnIndex;","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new delete command for a question.","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" * @param userInput User input from CLI.","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" public CommandDelete(String userInput){","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" super(CommandType.DELETE);","lastModifiedDate":"2023-10-04"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" String[] editDetails;","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" editDetails \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" qnIndex \u003d Integer.parseInt(editDetails[1].strip());","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" } catch (NumberFormatException incompleteCommand) {","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(Parser.INVALID_INTEGER_INDEX);","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as delete [question number]\");","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate question index :\u003c\");","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as delete [question number]!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" * Checks if specified task exists.","lastModifiedDate":"2023-10-04"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" * Deletes the specified task and updates storage data.","lastModifiedDate":"2023-10-04"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-04"},{"lineNumber":36,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-08"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage Hard disk storage for storing task data.","lastModifiedDate":"2023-10-04"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-04"},{"lineNumber":40,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions){","lastModifiedDate":"2023-10-08"},{"lineNumber":41,"author":{"gitId":"James-Hong-Jey"},"content":" String taskName \u003d questions.viewQuestionByIndex(qnIndex);","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" if(!taskName.equals(\"Question Not Found\")) {","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"James-Hong-Jey"},"content":" questions.deleteQuestionByIndex(qnIndex);","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"James-Hong-Jey"},"content":" dataStorage.updateData(questions);","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":37,"James-Hong-Jey":7,"lisizhuang-0121":3}},{"path":"src/main/java/quizhub/command/CommandEdit.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" * Represents a command to edit a task.","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":"public class CommandEdit extends Command {","lastModifiedDate":"2023-10-05"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" private int qnIndex;","lastModifiedDate":"2023-10-08"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" private String newDescription;","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" private String newAnswer;","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new edit command","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" * @param userInput User input from CLI.","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" public CommandEdit(String userInput) {","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"lisizhuang-0121"},"content":" super(CommandType.EDIT);","lastModifiedDate":"2023-10-05"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" String[] editDetails;","lastModifiedDate":"2023-10-08"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" String editCriteria;","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-08"},{"lineNumber":24,"author":{"gitId":"lisizhuang-0121"},"content":" editDetails \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"lisizhuang-0121"},"content":" qnIndex \u003d Integer.parseInt(editDetails[1].strip());","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" } catch (NumberFormatException incompleteCommand) {","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(Parser.INVALID_INTEGER_INDEX);","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as edit [question number] /description [description] \" +","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" \"or edit /answer [answer]!\");","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" return;","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate question index :\u003c\");","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as edit [question number] /description [description] \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" \"or edit /answer [answer]!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" editCriteria \u003d editDetails[2].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate if you are editing question description or answer :\u003c\");","lastModifiedDate":"2023-10-08"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as edit [question number] /description [description] \" +","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" \"or edit /answer [answer]!\");","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" return;","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" switch (editCriteria){","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"lisizhuang-0121"},"content":" case \"/description\":","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" newDescription \u003d Parser.getContentAfterKeyword(userInput, \"/description\");","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":50,"author":{"gitId":"lisizhuang-0121"},"content":" case \"/answer\":","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" newAnswer \u003d Parser.getContentAfterKeyword(userInput, \"/answer\");","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-08"},{"lineNumber":54,"author":{"gitId":"lisizhuang-0121"},"content":" throw new ArrayIndexOutOfBoundsException();","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate the content you are editing to :\u003c\");","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as edit [question number] /description [description] \" +","lastModifiedDate":"2023-10-08"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" \"or edit /answer [answer]!\");","lastModifiedDate":"2023-10-08"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":61,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":62,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":63,"author":{"gitId":"lisizhuang-0121"},"content":" @Override","lastModifiedDate":"2023-10-05"},{"lineNumber":64,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-08"},{"lineNumber":65,"author":{"gitId":"lisizhuang-0121"},"content":" if (newDescription \u003d\u003d null \u0026\u0026 newAnswer \u003d\u003d null) {","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"lisizhuang-0121"},"content":" return;","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" questions.editQuestionByIndex(qnIndex, newDescription, newAnswer);","lastModifiedDate":"2023-10-08"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" dataStorage.updateData(questions);","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":71,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"spinoandraptos":50,"James-Hong-Jey":2,"lisizhuang-0121":19}},{"path":"src/main/java/quizhub/command/CommandExit.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":" * Represents a command to exit the program.","lastModifiedDate":"2023-10-04"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"public class CommandExit extends Command {","lastModifiedDate":"2023-10-04"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new exit command to terminate program.","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" public CommandExit() {","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" super(CommandType.EXIT);","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":11,"lisizhuang-0121":1}},{"path":"src/main/java/quizhub/command/CommandFind.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":" * Represents a command to search for a task.","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"public class CommandFind extends Command{","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" private String searchDetails;","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new find command to search for a task.","lastModifiedDate":"2023-10-04"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" * @param searchDetails User input containing details of what to search.","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" public CommandFind(String searchDetails){","lastModifiedDate":"2023-10-04"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" super((CommandType.FIND));","lastModifiedDate":"2023-10-04"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" this.searchDetails \u003d searchDetails;","lastModifiedDate":"2023-10-04"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" * Checks if specified task exists.","lastModifiedDate":"2023-10-04"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" * Marks the specified task as not done and updates storage data.","lastModifiedDate":"2023-10-04"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-04"},{"lineNumber":26,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage Hard disk storage for storing task data.","lastModifiedDate":"2023-10-04"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-04"},{"lineNumber":30,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"James-Hong-Jey"},"content":" questions.searchList(searchDetails);","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":26,"James-Hong-Jey":4,"lisizhuang-0121":3}},{"path":"src/main/java/quizhub/command/CommandHelp.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":7,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":8,"author":{"gitId":"lisizhuang-0121"},"content":"public class CommandHelp extends Command{","lastModifiedDate":"2023-10-05"},{"lineNumber":9,"author":{"gitId":"lisizhuang-0121"},"content":" public CommandHelp() {","lastModifiedDate":"2023-10-05"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":" super(CommandType.HELP);","lastModifiedDate":"2023-10-05"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":12,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":13,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"StevenGX12"},"content":" * Displays all commands available to the user.","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"StevenGX12"},"content":" * ","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"StevenGX12"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-09"},{"lineNumber":17,"author":{"gitId":"StevenGX12"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"StevenGX12"},"content":" * @param dataStorage Hard disk storage for storing task data.","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"lisizhuang-0121"},"content":" @Override","lastModifiedDate":"2023-10-05"},{"lineNumber":21,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-08"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(Parser.INVALID_COMMAND_FEEDBACK);","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":24,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"spinoandraptos":2,"StevenGX12":7,"James-Hong-Jey":2,"lisizhuang-0121":13}},{"path":"src/main/java/quizhub/command/CommandInvalid.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":" * Represents an invalid command to be handled.","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"lisizhuang-0121"},"content":"public class CommandInvalid extends Command {","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":" public String feedback;","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new invalid command with error feedback for user.","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"lisizhuang-0121"},"content":" public CommandInvalid(String feedback) {","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"lisizhuang-0121"},"content":" super(CommandType.INVALID);","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"lisizhuang-0121"},"content":" this.feedback \u003d feedback;","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" * Displays the error feedback on CLI for user.","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"lisizhuang-0121"},"content":" @Override","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"lisizhuang-0121"},"content":" ui.showInvalidCommandHelp(feedback);","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"spinoandraptos":9,"lisizhuang-0121":17}},{"path":"src/main/java/quizhub/command/CommandList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":" * Represents a command to list all tasks.","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"public class CommandList extends Command {","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new list command to list all tasks.","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" public CommandList(){","lastModifiedDate":"2023-10-04"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" super(CommandType.LIST);","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" * Prints all tasks in current task list.","lastModifiedDate":"2023-10-04"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-04"},{"lineNumber":20,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-08"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage Hard disk storage for storing task data.","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-04"},{"lineNumber":24,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions){","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"James-Hong-Jey"},"content":" questions.printQuestionList();","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":20,"James-Hong-Jey":4,"lisizhuang-0121":3}},{"path":"src/main/java/quizhub/command/CommandMarkDifficulty.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"spinoandraptos"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.exception.QuizHubExceptions;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" * Represents a command to mark the difficulty of a question.","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":"public class CommandMarkDifficulty extends Command{","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" private int qnIndex;","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" private Question.QnDifficulty qnDifficulty \u003d Question.QnDifficulty.DEFAULT;","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new command to mark the difficulty of a question of specified index","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" * @param userInput User input from CLI.","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" public CommandMarkDifficulty(String userInput){","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" super(CommandType.MARKDIFFICULTY);","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" String[] commandDetails \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" qnIndex \u003d Integer.parseInt(commandDetails[1].strip());","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" if(qnIndex \u003c 0){","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" throw new QuizHubExceptions(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" } catch (NumberFormatException incompleteCommand) {","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(Parser.INVALID_INTEGER_INDEX);","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate index of question to be marked :\u003c\");","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as markdiff [question number] [question difficulty]!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" } catch (QuizHubExceptions invalidIndex){","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(invalidIndex.getMessage());","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" qnDifficulty \u003d Parser.extractQuestionDifficulty(commandDetails[2].strip());","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" if(qnDifficulty \u003d\u003d Question.QnDifficulty.DEFAULT){","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" No changes made to original question difficulty!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate difficulty to be assigned the question :\u003c\");","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" assert qnDifficulty !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" if(qnDifficulty !\u003d Question.QnDifficulty.DEFAULT) {","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" questions.markQuestionDifficulty(qnIndex, qnDifficulty, true);","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" dataStorage.updateData(questions);","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"spinoandraptos":58}},{"path":"src/main/java/quizhub/command/CommandShortAnswer.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"lisizhuang-0121"},"content":" * Represents a command to add a quiz question.","lastModifiedDate":"2023-10-05"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"James-Hong-Jey"},"content":"public class CommandShortAnswer extends Command {","lastModifiedDate":"2023-10-08"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"James-Hong-Jey"},"content":" private final String userInput;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":14,"author":{"gitId":"James-Hong-Jey"},"content":" * Creates a new question command to add a SHORTANSWER question","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":16,"author":{"gitId":"James-Hong-Jey"},"content":" * @param userInput User input containing details of the SHORTANSWER question","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":18,"author":{"gitId":"James-Hong-Jey"},"content":" public CommandShortAnswer(String userInput){","lastModifiedDate":"2023-10-08"},{"lineNumber":19,"author":{"gitId":"lisizhuang-0121"},"content":" super(CommandType.ADD);","lastModifiedDate":"2023-10-05"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" this.userInput \u003d userInput;","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"James-Hong-Jey"},"content":" * Get userInput item (still in the short Question / Answer format)","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"James-Hong-Jey"},"content":" * @return String userInput","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"James-Hong-Jey"},"content":" public String getUserInput() {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"James-Hong-Jey"},"content":" return userInput;","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":32,"author":{"gitId":"James-Hong-Jey"},"content":" * Adds the SHORTANSWER question and updates storage data.","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-04"},{"lineNumber":35,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-08"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage Hard disk storage for storing task data.","lastModifiedDate":"2023-10-04"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-04"},{"lineNumber":39,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions){","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" questions.addToQuestionList(userInput, Question.QnType.SHORTANSWER, true);","lastModifiedDate":"2023-10-21"},{"lineNumber":41,"author":{"gitId":"James-Hong-Jey"},"content":" dataStorage.updateData(questions);","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":19,"James-Hong-Jey":20,"lisizhuang-0121":5}},{"path":"src/main/java/quizhub/command/CommandShuffle.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"James-Hong-Jey"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-21"},{"lineNumber":2,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":3,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"James-Hong-Jey"},"content":"public class CommandShuffle extends Command {","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" public CommandShuffle() {","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" super(CommandType.SHUFFLE);","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"James-Hong-Jey"},"content":" @Override","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"James-Hong-Jey"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"James-Hong-Jey"},"content":" questions.shuffleQuestions();","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"James-Hong-Jey"},"content":"}","lastModifiedDate":"2023-10-21"}],"authorContributionMap":{"spinoandraptos":3,"James-Hong-Jey":12}},{"path":"src/main/java/quizhub/command/CommandStart.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":7,"author":{"gitId":"yeo-menghan"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"yeo-menghan"},"content":" * Command to Start the Quiz","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":"public class CommandStart extends Command{","lastModifiedDate":"2023-10-05"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" private String startMode;","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" private String startDetails \u003d \"\";","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new start command","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" * @param userInput User input from CLI.","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" public CommandStart(String userInput) {","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"lisizhuang-0121"},"content":" super(CommandType.START);","lastModifiedDate":"2023-10-05"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" String[] commandDetails \u003d userInput.split(\"/\");","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" startMode \u003d commandDetails[1].split(\" \")[0].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate mode of the quiz :\u003c\");","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as start /[quiz mode] [start details]!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" if(!startMode.equalsIgnoreCase(\"all\")){","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" startDetails \u003d commandDetails[1].split(\" \")[1].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate start details :\u003c\");","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as start /[quiz mode] [start details]!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":37,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"},{"lineNumber":38,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":39,"author":{"gitId":"yeo-menghan"},"content":" * Loop through the array list of questions \u0026 allow the user to answer them.","lastModifiedDate":"2023-10-09"},{"lineNumber":40,"author":{"gitId":"yeo-menghan"},"content":" * If the input given matches EXACTLY (v1.0), then the answer is correct","lastModifiedDate":"2023-10-09"},{"lineNumber":41,"author":{"gitId":"yeo-menghan"},"content":" * returns \"Correct\" or \"Wrong\"","lastModifiedDate":"2023-10-09"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" * @param ui User interface for interactions with user through CLI.","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" * @param questions Current question list in the program.","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage Hard disk storage for storing question data.","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-21"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" public void executeCommand(Ui ui, Storage dataStorage, QuestionList questions) {","lastModifiedDate":"2023-10-21"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" assert questions !\u003d null \u0026\u0026 ui !\u003d null \u0026\u0026 dataStorage !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" if(startMode !\u003d null) {","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" switch (startMode.toLowerCase()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" case \"module\":","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" assert startDetails !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" questions.startQuiz(ui, questions.categoriseListByModule(startDetails));","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" case \"all\":","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" questions.startQuiz(ui, questions.getAllQns());","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please enter valid quiz mode :\u003c\");","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":65,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"spinoandraptos":45,"James-Hong-Jey":1,"yeo-menghan":8,"lisizhuang-0121":11}},{"path":"src/main/java/quizhub/exception/QuizHubExceptions.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.exception;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"lisizhuang-0121"},"content":"/**","lastModifiedDate":"2023-10-05"},{"lineNumber":3,"author":{"gitId":"lisizhuang-0121"},"content":" * Represents non-standard exceptions thrown by this program specifically.","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-05"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"public class QuizHubExceptions extends Exception{","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"lisizhuang-0121"},"content":" public QuizHubExceptions(String message) {","lastModifiedDate":"2023-10-05"},{"lineNumber":7,"author":{"gitId":"lisizhuang-0121"},"content":" super(message);","lastModifiedDate":"2023-10-05"},{"lineNumber":8,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-05"},{"lineNumber":9,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-05"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-05"}],"authorContributionMap":{"lisizhuang-0121":10}},{"path":"src/main/java/quizhub/logger/CustomLogger.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"yeo-menghan"},"content":"package quizhub.logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"yeo-menghan"},"content":"import java.util.logging.Level;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"yeo-menghan"},"content":"import java.util.logging.Logger;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"yeo-menghan"},"content":"public class CustomLogger {","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"yeo-menghan"},"content":" private static final Logger logger \u003d Logger.getLogger(CustomLogger.class.getName());","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"yeo-menghan"},"content":" // Log a message at the INFO level","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"yeo-menghan"},"content":" public static void info(String message) {","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"yeo-menghan"},"content":" logger.log(Level.INFO, message);","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"yeo-menghan"},"content":" // Log a message at the WARNING level","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"yeo-menghan"},"content":" public static void warning(String message) {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"yeo-menghan"},"content":" logger.log(Level.WARNING, message);","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"yeo-menghan"},"content":" // Log an error message at the SEVERE level","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"yeo-menghan"},"content":" public static void error(String message) {","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"yeo-menghan"},"content":" logger.log(Level.SEVERE, message);","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"James-Hong-Jey"},"content":" // Log an error message in greater detail","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"James-Hong-Jey"},"content":" public static void fineError(String message) {","lastModifiedDate":"2023-10-21"},{"lineNumber":26,"author":{"gitId":"James-Hong-Jey"},"content":" logger.log(Level.FINE, message);","lastModifiedDate":"2023-10-21"},{"lineNumber":27,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":28,"author":{"gitId":"yeo-menghan"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"yeo-menghan":23,"James-Hong-Jey":5}},{"path":"src/main/java/quizhub/parser/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.parser;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.command.*;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.exception.QuizHubExceptions;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" * Represents a parser that converts user inputs into command objects.","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"public class Parser {","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" public static final String INVALID_COMMAND_FEEDBACK \u003d \"Here are the list of commands you can use:\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" \" 1. help - shows the list of commands you can use\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" \" 2. short [question]/[answer] - adds a short answer question and its answer to the list,\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" \" 3. list - shows the list of questions and answers,\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" \" 4. delete [question number] - deletes the question and answer at the specified number,\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" \" 5. find /[description] - displays all questions that contains the the specified description,\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" \" 6. edit [question number] /description [description] - edits the description of the question \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" \"with the specified number,\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" \" 7. edit [question number] /answer [answer] - edits the answer to the question with \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" \"the specified number,\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" \" 8. start - starts the quiz,\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" \" 9. shuffle - shuffle quiz questions to a random order,\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" \" 10. markdiff [question number] [question difficulty] - sets the difficulty of question \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" \"with the specified number,\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" \" 11. bye - exits the program\";","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"lisizhuang-0121"},"content":" public static final String INVALID_INTEGER_INDEX \u003d \" Please enter valid integer index!\";","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"lisizhuang-0121"},"content":" * Analyses and extracts relevant information from user input","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"lisizhuang-0121"},"content":" * to create a new Command object of the right type.","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-12"},{"lineNumber":43,"author":{"gitId":"lisizhuang-0121"},"content":" * @param userInput The full user CLI input.","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"lisizhuang-0121"},"content":" public Command parseCommand(String userInput) {","lastModifiedDate":"2023-10-12"},{"lineNumber":46,"author":{"gitId":"lisizhuang-0121"},"content":" String[] commandTokens \u003d userInput.split(\" \");","lastModifiedDate":"2023-10-12"},{"lineNumber":47,"author":{"gitId":"lisizhuang-0121"},"content":" if (commandTokens.length \u003d\u003d 0) {","lastModifiedDate":"2023-10-12"},{"lineNumber":48,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandInvalid(INVALID_COMMAND_FEEDBACK);","lastModifiedDate":"2023-10-12"},{"lineNumber":49,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"lisizhuang-0121"},"content":" String commandTitle \u003d commandTokens[0];","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-04"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" switch (commandTitle) {","lastModifiedDate":"2023-10-04"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" case \"bye\":","lastModifiedDate":"2023-10-04"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" return new CommandExit();","lastModifiedDate":"2023-10-04"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" case \"list\":","lastModifiedDate":"2023-10-04"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" return new CommandList();","lastModifiedDate":"2023-10-04"},{"lineNumber":58,"author":{"gitId":"James-Hong-Jey"},"content":" case \"short\":","lastModifiedDate":"2023-10-08"},{"lineNumber":59,"author":{"gitId":"James-Hong-Jey"},"content":" return new CommandShortAnswer(userInput);","lastModifiedDate":"2023-10-08"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" case \"start\":","lastModifiedDate":"2023-10-08"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" return new CommandStart(userInput);","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" case \"edit\":","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" return new CommandEdit(userInput);","lastModifiedDate":"2023-10-08"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":" case \"delete\":","lastModifiedDate":"2023-10-04"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" return new CommandDelete(userInput);","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" case \"find\":","lastModifiedDate":"2023-10-04"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" return new CommandFind(userInput);","lastModifiedDate":"2023-10-04"},{"lineNumber":68,"author":{"gitId":"James-Hong-Jey"},"content":" case \"shuffle\":","lastModifiedDate":"2023-10-21"},{"lineNumber":69,"author":{"gitId":"James-Hong-Jey"},"content":" return new CommandShuffle();","lastModifiedDate":"2023-10-21"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" case \"markdiff\":","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":" return new CommandMarkDifficulty(userInput);","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" case \"help\":","lastModifiedDate":"2023-10-08"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" return new CommandHelp();","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-04"},{"lineNumber":75,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandInvalid(INVALID_COMMAND_FEEDBACK);","lastModifiedDate":"2023-10-12"},{"lineNumber":76,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":" catch (NumberFormatException | ArrayIndexOutOfBoundsException invalidIndex) {","lastModifiedDate":"2023-10-04"},{"lineNumber":79,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandInvalid(INVALID_INTEGER_INDEX);","lastModifiedDate":"2023-10-12"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":81,"author":{"gitId":"lisizhuang-0121"},"content":" catch (Exception error) {","lastModifiedDate":"2023-10-12"},{"lineNumber":82,"author":{"gitId":"lisizhuang-0121"},"content":" return new CommandInvalid(INVALID_COMMAND_FEEDBACK);","lastModifiedDate":"2023-10-12"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" * Extracts relevant information after a specified keyword","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" * from CLI user input.","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":" * @param userInput The full user CLI input.","lastModifiedDate":"2023-10-22"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" * @param keyWord The keyword used to partition the user input.","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":" public static String getContentAfterKeyword(String userInput, String keyWord) throws ArrayIndexOutOfBoundsException {","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":" String content;","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":" content \u003d userInput.split(keyWord)[1].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" if (content.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" throw new ArrayIndexOutOfBoundsException();","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":" return content;","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" * Extracts difficulty from user command to assign to a question.","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" * Default invalid difficulty is assigned if invalid difficulty given.","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" * @param difficulty The difficulty level defined by user in CLI.","lastModifiedDate":"2023-10-22"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":106,"author":{"gitId":"spinoandraptos"},"content":" public static Question.QnDifficulty extractQuestionDifficulty(String difficulty){","lastModifiedDate":"2023-10-22"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":" Question.QnDifficulty qnDifficulty \u003d Question.QnDifficulty.DEFAULT;","lastModifiedDate":"2023-10-22"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":109,"author":{"gitId":"spinoandraptos"},"content":" switch (difficulty.toLowerCase()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":110,"author":{"gitId":"spinoandraptos"},"content":" case \"easy\":","lastModifiedDate":"2023-10-22"},{"lineNumber":111,"author":{"gitId":"spinoandraptos"},"content":" qnDifficulty \u003d Question.QnDifficulty.EASY;","lastModifiedDate":"2023-10-22"},{"lineNumber":112,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":113,"author":{"gitId":"spinoandraptos"},"content":" case \"hard\":","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"spinoandraptos"},"content":" qnDifficulty \u003d Question.QnDifficulty.HARD;","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":116,"author":{"gitId":"spinoandraptos"},"content":" case \"normal\":","lastModifiedDate":"2023-10-22"},{"lineNumber":117,"author":{"gitId":"spinoandraptos"},"content":" qnDifficulty \u003d Question.QnDifficulty.NORMAL;","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"spinoandraptos"},"content":" throw new QuizHubExceptions(\" Ono! We only support easy, normal and hard difficulty levels\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":121,"author":{"gitId":"spinoandraptos"},"content":" System.lineSeparator() +","lastModifiedDate":"2023-10-22"},{"lineNumber":122,"author":{"gitId":"spinoandraptos"},"content":" \" Please only use \u0027easy\u0027, \u0027normal\u0027 or \u0027hard\u0027 for difficulty levels!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":123,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":124,"author":{"gitId":"spinoandraptos"},"content":" } catch (QuizHubExceptions incorrectDifficulty){","lastModifiedDate":"2023-10-22"},{"lineNumber":125,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(incorrectDifficulty.getMessage());","lastModifiedDate":"2023-10-22"},{"lineNumber":126,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":127,"author":{"gitId":"spinoandraptos"},"content":" return qnDifficulty;","lastModifiedDate":"2023-10-22"},{"lineNumber":128,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":129,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":130,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":105,"James-Hong-Jey":4,"lisizhuang-0121":21}},{"path":"src/main/java/quizhub/question/Question.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.question;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":" * Represents all questions in the question list in general.","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"public class Question {","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":" public enum QnType {SHORTANSWER, DEFAULT};","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":" public enum QnDifficulty {EASY, HARD, NORMAL, DEFAULT};","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" private QnType qnType;","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" private QnDifficulty qnDifficulty;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" private String description;","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" private boolean done;","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"StevenGX12"},"content":" private String module;","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new question with a blank description,","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" * not done status, default question type and normal difficulty..","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":18,"author":{"gitId":"lisizhuang-0121"},"content":" public Question(){","lastModifiedDate":"2023-10-05"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" description \u003d \"\";","lastModifiedDate":"2023-10-04"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" done \u003d false;","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" qnType \u003d QnType.DEFAULT;","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"StevenGX12"},"content":" module \u003d \"\";","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" qnDifficulty \u003d QnDifficulty.NORMAL;","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new question with a given description,","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" * not done status, default task type and normal difficulty.","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" * @param questionBody Description given to the question.","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":31,"author":{"gitId":"James-Hong-Jey"},"content":" public Question(String questionBody){","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"James-Hong-Jey"},"content":" this.description \u003d questionBody;","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" done \u003d false;","lastModifiedDate":"2023-10-04"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" qnType \u003d QnType.DEFAULT;","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"StevenGX12"},"content":" module \u003d \"\";","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" qnDifficulty \u003d QnDifficulty.NORMAL;","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new question with a given description,","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" * not done status, given question type and normal difficulty.","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" * @param questionBody Description given to the question.","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" * @param qnType Type given to the question.","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" public Question(String questionBody, QnType qnType){","lastModifiedDate":"2023-10-21"},{"lineNumber":46,"author":{"gitId":"James-Hong-Jey"},"content":" this.description \u003d questionBody;","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" done \u003d false;","lastModifiedDate":"2023-10-04"},{"lineNumber":48,"author":{"gitId":"James-Hong-Jey"},"content":" this.qnType \u003d qnType;","lastModifiedDate":"2023-10-08"},{"lineNumber":49,"author":{"gitId":"StevenGX12"},"content":" module \u003d \"\";","lastModifiedDate":"2023-10-21"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" qnDifficulty \u003d QnDifficulty.NORMAL;","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":52,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":53,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":54,"author":{"gitId":"StevenGX12"},"content":" * Creates a new question with a given description,","lastModifiedDate":"2023-10-21"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" * not done status, given question type, and given module and normal difficulty.","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"StevenGX12"},"content":" *","lastModifiedDate":"2023-10-21"},{"lineNumber":57,"author":{"gitId":"StevenGX12"},"content":" * @param questionBody Description given to the question.","lastModifiedDate":"2023-10-21"},{"lineNumber":58,"author":{"gitId":"StevenGX12"},"content":" * @param qnType Type given to the question.","lastModifiedDate":"2023-10-21"},{"lineNumber":59,"author":{"gitId":"StevenGX12"},"content":" * @param module Module given to the question.","lastModifiedDate":"2023-10-21"},{"lineNumber":60,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" public Question(String questionBody, QnType qnType, String module){","lastModifiedDate":"2023-10-21"},{"lineNumber":62,"author":{"gitId":"StevenGX12"},"content":" this.description \u003d questionBody;","lastModifiedDate":"2023-10-21"},{"lineNumber":63,"author":{"gitId":"StevenGX12"},"content":" done \u003d false;","lastModifiedDate":"2023-10-21"},{"lineNumber":64,"author":{"gitId":"StevenGX12"},"content":" this.qnType \u003d qnType;","lastModifiedDate":"2023-10-21"},{"lineNumber":65,"author":{"gitId":"StevenGX12"},"content":" this.module \u003d module;","lastModifiedDate":"2023-10-21"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" qnDifficulty \u003d QnDifficulty.NORMAL;","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new question with a given description,","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":" * not done status. given question type, given module,","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" * and given difficulty.","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" * @param questionBody Description given to the question.","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"spinoandraptos"},"content":" * @param qnType Type given to the question.","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"spinoandraptos"},"content":" * @param module Module given to the question.","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":" * @param qnDifficulty Difficulty level assigned to the question.","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":79,"author":{"gitId":"spinoandraptos"},"content":" public Question(String questionBody, QnType qnType, String module, QnDifficulty qnDifficulty){","lastModifiedDate":"2023-10-22"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" this.description \u003d questionBody;","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":" done \u003d false;","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":" this.qnType \u003d qnType;","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":" this.module \u003d module;","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" this.qnDifficulty \u003d qnDifficulty;","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":86,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" * Mark a question as done.","lastModifiedDate":"2023-10-21"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" public void markAsDone(){","lastModifiedDate":"2023-10-21"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" done \u003d true;","lastModifiedDate":"2023-10-21"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":" * Mark a question as not done.","lastModifiedDate":"2023-10-21"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" public void markAsNotDone(){","lastModifiedDate":"2023-10-21"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":" done \u003d false;","lastModifiedDate":"2023-10-21"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" * Checks if a question has been done.","lastModifiedDate":"2023-10-08"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":103,"author":{"gitId":"James-Hong-Jey"},"content":" public boolean questionIsDone(){","lastModifiedDate":"2023-10-08"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" return done;","lastModifiedDate":"2023-10-04"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":106,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":" * Returns question description.","lastModifiedDate":"2023-10-08"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":109,"author":{"gitId":"James-Hong-Jey"},"content":" public String getQuestionDescription(){","lastModifiedDate":"2023-10-08"},{"lineNumber":110,"author":{"gitId":"spinoandraptos"},"content":" return description;","lastModifiedDate":"2023-10-04"},{"lineNumber":111,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":112,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":113,"author":{"gitId":"spinoandraptos"},"content":" * Returns question timing details.","lastModifiedDate":"2023-10-08"},{"lineNumber":114,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":115,"author":{"gitId":"James-Hong-Jey"},"content":" public String getQuestionTiming(boolean useDefaultTiming){","lastModifiedDate":"2023-10-08"},{"lineNumber":116,"author":{"gitId":"spinoandraptos"},"content":" return \"\";","lastModifiedDate":"2023-10-04"},{"lineNumber":117,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":118,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":119,"author":{"gitId":"spinoandraptos"},"content":" * Returns task type.","lastModifiedDate":"2023-10-04"},{"lineNumber":120,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":121,"author":{"gitId":"spinoandraptos"},"content":" public QnType getQuestionType(){","lastModifiedDate":"2023-10-21"},{"lineNumber":122,"author":{"gitId":"James-Hong-Jey"},"content":" return qnType;","lastModifiedDate":"2023-10-08"},{"lineNumber":123,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":124,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":125,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":126,"author":{"gitId":"StevenGX12"},"content":" * Returns module.","lastModifiedDate":"2023-10-21"},{"lineNumber":127,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":128,"author":{"gitId":"StevenGX12"},"content":" public String getModule(){","lastModifiedDate":"2023-10-21"},{"lineNumber":129,"author":{"gitId":"StevenGX12"},"content":" return module;","lastModifiedDate":"2023-10-21"},{"lineNumber":130,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":131,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":132,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":133,"author":{"gitId":"StevenGX12"},"content":" * Returns question details in a string.","lastModifiedDate":"2023-10-21"},{"lineNumber":134,"author":{"gitId":"StevenGX12"},"content":" * @param newDescription New description of the question.","lastModifiedDate":"2023-10-21"},{"lineNumber":135,"author":{"gitId":"StevenGX12"},"content":" * @param newAnswer New answer of the question.","lastModifiedDate":"2023-10-21"},{"lineNumber":136,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":137,"author":{"gitId":"spinoandraptos"},"content":" public void editQuestion(String newDescription, String newAnswer){","lastModifiedDate":"2023-10-08"},{"lineNumber":138,"author":{"gitId":"lisizhuang-0121"},"content":" if(null !\u003d newDescription){","lastModifiedDate":"2023-10-18"},{"lineNumber":139,"author":{"gitId":"spinoandraptos"},"content":" this.description \u003d newDescription;","lastModifiedDate":"2023-10-08"},{"lineNumber":140,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":141,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":142,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":143,"author":{"gitId":"spinoandraptos"},"content":" * Returns question details in a string.","lastModifiedDate":"2023-10-22"},{"lineNumber":144,"author":{"gitId":"spinoandraptos"},"content":" * @param qnDifficulty New difficulty level of the question.","lastModifiedDate":"2023-10-22"},{"lineNumber":145,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":146,"author":{"gitId":"spinoandraptos"},"content":" public void markDifficulty (QnDifficulty qnDifficulty) {","lastModifiedDate":"2023-10-22"},{"lineNumber":147,"author":{"gitId":"spinoandraptos"},"content":" this.qnDifficulty \u003d qnDifficulty;","lastModifiedDate":"2023-10-22"},{"lineNumber":148,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":149,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":150,"author":{"gitId":"spinoandraptos"},"content":" * Returns question difficulty.","lastModifiedDate":"2023-10-22"},{"lineNumber":151,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":152,"author":{"gitId":"spinoandraptos"},"content":" public QnDifficulty getDifficulty(){","lastModifiedDate":"2023-10-22"},{"lineNumber":153,"author":{"gitId":"spinoandraptos"},"content":" return qnDifficulty;","lastModifiedDate":"2023-10-22"},{"lineNumber":154,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":155,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":111,"StevenGX12":32,"James-Hong-Jey":8,"lisizhuang-0121":4}},{"path":"src/main/java/quizhub/question/ShortAnsQn.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.question;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":" * Represents Short Answer Questions. This means answers are a simple string.","lastModifiedDate":"2023-10-08"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"public class ShortAnsQn extends Question {","lastModifiedDate":"2023-10-05"},{"lineNumber":6,"author":{"gitId":"James-Hong-Jey"},"content":" private String answer;","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new question of type SHORTANSWER with specified module.","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" * @param description Question description.","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" * @param answer Question answer.","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":" * @param module Question module.","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":14,"author":{"gitId":"StevenGX12"},"content":" public ShortAnsQn(String description, String answer, String module){","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" super(description, QnType.SHORTANSWER, module);","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"James-Hong-Jey"},"content":" this.answer \u003d answer;","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new question of type SHORTANSWER with specified module.","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" * @param description Question description.","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" * @param answer Question answer.","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" * @param module Question module.","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" * @param qnDifficulty Question difficulty.","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" public ShortAnsQn(String description, String answer, String module, QnDifficulty qnDifficulty){","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" super(description, QnType.SHORTANSWER, module, qnDifficulty);","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" this.answer \u003d answer;","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" * Returns question answer.","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"James-Hong-Jey"},"content":" public String getQuestionAnswer() {","lastModifiedDate":"2023-10-08"},{"lineNumber":34,"author":{"gitId":"James-Hong-Jey"},"content":" return this.answer;","lastModifiedDate":"2023-10-08"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" public void editQuestion(String newDescription, String newAnswer) {","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" super.editQuestion(newDescription, newAnswer);","lastModifiedDate":"2023-10-08"},{"lineNumber":40,"author":{"gitId":"lisizhuang-0121"},"content":" if(null !\u003d newAnswer){","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" this.answer \u003d newAnswer;","lastModifiedDate":"2023-10-08"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" * Returns question-answer pair, separated by a vertical bar.","lastModifiedDate":"2023-10-08"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" @Override","lastModifiedDate":"2023-10-08"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" public String getQuestionDescription() {","lastModifiedDate":"2023-10-08"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" return super.getQuestionDescription().strip() + \" / \" + this.answer.strip() + \" | \" + super.getModule()","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" + \" | \" + super.getDifficulty().toString();","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":43,"StevenGX12":1,"James-Hong-Jey":5,"lisizhuang-0121":3}},{"path":"src/main/java/quizhub/questionlist/QuestionList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"James-Hong-Jey"},"content":"package quizhub.questionlist;","lastModifiedDate":"2023-10-08"},{"lineNumber":2,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.question.ShortAnsQn;","lastModifiedDate":"2023-10-08"},{"lineNumber":6,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.exception.QuizHubExceptions;","lastModifiedDate":"2023-10-08"},{"lineNumber":7,"author":{"gitId":"yeo-menghan"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":9,"author":{"gitId":"James-Hong-Jey"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-08"},{"lineNumber":10,"author":{"gitId":"James-Hong-Jey"},"content":"import java.util.Collections;","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"StevenGX12"},"content":"import java.util.InputMismatchException;","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"James-Hong-Jey"},"content":"/**","lastModifiedDate":"2023-10-08"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" * Represents the list of questions currently registered in Quizhub.","lastModifiedDate":"2023-10-08"},{"lineNumber":14,"author":{"gitId":"James-Hong-Jey"},"content":" * This list is created on program start and disposed on program termination.","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"James-Hong-Jey"},"content":"public class QuestionList {","lastModifiedDate":"2023-10-08"},{"lineNumber":17,"author":{"gitId":"James-Hong-Jey"},"content":" private ArrayList\u003cQuestion\u003e allQns; //array of inputs","lastModifiedDate":"2023-10-08"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" * Creates a new empty question list.","lastModifiedDate":"2023-10-21"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" public QuestionList(){","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" allQns \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":25,"author":{"gitId":"James-Hong-Jey"},"content":" * Adds a user-requested question to the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":26,"author":{"gitId":"James-Hong-Jey"},"content":" * Depending on the type of question to add to the list,","lastModifiedDate":"2023-10-08"},{"lineNumber":27,"author":{"gitId":"James-Hong-Jey"},"content":" * the program extracts the relevant information from","lastModifiedDate":"2023-10-08"},{"lineNumber":28,"author":{"gitId":"James-Hong-Jey"},"content":" * the user input and builds a Question object to be added.","lastModifiedDate":"2023-10-08"},{"lineNumber":29,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":30,"author":{"gitId":"James-Hong-Jey"},"content":" * @param input The full user input from CLI.","lastModifiedDate":"2023-10-08"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" * @param qnType The type of question to be added (SHORTANSWER).","lastModifiedDate":"2023-10-08"},{"lineNumber":32,"author":{"gitId":"James-Hong-Jey"},"content":" * @param showMessage If true, program will print response message on CLI after question is added.","lastModifiedDate":"2023-10-08"},{"lineNumber":33,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" public void addToQuestionList(String input, Question.QnType qnType, boolean showMessage){","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"James-Hong-Jey"},"content":" switch (qnType) {","lastModifiedDate":"2023-10-08"},{"lineNumber":36,"author":{"gitId":"James-Hong-Jey"},"content":" case SHORTANSWER:","lastModifiedDate":"2023-10-08"},{"lineNumber":37,"author":{"gitId":"James-Hong-Jey"},"content":" try {","lastModifiedDate":"2023-10-08"},{"lineNumber":38,"author":{"gitId":"James-Hong-Jey"},"content":" String[] inputTokens \u003d input.split(\"short\")[1].strip().split(\"/\");","lastModifiedDate":"2023-10-08"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" assert inputTokens.length \u003d\u003d 4;","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" String description \u003d inputTokens[0].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" String answer \u003d inputTokens[1].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" String module \u003d inputTokens[2].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" String difficulty \u003d inputTokens[3].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" if (description.isEmpty() || answer.isEmpty() || module.isEmpty() || difficulty.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"James-Hong-Jey"},"content":" throw new QuizHubExceptions(\"Incomplete Command\");","lastModifiedDate":"2023-10-08"},{"lineNumber":46,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" Question.QnDifficulty qnDifficulty \u003d Parser.extractQuestionDifficulty(difficulty);","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" if(qnDifficulty \u003d\u003d Question.QnDifficulty.DEFAULT){","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Question created using default normal difficulty\"","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" + System.lineSeparator());","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"StevenGX12"},"content":" allQns.add(new ShortAnsQn(description, answer, module));","lastModifiedDate":"2023-10-21"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" allQns.add(new ShortAnsQn(description, answer, module, qnDifficulty));","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"James-Hong-Jey"},"content":" if (showMessage) {","lastModifiedDate":"2023-10-08"},{"lineNumber":56,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" I have added the following question OwO:\");","lastModifiedDate":"2023-10-08"},{"lineNumber":57,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" [S] %s\\n\", viewQuestionByIndex(getQuestionListSize()));","lastModifiedDate":"2023-10-08"},{"lineNumber":58,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Now you have \" + getQuestionListSize() + \" questions in the list! UWU\");","lastModifiedDate":"2023-10-08"},{"lineNumber":59,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":60,"author":{"gitId":"James-Hong-Jey"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":61,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (ArrayIndexOutOfBoundsException | QuizHubExceptions incompleteCommand) {","lastModifiedDate":"2023-10-08"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not input a proper question!\");","lastModifiedDate":"2023-10-08"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as short [question]/[answer]/[module]/[difficulty]!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-21"},{"lineNumber":65,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-21"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-21"},{"lineNumber":68,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":69,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":70,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":71,"author":{"gitId":"James-Hong-Jey"},"content":" * Prints the details of a question in CLI.","lastModifiedDate":"2023-10-08"},{"lineNumber":72,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":73,"author":{"gitId":"James-Hong-Jey"},"content":" * @param question The question in which details are to be printed.","lastModifiedDate":"2023-10-08"},{"lineNumber":74,"author":{"gitId":"James-Hong-Jey"},"content":" * @param asList If true, prints out the index of the question in the question list","lastModifiedDate":"2023-10-08"},{"lineNumber":75,"author":{"gitId":"James-Hong-Jey"},"content":" * in addition to the details of the question.","lastModifiedDate":"2023-10-08"},{"lineNumber":76,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":77,"author":{"gitId":"James-Hong-Jey"},"content":" public void printQuestion(Question question, boolean asList){","lastModifiedDate":"2023-10-08"},{"lineNumber":78,"author":{"gitId":"James-Hong-Jey"},"content":" int qnIndex \u003d allQns.indexOf(question);","lastModifiedDate":"2023-10-08"},{"lineNumber":79,"author":{"gitId":"James-Hong-Jey"},"content":" switch(question.getQuestionType()) {","lastModifiedDate":"2023-10-08"},{"lineNumber":80,"author":{"gitId":"James-Hong-Jey"},"content":" case SHORTANSWER:","lastModifiedDate":"2023-10-08"},{"lineNumber":81,"author":{"gitId":"James-Hong-Jey"},"content":" if (question.questionIsDone()) {","lastModifiedDate":"2023-10-08"},{"lineNumber":82,"author":{"gitId":"James-Hong-Jey"},"content":" if (asList) {","lastModifiedDate":"2023-10-08"},{"lineNumber":83,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" %d: [S][X] %s\\n\", qnIndex + 1, question.getQuestionDescription());","lastModifiedDate":"2023-10-08"},{"lineNumber":84,"author":{"gitId":"James-Hong-Jey"},"content":" } else {","lastModifiedDate":"2023-10-08"},{"lineNumber":85,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" [S][X] %s\\n\", question.getQuestionDescription());","lastModifiedDate":"2023-10-08"},{"lineNumber":86,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":87,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":88,"author":{"gitId":"James-Hong-Jey"},"content":" } else {","lastModifiedDate":"2023-10-08"},{"lineNumber":89,"author":{"gitId":"James-Hong-Jey"},"content":" if (asList) {","lastModifiedDate":"2023-10-08"},{"lineNumber":90,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" %d: [S][] %s\\n\", qnIndex + 1, question.getQuestionDescription());","lastModifiedDate":"2023-10-08"},{"lineNumber":91,"author":{"gitId":"James-Hong-Jey"},"content":" } else {","lastModifiedDate":"2023-10-08"},{"lineNumber":92,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.printf(\" [S][] %s\\n\", question.getQuestionDescription());","lastModifiedDate":"2023-10-08"},{"lineNumber":93,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":94,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":95,"author":{"gitId":"James-Hong-Jey"},"content":" break;","lastModifiedDate":"2023-10-08"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-21"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-21"},{"lineNumber":98,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":99,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":100,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":101,"author":{"gitId":"James-Hong-Jey"},"content":" * Prints all the questions in the current question list as an indexed list.","lastModifiedDate":"2023-10-08"},{"lineNumber":102,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":103,"author":{"gitId":"James-Hong-Jey"},"content":" public void printQuestionList(){","lastModifiedDate":"2023-10-08"},{"lineNumber":104,"author":{"gitId":"James-Hong-Jey"},"content":" if(allQns.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":105,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" No questions found! Time to add some OWO\");","lastModifiedDate":"2023-10-08"},{"lineNumber":106,"author":{"gitId":"lisizhuang-0121"},"content":" return;","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":108,"author":{"gitId":"James-Hong-Jey"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-08"},{"lineNumber":109,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, true);","lastModifiedDate":"2023-10-08"},{"lineNumber":110,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":111,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":112,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":113,"author":{"gitId":"James-Hong-Jey"},"content":" * Mark a question in the current question list as done.","lastModifiedDate":"2023-10-08"},{"lineNumber":114,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":115,"author":{"gitId":"James-Hong-Jey"},"content":" * @param index The list index of the question to be marked as done.","lastModifiedDate":"2023-10-08"},{"lineNumber":116,"author":{"gitId":"James-Hong-Jey"},"content":" * @param showMessage If true, program will print response message on CLI","lastModifiedDate":"2023-10-08"},{"lineNumber":117,"author":{"gitId":"James-Hong-Jey"},"content":" * after question is marked as done.","lastModifiedDate":"2023-10-08"},{"lineNumber":118,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":119,"author":{"gitId":"James-Hong-Jey"},"content":" public void markQuestionAsDone(int index, boolean showMessage){","lastModifiedDate":"2023-10-08"},{"lineNumber":120,"author":{"gitId":"James-Hong-Jey"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":121,"author":{"gitId":"James-Hong-Jey"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-08"},{"lineNumber":122,"author":{"gitId":"spinoandraptos"},"content":" if(!question.questionIsDone()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":123,"author":{"gitId":"spinoandraptos"},"content":" question.markAsDone();","lastModifiedDate":"2023-10-22"},{"lineNumber":124,"author":{"gitId":"spinoandraptos"},"content":" if (showMessage) {","lastModifiedDate":"2023-10-22"},{"lineNumber":125,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Roger that! I have marked the following question as done \u003ew\u003c !\");","lastModifiedDate":"2023-10-08"},{"lineNumber":126,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-08"},{"lineNumber":127,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":128,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":129,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Question originally done! No changes made!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":130,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":131,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-08"},{"lineNumber":132,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-08"},{"lineNumber":133,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":134,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":135,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":136,"author":{"gitId":"James-Hong-Jey"},"content":" * Mark a question in the current question list as not done.","lastModifiedDate":"2023-10-08"},{"lineNumber":137,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":138,"author":{"gitId":"James-Hong-Jey"},"content":" public void markQuestionAsNotDone(int index){","lastModifiedDate":"2023-10-08"},{"lineNumber":139,"author":{"gitId":"James-Hong-Jey"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":140,"author":{"gitId":"James-Hong-Jey"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-08"},{"lineNumber":141,"author":{"gitId":"spinoandraptos"},"content":" if(question.questionIsDone()){","lastModifiedDate":"2023-10-22"},{"lineNumber":142,"author":{"gitId":"spinoandraptos"},"content":" question.markAsNotDone();","lastModifiedDate":"2023-10-22"},{"lineNumber":143,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Roger that! I have unmarked the following question as done \u003ew\u003c !\");","lastModifiedDate":"2023-10-08"},{"lineNumber":144,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-08"},{"lineNumber":145,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":146,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Question originally not done! No changes made!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":147,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":148,"author":{"gitId":"spinoandraptos"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-22"},{"lineNumber":149,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-22"},{"lineNumber":150,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":151,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":152,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":153,"author":{"gitId":"spinoandraptos"},"content":" * Mark the difficulty of a question in the current question list.","lastModifiedDate":"2023-10-22"},{"lineNumber":154,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":155,"author":{"gitId":"spinoandraptos"},"content":" * @param index The list index of the question to be marked.","lastModifiedDate":"2023-10-22"},{"lineNumber":156,"author":{"gitId":"spinoandraptos"},"content":" * @param qnDifficulty Difficulty to be assigned to the question.","lastModifiedDate":"2023-10-22"},{"lineNumber":157,"author":{"gitId":"spinoandraptos"},"content":" * @param showMessage If true, program will print response message on CLI","lastModifiedDate":"2023-10-22"},{"lineNumber":158,"author":{"gitId":"spinoandraptos"},"content":" * after question difficulty is marked.","lastModifiedDate":"2023-10-22"},{"lineNumber":159,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":160,"author":{"gitId":"spinoandraptos"},"content":" public void markQuestionDifficulty(int index, Question.QnDifficulty qnDifficulty, boolean showMessage){","lastModifiedDate":"2023-10-22"},{"lineNumber":161,"author":{"gitId":"spinoandraptos"},"content":" String difficulty \u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":162,"author":{"gitId":"spinoandraptos"},"content":" switch (qnDifficulty){","lastModifiedDate":"2023-10-22"},{"lineNumber":163,"author":{"gitId":"spinoandraptos"},"content":" case EASY:","lastModifiedDate":"2023-10-22"},{"lineNumber":164,"author":{"gitId":"spinoandraptos"},"content":" difficulty \u003d \"easy\";","lastModifiedDate":"2023-10-22"},{"lineNumber":165,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":166,"author":{"gitId":"spinoandraptos"},"content":" case HARD:","lastModifiedDate":"2023-10-22"},{"lineNumber":167,"author":{"gitId":"spinoandraptos"},"content":" difficulty \u003d \"hard\";","lastModifiedDate":"2023-10-22"},{"lineNumber":168,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":169,"author":{"gitId":"spinoandraptos"},"content":" case NORMAL:","lastModifiedDate":"2023-10-22"},{"lineNumber":170,"author":{"gitId":"spinoandraptos"},"content":" difficulty \u003d \"normal\";","lastModifiedDate":"2023-10-22"},{"lineNumber":171,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":172,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-22"},{"lineNumber":173,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":174,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":175,"author":{"gitId":"spinoandraptos"},"content":" try{","lastModifiedDate":"2023-10-22"},{"lineNumber":176,"author":{"gitId":"spinoandraptos"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-22"},{"lineNumber":177,"author":{"gitId":"spinoandraptos"},"content":" if(question.getDifficulty() !\u003d qnDifficulty){","lastModifiedDate":"2023-10-22"},{"lineNumber":178,"author":{"gitId":"spinoandraptos"},"content":" allQns.get(index-1).markDifficulty(qnDifficulty);","lastModifiedDate":"2023-10-22"},{"lineNumber":179,"author":{"gitId":"spinoandraptos"},"content":" if(showMessage) {","lastModifiedDate":"2023-10-22"},{"lineNumber":180,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Roger that! I have marked the following question as \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":181,"author":{"gitId":"spinoandraptos"},"content":" difficulty +","lastModifiedDate":"2023-10-22"},{"lineNumber":182,"author":{"gitId":"spinoandraptos"},"content":" \" \u003ew\u003c !\");","lastModifiedDate":"2023-10-22"},{"lineNumber":183,"author":{"gitId":"spinoandraptos"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-22"},{"lineNumber":184,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":185,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":186,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Question is already set as \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":187,"author":{"gitId":"spinoandraptos"},"content":" difficulty +","lastModifiedDate":"2023-10-22"},{"lineNumber":188,"author":{"gitId":"spinoandraptos"},"content":" \" ! No changes made!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":189,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":190,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-08"},{"lineNumber":191,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-08"},{"lineNumber":192,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":193,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":194,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":195,"author":{"gitId":"James-Hong-Jey"},"content":" * Delete a question from the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":196,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":197,"author":{"gitId":"James-Hong-Jey"},"content":" * @param index The list index of the question to be deleted.","lastModifiedDate":"2023-10-08"},{"lineNumber":198,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":199,"author":{"gitId":"James-Hong-Jey"},"content":" public void deleteQuestionByIndex(int index){","lastModifiedDate":"2023-10-08"},{"lineNumber":200,"author":{"gitId":"James-Hong-Jey"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":201,"author":{"gitId":"James-Hong-Jey"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-08"},{"lineNumber":202,"author":{"gitId":"James-Hong-Jey"},"content":" allQns.remove(index - 1);","lastModifiedDate":"2023-10-08"},{"lineNumber":203,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Roger that! I have deleted the following question \u003ew\u003c !\");","lastModifiedDate":"2023-10-08"},{"lineNumber":204,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-08"},{"lineNumber":205,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Now you have \" + getQuestionListSize() + \" questions in the list! UWU\");","lastModifiedDate":"2023-10-08"},{"lineNumber":206,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-08"},{"lineNumber":207,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-08"},{"lineNumber":208,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":209,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":210,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":211,"author":{"gitId":"James-Hong-Jey"},"content":" * Returns the description and all other details of a question in one String object.","lastModifiedDate":"2023-10-08"},{"lineNumber":212,"author":{"gitId":"James-Hong-Jey"},"content":" * Used to display question details in CLI.","lastModifiedDate":"2023-10-08"},{"lineNumber":213,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":214,"author":{"gitId":"James-Hong-Jey"},"content":" * @param index The list index of the question to be viewed.","lastModifiedDate":"2023-10-08"},{"lineNumber":215,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":216,"author":{"gitId":"James-Hong-Jey"},"content":" public String viewQuestionByIndex(int index){","lastModifiedDate":"2023-10-08"},{"lineNumber":217,"author":{"gitId":"James-Hong-Jey"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":218,"author":{"gitId":"James-Hong-Jey"},"content":" switch(allQns.get(index-1).getQuestionType()) {","lastModifiedDate":"2023-10-08"},{"lineNumber":219,"author":{"gitId":"James-Hong-Jey"},"content":" case SHORTANSWER:","lastModifiedDate":"2023-10-08"},{"lineNumber":220,"author":{"gitId":"James-Hong-Jey"},"content":" return allQns.get(index-1).getQuestionDescription();","lastModifiedDate":"2023-10-08"},{"lineNumber":221,"author":{"gitId":"James-Hong-Jey"},"content":" default:","lastModifiedDate":"2023-10-08"},{"lineNumber":222,"author":{"gitId":"James-Hong-Jey"},"content":" return \"Question Not Found\";","lastModifiedDate":"2023-10-08"},{"lineNumber":223,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":224,"author":{"gitId":"StevenGX12"},"content":" } catch(InputMismatchException |NullPointerException | IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-21"},{"lineNumber":225,"author":{"gitId":"James-Hong-Jey"},"content":" return \"Question Not Found\";","lastModifiedDate":"2023-10-08"},{"lineNumber":226,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":227,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":228,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":229,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":230,"author":{"gitId":"spinoandraptos"},"content":" * Delete a question from the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":231,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":232,"author":{"gitId":"spinoandraptos"},"content":" * @param index The list index of the question to be deleted.","lastModifiedDate":"2023-10-08"},{"lineNumber":233,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":234,"author":{"gitId":"spinoandraptos"},"content":" public void editQuestionByIndex(int index, String newDescription, String newAnswer){","lastModifiedDate":"2023-10-08"},{"lineNumber":235,"author":{"gitId":"spinoandraptos"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":236,"author":{"gitId":"spinoandraptos"},"content":" Question question \u003d allQns.get(index-1);","lastModifiedDate":"2023-10-08"},{"lineNumber":237,"author":{"gitId":"spinoandraptos"},"content":" question.editQuestion(newDescription, newAnswer);","lastModifiedDate":"2023-10-08"},{"lineNumber":238,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Roger that! I have edited the following question \u003ew\u003c !\");","lastModifiedDate":"2023-10-08"},{"lineNumber":239,"author":{"gitId":"spinoandraptos"},"content":" printQuestion(question, false);","lastModifiedDate":"2023-10-08"},{"lineNumber":240,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Now you have \" + getQuestionListSize() + \" questions in the list! UWU\");","lastModifiedDate":"2023-10-08"},{"lineNumber":241,"author":{"gitId":"spinoandraptos"},"content":" } catch (IndexOutOfBoundsException invalidIndex){","lastModifiedDate":"2023-10-08"},{"lineNumber":242,"author":{"gitId":"spinoandraptos"},"content":" if(index !\u003d 0){","lastModifiedDate":"2023-10-08"},{"lineNumber":243,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! Please enter valid question number *sobs*\");","lastModifiedDate":"2023-10-08"},{"lineNumber":244,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":245,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":246,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":247,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":248,"author":{"gitId":"James-Hong-Jey"},"content":" * Search for questions in the current question list using their description.","lastModifiedDate":"2023-10-08"},{"lineNumber":249,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":250,"author":{"gitId":"James-Hong-Jey"},"content":" * @param keyword Description keyword(s) used to search for matches.","lastModifiedDate":"2023-10-08"},{"lineNumber":251,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":252,"author":{"gitId":"James-Hong-Jey"},"content":" public void searchListByDescription(String keyword){","lastModifiedDate":"2023-10-08"},{"lineNumber":253,"author":{"gitId":"James-Hong-Jey"},"content":" ArrayList\u003cQuestion\u003e matchedQuestions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-08"},{"lineNumber":254,"author":{"gitId":"James-Hong-Jey"},"content":" if(allQns.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":255,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Question list is empty! Time to add some OWO\");","lastModifiedDate":"2023-10-08"},{"lineNumber":256,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":257,"author":{"gitId":"James-Hong-Jey"},"content":" else {","lastModifiedDate":"2023-10-08"},{"lineNumber":258,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Here are questions that matched your search:\");","lastModifiedDate":"2023-10-08"},{"lineNumber":259,"author":{"gitId":"James-Hong-Jey"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-08"},{"lineNumber":260,"author":{"gitId":"StevenGX12"},"content":" if(question.getQuestionDescription().toLowerCase().contains(keyword.toLowerCase())){","lastModifiedDate":"2023-10-21"},{"lineNumber":261,"author":{"gitId":"James-Hong-Jey"},"content":" matchedQuestions.add(question);","lastModifiedDate":"2023-10-08"},{"lineNumber":262,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, true);","lastModifiedDate":"2023-10-08"},{"lineNumber":263,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":264,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":265,"author":{"gitId":"James-Hong-Jey"},"content":" if(matchedQuestions.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":266,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" No results found :\u003c Check your keyword is correct?\");","lastModifiedDate":"2023-10-08"},{"lineNumber":267,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":268,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":269,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":270,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":271,"author":{"gitId":"James-Hong-Jey"},"content":" * Search for questions in the current question list using their date and time.","lastModifiedDate":"2023-10-08"},{"lineNumber":272,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":273,"author":{"gitId":"James-Hong-Jey"},"content":" * @param dateTime Date and time used to search for matches.","lastModifiedDate":"2023-10-08"},{"lineNumber":274,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":275,"author":{"gitId":"James-Hong-Jey"},"content":" public void searchListByTime(String dateTime){","lastModifiedDate":"2023-10-08"},{"lineNumber":276,"author":{"gitId":"James-Hong-Jey"},"content":" ArrayList\u003cQuestion\u003e matchedQuestions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-08"},{"lineNumber":277,"author":{"gitId":"James-Hong-Jey"},"content":" if(allQns.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":278,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Question list is empty! Time to add some OWO\");","lastModifiedDate":"2023-10-08"},{"lineNumber":279,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":280,"author":{"gitId":"James-Hong-Jey"},"content":" else {","lastModifiedDate":"2023-10-08"},{"lineNumber":281,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Here are questions that matched your search:\");","lastModifiedDate":"2023-10-08"},{"lineNumber":282,"author":{"gitId":"James-Hong-Jey"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-08"},{"lineNumber":283,"author":{"gitId":"James-Hong-Jey"},"content":" if(question.getQuestionTiming(true).contains(dateTime)){","lastModifiedDate":"2023-10-08"},{"lineNumber":284,"author":{"gitId":"James-Hong-Jey"},"content":" matchedQuestions.add(question);","lastModifiedDate":"2023-10-08"},{"lineNumber":285,"author":{"gitId":"James-Hong-Jey"},"content":" printQuestion(question, true);","lastModifiedDate":"2023-10-08"},{"lineNumber":286,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":287,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":288,"author":{"gitId":"James-Hong-Jey"},"content":" if(matchedQuestions.isEmpty()){","lastModifiedDate":"2023-10-08"},{"lineNumber":289,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" No results found :\u003c Check your time format is in dd-MM-yyyy HH:mm?\");","lastModifiedDate":"2023-10-08"},{"lineNumber":290,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":291,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":292,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":293,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":294,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":295,"author":{"gitId":"StevenGX12"},"content":" * Search for questions in the current question list using their module.","lastModifiedDate":"2023-10-21"},{"lineNumber":296,"author":{"gitId":"StevenGX12"},"content":" *","lastModifiedDate":"2023-10-21"},{"lineNumber":297,"author":{"gitId":"StevenGX12"},"content":" * @param module Module used to search for matches.","lastModifiedDate":"2023-10-21"},{"lineNumber":298,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":299,"author":{"gitId":"StevenGX12"},"content":" public void searchListByModule(String module){","lastModifiedDate":"2023-10-21"},{"lineNumber":300,"author":{"gitId":"StevenGX12"},"content":" ArrayList\u003cQuestion\u003e matchedQuestions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-21"},{"lineNumber":301,"author":{"gitId":"StevenGX12"},"content":" if(allQns.isEmpty()){","lastModifiedDate":"2023-10-21"},{"lineNumber":302,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Question list is empty! Time to add some OWO\");","lastModifiedDate":"2023-10-21"},{"lineNumber":303,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":304,"author":{"gitId":"StevenGX12"},"content":" else {","lastModifiedDate":"2023-10-21"},{"lineNumber":305,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Here are questions that matched your search:\");","lastModifiedDate":"2023-10-21"},{"lineNumber":306,"author":{"gitId":"StevenGX12"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-21"},{"lineNumber":307,"author":{"gitId":"StevenGX12"},"content":" if(question.getModule().toLowerCase().contains(module.toLowerCase())){","lastModifiedDate":"2023-10-21"},{"lineNumber":308,"author":{"gitId":"StevenGX12"},"content":" matchedQuestions.add(question);","lastModifiedDate":"2023-10-21"},{"lineNumber":309,"author":{"gitId":"StevenGX12"},"content":" printQuestion(question, true);","lastModifiedDate":"2023-10-21"},{"lineNumber":310,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":311,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":312,"author":{"gitId":"StevenGX12"},"content":" if(matchedQuestions.isEmpty()){","lastModifiedDate":"2023-10-21"},{"lineNumber":313,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" No results found :\u003c Check your module is correct?\");","lastModifiedDate":"2023-10-21"},{"lineNumber":314,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":315,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":316,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":317,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":318,"author":{"gitId":"spinoandraptos"},"content":" * Build a new list of questions based on specified module.","lastModifiedDate":"2023-10-22"},{"lineNumber":319,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":320,"author":{"gitId":"spinoandraptos"},"content":" * @param module Module used to search for matches.","lastModifiedDate":"2023-10-22"},{"lineNumber":321,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":322,"author":{"gitId":"spinoandraptos"},"content":" public ArrayList\u003cQuestion\u003e categoriseListByModule(String module){","lastModifiedDate":"2023-10-22"},{"lineNumber":323,"author":{"gitId":"spinoandraptos"},"content":" ArrayList\u003cQuestion\u003e matchedQuestions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-22"},{"lineNumber":324,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":325,"author":{"gitId":"spinoandraptos"},"content":" if (allQns.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":326,"author":{"gitId":"spinoandraptos"},"content":" throw new QuizHubExceptions(\" Question list is empty! Time to add some OWO\");","lastModifiedDate":"2023-10-22"},{"lineNumber":327,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":328,"author":{"gitId":"spinoandraptos"},"content":" for (Question question : allQns) {","lastModifiedDate":"2023-10-22"},{"lineNumber":329,"author":{"gitId":"spinoandraptos"},"content":" if (question.getModule().toLowerCase().matches(module.toLowerCase())) {","lastModifiedDate":"2023-10-22"},{"lineNumber":330,"author":{"gitId":"spinoandraptos"},"content":" matchedQuestions.add(question);","lastModifiedDate":"2023-10-22"},{"lineNumber":331,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":332,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":333,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":334,"author":{"gitId":"spinoandraptos"},"content":" } catch (QuizHubExceptions emptyList){","lastModifiedDate":"2023-10-22"},{"lineNumber":335,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(emptyList.getMessage());","lastModifiedDate":"2023-10-22"},{"lineNumber":336,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":337,"author":{"gitId":"spinoandraptos"},"content":" return matchedQuestions;","lastModifiedDate":"2023-10-22"},{"lineNumber":338,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":339,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":340,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":341,"author":{"gitId":"James-Hong-Jey"},"content":" * Search for a question in the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":342,"author":{"gitId":"James-Hong-Jey"},"content":" * Depending on user command, this method will search by","lastModifiedDate":"2023-10-08"},{"lineNumber":343,"author":{"gitId":"spinoandraptos"},"content":" * either description matches or module matches.","lastModifiedDate":"2023-10-22"},{"lineNumber":344,"author":{"gitId":"James-Hong-Jey"},"content":" *","lastModifiedDate":"2023-10-08"},{"lineNumber":345,"author":{"gitId":"James-Hong-Jey"},"content":" * @param input Full user command input.","lastModifiedDate":"2023-10-08"},{"lineNumber":346,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":347,"author":{"gitId":"James-Hong-Jey"},"content":" public void searchList(String input){","lastModifiedDate":"2023-10-08"},{"lineNumber":348,"author":{"gitId":"spinoandraptos"},"content":" String searchCriteria;","lastModifiedDate":"2023-10-22"},{"lineNumber":349,"author":{"gitId":"spinoandraptos"},"content":" String searchKeyword;","lastModifiedDate":"2023-10-22"},{"lineNumber":350,"author":{"gitId":"James-Hong-Jey"},"content":" try {","lastModifiedDate":"2023-10-08"},{"lineNumber":351,"author":{"gitId":"spinoandraptos"},"content":" searchCriteria \u003d input.split(\"/\")[1].strip().split(\" \")[0].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":352,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-08"},{"lineNumber":353,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate if you are searching by description or module :\u003c\");","lastModifiedDate":"2023-10-22"},{"lineNumber":354,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as find /description [description] \" +","lastModifiedDate":"2023-10-08"},{"lineNumber":355,"author":{"gitId":"James-Hong-Jey"},"content":" \"or find /module [module]!\");","lastModifiedDate":"2023-10-21"},{"lineNumber":356,"author":{"gitId":"James-Hong-Jey"},"content":" return;","lastModifiedDate":"2023-10-08"},{"lineNumber":357,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":358,"author":{"gitId":"James-Hong-Jey"},"content":" try{","lastModifiedDate":"2023-10-08"},{"lineNumber":359,"author":{"gitId":"spinoandraptos"},"content":" searchKeyword \u003d input.split(\"/\" + searchCriteria)[1].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":360,"author":{"gitId":"James-Hong-Jey"},"content":" searchListByDescription(searchKeyword);","lastModifiedDate":"2023-10-08"},{"lineNumber":361,"author":{"gitId":"James-Hong-Jey"},"content":" } catch (ArrayIndexOutOfBoundsException incompleteCommand) {","lastModifiedDate":"2023-10-08"},{"lineNumber":362,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Ono! You did not indicate the keywords you are searching by :\u003c\");","lastModifiedDate":"2023-10-08"},{"lineNumber":363,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" Please format your input as find /description [description] \" +","lastModifiedDate":"2023-10-08"},{"lineNumber":364,"author":{"gitId":"spinoandraptos"},"content":" \"or find /module [module]!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":365,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":366,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-08"},{"lineNumber":367,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":368,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":369,"author":{"gitId":"James-Hong-Jey"},"content":" * Returns the size of current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":370,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":371,"author":{"gitId":"James-Hong-Jey"},"content":" public int getQuestionListSize(){","lastModifiedDate":"2023-10-08"},{"lineNumber":372,"author":{"gitId":"James-Hong-Jey"},"content":" return allQns.size();","lastModifiedDate":"2023-10-08"},{"lineNumber":373,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":374,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-08"},{"lineNumber":375,"author":{"gitId":"James-Hong-Jey"},"content":" * Returns a list of all questions in the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":376,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-08"},{"lineNumber":377,"author":{"gitId":"James-Hong-Jey"},"content":" public ArrayList\u003cQuestion\u003e getAllQns(){","lastModifiedDate":"2023-10-08"},{"lineNumber":378,"author":{"gitId":"James-Hong-Jey"},"content":" return allQns;","lastModifiedDate":"2023-10-08"},{"lineNumber":379,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-08"},{"lineNumber":380,"author":{"gitId":"James-Hong-Jey"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":381,"author":{"gitId":"James-Hong-Jey"},"content":" * Shuffles the order of questions in the deck","lastModifiedDate":"2023-10-21"},{"lineNumber":382,"author":{"gitId":"James-Hong-Jey"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":383,"author":{"gitId":"James-Hong-Jey"},"content":" public void shuffleQuestions() {","lastModifiedDate":"2023-10-21"},{"lineNumber":384,"author":{"gitId":"James-Hong-Jey"},"content":" Collections.shuffle(allQns);","lastModifiedDate":"2023-10-21"},{"lineNumber":385,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":386,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":387,"author":{"gitId":"yeo-menghan"},"content":" * Retrieves the answer for a question by its index in the question list.","lastModifiedDate":"2023-10-09"},{"lineNumber":388,"author":{"gitId":"yeo-menghan"},"content":" * @param index The index of the question in the list.","lastModifiedDate":"2023-10-09"},{"lineNumber":389,"author":{"gitId":"yeo-menghan"},"content":" * @return The answer to the question, or null if the index is invalid or the question is of a different type.","lastModifiedDate":"2023-10-09"},{"lineNumber":390,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":391,"author":{"gitId":"spinoandraptos"},"content":" public String getAnswerByIndex(int index, ArrayList\u003cQuestion\u003e questions) {","lastModifiedDate":"2023-10-22"},{"lineNumber":392,"author":{"gitId":"yeo-menghan"},"content":" try {","lastModifiedDate":"2023-10-09"},{"lineNumber":393,"author":{"gitId":"spinoandraptos"},"content":" Question question \u003d questions.get(index - 1);","lastModifiedDate":"2023-10-22"},{"lineNumber":394,"author":{"gitId":"yeo-menghan"},"content":" if (question instanceof ShortAnsQn) {","lastModifiedDate":"2023-10-09"},{"lineNumber":395,"author":{"gitId":"yeo-menghan"},"content":" return ((ShortAnsQn) question).getQuestionAnswer();","lastModifiedDate":"2023-10-09"},{"lineNumber":396,"author":{"gitId":"yeo-menghan"},"content":" } else {","lastModifiedDate":"2023-10-09"},{"lineNumber":397,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" This question is not a Short Answer question.\");","lastModifiedDate":"2023-10-09"},{"lineNumber":398,"author":{"gitId":"yeo-menghan"},"content":" return null;","lastModifiedDate":"2023-10-09"},{"lineNumber":399,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":400,"author":{"gitId":"yeo-menghan"},"content":" } catch (IndexOutOfBoundsException invalidIndex) {","lastModifiedDate":"2023-10-09"},{"lineNumber":401,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Ono! Please enter a valid question number *sobs*\");","lastModifiedDate":"2023-10-09"},{"lineNumber":402,"author":{"gitId":"yeo-menghan"},"content":" return null;","lastModifiedDate":"2023-10-09"},{"lineNumber":403,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":404,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":405,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-16"},{"lineNumber":406,"author":{"gitId":"yeo-menghan"},"content":" * Retrieves the question by its index in the question list.","lastModifiedDate":"2023-10-16"},{"lineNumber":407,"author":{"gitId":"yeo-menghan"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":408,"author":{"gitId":"yeo-menghan"},"content":" * @param index The index of the question in the list.","lastModifiedDate":"2023-10-16"},{"lineNumber":409,"author":{"gitId":"yeo-menghan"},"content":" * @return The question, or null if the index is invalid or the question is of a different type.","lastModifiedDate":"2023-10-16"},{"lineNumber":410,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-16"},{"lineNumber":411,"author":{"gitId":"yeo-menghan"},"content":" public String getQuestionTextByIndex(int index) {","lastModifiedDate":"2023-10-16"},{"lineNumber":412,"author":{"gitId":"yeo-menghan"},"content":" if (index \u003e\u003d 0 \u0026\u0026 index \u003c allQns.size()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":413,"author":{"gitId":"yeo-menghan"},"content":" Question question \u003d allQns.get(index);","lastModifiedDate":"2023-10-16"},{"lineNumber":414,"author":{"gitId":"yeo-menghan"},"content":" return question.toString(); // Use the toString() method to get the text of the question","lastModifiedDate":"2023-10-16"},{"lineNumber":415,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":416,"author":{"gitId":"yeo-menghan"},"content":" return null; // Handle invalid index","lastModifiedDate":"2023-10-16"},{"lineNumber":417,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":418,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":419,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":420,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":421,"author":{"gitId":"yeo-menghan"},"content":" * Starts a quiz session using the provided user interface (UI).","lastModifiedDate":"2023-10-09"},{"lineNumber":422,"author":{"gitId":"yeo-menghan"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":423,"author":{"gitId":"yeo-menghan"},"content":" * @param ui The user interface to interact with the user.","lastModifiedDate":"2023-10-09"},{"lineNumber":424,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":425,"author":{"gitId":"spinoandraptos"},"content":" public void startQuiz(Ui ui, ArrayList\u003cQuestion\u003e questions) {","lastModifiedDate":"2023-10-22"},{"lineNumber":426,"author":{"gitId":"spinoandraptos"},"content":" if (questions.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":427,"author":{"gitId":"yeo-menghan"},"content":" ui.displayMessage(\" No questions found! Add questions before starting the quiz.\");","lastModifiedDate":"2023-10-17"},{"lineNumber":428,"author":{"gitId":"yeo-menghan"},"content":" return;","lastModifiedDate":"2023-10-09"},{"lineNumber":429,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":430,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":431,"author":{"gitId":"yeo-menghan"},"content":" ui.displayMessage(\" Starting the quiz...\");","lastModifiedDate":"2023-10-17"},{"lineNumber":432,"author":{"gitId":"spinoandraptos"},"content":" int totalQuestions \u003d questions.size();","lastModifiedDate":"2023-10-22"},{"lineNumber":433,"author":{"gitId":"yeo-menghan"},"content":" int correctAnswers \u003d 0;","lastModifiedDate":"2023-10-09"},{"lineNumber":434,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":435,"author":{"gitId":"yeo-menghan"},"content":" for (int i \u003d 0; i \u003c totalQuestions; i++) {","lastModifiedDate":"2023-10-09"},{"lineNumber":436,"author":{"gitId":"spinoandraptos"},"content":" Question question \u003d questions.get(i);","lastModifiedDate":"2023-10-22"},{"lineNumber":437,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":438,"author":{"gitId":"yeo-menghan"},"content":" ui.displayQuestion(question, i + 1, totalQuestions);","lastModifiedDate":"2023-10-09"},{"lineNumber":439,"author":{"gitId":"spinoandraptos"},"content":" String correctAnswer \u003d getAnswerByIndex(i + 1, questions).strip(); // Get correct answer by index","lastModifiedDate":"2023-10-22"},{"lineNumber":440,"author":{"gitId":"lisizhuang-0121"},"content":" String userAnswer \u003d ui.getUserInput().strip();","lastModifiedDate":"2023-10-17"},{"lineNumber":441,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":442,"author":{"gitId":"yeo-menghan"},"content":" if (userAnswer.equalsIgnoreCase(correctAnswer)) {","lastModifiedDate":"2023-10-09"},{"lineNumber":443,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Correct!\");","lastModifiedDate":"2023-10-09"},{"lineNumber":444,"author":{"gitId":"yeo-menghan"},"content":" correctAnswers++;","lastModifiedDate":"2023-10-09"},{"lineNumber":445,"author":{"gitId":"yeo-menghan"},"content":" } else {","lastModifiedDate":"2023-10-09"},{"lineNumber":446,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Wrong!\");","lastModifiedDate":"2023-10-09"},{"lineNumber":447,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":448,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":449,"author":{"gitId":"yeo-menghan"},"content":" int questionsLeft \u003d totalQuestions - (i + 1);","lastModifiedDate":"2023-10-09"},{"lineNumber":450,"author":{"gitId":"yeo-menghan"},"content":" if (questionsLeft \u003e 0) {","lastModifiedDate":"2023-10-09"},{"lineNumber":451,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Questions left: \" + questionsLeft);","lastModifiedDate":"2023-10-09"},{"lineNumber":452,"author":{"gitId":"yeo-menghan"},"content":" } else {","lastModifiedDate":"2023-10-09"},{"lineNumber":453,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Quiz completed!\");","lastModifiedDate":"2023-10-09"},{"lineNumber":454,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":455,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":456,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Your score: \" + correctAnswers + \"/\" + totalQuestions);","lastModifiedDate":"2023-10-09"},{"lineNumber":457,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":458,"author":{"gitId":"James-Hong-Jey"},"content":"}","lastModifiedDate":"2023-10-08"}],"authorContributionMap":{"spinoandraptos":144,"StevenGX12":29,"James-Hong-Jey":218,"yeo-menghan":64,"lisizhuang-0121":3}},{"path":"src/main/java/quizhub/storage/Storage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-08"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.question.ShortAnsQn;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"import java.io.File;","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" * Represents the hard disk storage where","lastModifiedDate":"2023-10-04"},{"lineNumber":14,"author":{"gitId":"James-Hong-Jey"},"content":" * question data is stored, read and updated.","lastModifiedDate":"2023-10-08"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":"public class Storage {","lastModifiedDate":"2023-10-04"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" private File dataFile;","lastModifiedDate":"2023-10-04"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":19,"author":{"gitId":"James-Hong-Jey"},"content":" * Creates a new storage for storing question data.","lastModifiedDate":"2023-10-08"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" * @param filePath The file location in hard disk where data is stored and read from.","lastModifiedDate":"2023-10-04"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" public Storage(String filePath) {","lastModifiedDate":"2023-10-04"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" dataFile \u003d new File(filePath);","lastModifiedDate":"2023-10-04"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" * Write in new data to storage.","lastModifiedDate":"2023-10-04"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" * @param filePath The file location in hard disk where data is written to.","lastModifiedDate":"2023-10-04"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" * @param textToAdd Data to be written.","lastModifiedDate":"2023-10-04"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" * @param toAppend If true, new data is added to the back of existing data instead of overwriting them.","lastModifiedDate":"2023-10-04"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" private void writeToFile(String filePath, String textToAdd, boolean toAppend) throws IOException {","lastModifiedDate":"2023-10-04"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" FileWriter fileWriter \u003d new FileWriter(filePath, toAppend);","lastModifiedDate":"2023-10-04"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" fileWriter.write(textToAdd);","lastModifiedDate":"2023-10-04"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" fileWriter.close();","lastModifiedDate":"2023-10-04"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" * Adds a question from storage into question list being built.","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" * @param questions The question list to be built.","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" * @param currentQuestion The current question loaded from storage.","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" * @param questionIndex Index of current question in question list being built","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" * @param questionType Type of current question.","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" * @param questionDescription Description of current question.","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" * @param questionDoneStatus Done status of current question.","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" * @param questionDifficulty Difficulty of current question.","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" * @param questionModule Module of current question.","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" private void addQuestionFromFile(QuestionList questions, String currentQuestion, int questionIndex,","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" String questionType, String questionDescription, String questionDoneStatus,","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" String questionDifficulty, String questionModule) {","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" switch (questionType) {","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" case \"S\":","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" questions.addToQuestionList(\"short \" + questionDescription + \"/\" + questionModule +","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" \"/\" + questionDifficulty, Question.QnType.SHORTANSWER, false);","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" if (questionDoneStatus.equals(\"done\")) {","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" questions.markQuestionAsDone(questionIndex, false);","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" default:","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(currentQuestion);","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"lisizhuang-0121"},"content":" * Parse raw questions read from the question file and store them in the questionList","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"lisizhuang-0121"},"content":" * Used at start of program to load all questions from the file","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"lisizhuang-0121"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"lisizhuang-0121"},"content":" * @param rawQuestions the arrayList of question strings to be parsed","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"lisizhuang-0121"},"content":" * @param questions the questionList object for string parsed questions","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"lisizhuang-0121"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"lisizhuang-0121"},"content":" private void parseQuestionsFromStrings(ArrayList\u003cString\u003e rawQuestions, QuestionList questions) {","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"lisizhuang-0121"},"content":" int questionIndex \u003d 1;","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"lisizhuang-0121"},"content":" for (int i \u003d 1; i \u003c rawQuestions.size(); i++) {","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"lisizhuang-0121"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"lisizhuang-0121"},"content":" String currentQuestion \u003d rawQuestions.get(i);","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"lisizhuang-0121"},"content":" String[] questionSubStrings \u003d currentQuestion.split(\"\\\\|\");","lastModifiedDate":"2023-10-22"},{"lineNumber":79,"author":{"gitId":"lisizhuang-0121"},"content":" String questionType \u003d questionSubStrings[0].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":80,"author":{"gitId":"lisizhuang-0121"},"content":" String questionDoneStatus \u003d questionSubStrings[1].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"lisizhuang-0121"},"content":" String questionDescription \u003d questionSubStrings[2].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"lisizhuang-0121"},"content":" String questionModule \u003d questionSubStrings[3].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"lisizhuang-0121"},"content":" String questionDifficulty \u003d questionSubStrings[4].strip();","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"lisizhuang-0121"},"content":" Question.QnDifficulty difficulty \u003d Parser.extractQuestionDifficulty(questionDifficulty);","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"lisizhuang-0121"},"content":" if (difficulty \u003d\u003d Question.QnDifficulty.DEFAULT) {","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"lisizhuang-0121"},"content":" difficulty \u003d Question.QnDifficulty.NORMAL;","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"lisizhuang-0121"},"content":" addQuestionFromFile(questions, currentQuestion, questionIndex, questionType, questionDescription,","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"lisizhuang-0121"},"content":" questionDoneStatus, String.valueOf(difficulty), questionModule);","lastModifiedDate":"2023-10-22"},{"lineNumber":90,"author":{"gitId":"lisizhuang-0121"},"content":" } catch (ArrayIndexOutOfBoundsException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"lisizhuang-0121"},"content":" // if parsed unsuccessfully, maintain question order","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"lisizhuang-0121"},"content":" questionIndex -\u003d 1;","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":97,"author":{"gitId":"James-Hong-Jey"},"content":" * Build a new question list from data stored in hard disk.","lastModifiedDate":"2023-10-08"},{"lineNumber":98,"author":{"gitId":"James-Hong-Jey"},"content":" * Used at program start to build the current question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":100,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions The question list to be built.","lastModifiedDate":"2023-10-08"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":102,"author":{"gitId":"James-Hong-Jey"},"content":" public void buildCurrentListFromFile(QuestionList questions){","lastModifiedDate":"2023-10-08"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-04"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" if (dataFile.createNewFile()) {","lastModifiedDate":"2023-10-04"},{"lineNumber":105,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" Question-list created: \" + dataFile.getName());","lastModifiedDate":"2023-10-08"},{"lineNumber":106,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":" } catch(NullPointerException | IOException invalidFilePath){","lastModifiedDate":"2023-10-04"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" \" + invalidFilePath.getMessage());","lastModifiedDate":"2023-10-04"},{"lineNumber":109,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":110,"author":{"gitId":"James-Hong-Jey"},"content":" int questionIndex \u003d 0;","lastModifiedDate":"2023-10-08"},{"lineNumber":111,"author":{"gitId":"spinoandraptos"},"content":" try {","lastModifiedDate":"2023-10-04"},{"lineNumber":112,"author":{"gitId":"spinoandraptos"},"content":" Scanner fileScanner \u003d new Scanner(dataFile);","lastModifiedDate":"2023-10-04"},{"lineNumber":113,"author":{"gitId":"lisizhuang-0121"},"content":" // Pipe all lines into string arrayList for processing","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"lisizhuang-0121"},"content":" ArrayList\u003cString\u003e rawQuestions \u003d new ArrayList\u003cString\u003e();","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"spinoandraptos"},"content":" while (fileScanner.hasNext()) {","lastModifiedDate":"2023-10-04"},{"lineNumber":116,"author":{"gitId":"lisizhuang-0121"},"content":" String rawQuestion \u003d fileScanner.nextLine();","lastModifiedDate":"2023-10-22"},{"lineNumber":117,"author":{"gitId":"lisizhuang-0121"},"content":" rawQuestions.add(rawQuestion);","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"lisizhuang-0121"},"content":" if (rawQuestions.size() \u003c\u003d 1) {","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"lisizhuang-0121"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":121,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":122,"author":{"gitId":"lisizhuang-0121"},"content":" parseQuestionsFromStrings(rawQuestions, questions);","lastModifiedDate":"2023-10-22"},{"lineNumber":123,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":124,"author":{"gitId":"spinoandraptos"},"content":" catch(NullPointerException | IOException invalidFilePath){","lastModifiedDate":"2023-10-04"},{"lineNumber":125,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" \" + invalidFilePath.getMessage());","lastModifiedDate":"2023-10-04"},{"lineNumber":126,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":127,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":128,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":129,"author":{"gitId":"James-Hong-Jey"},"content":" * Build a new question list from data stored in hard disk.","lastModifiedDate":"2023-10-08"},{"lineNumber":130,"author":{"gitId":"James-Hong-Jey"},"content":" * Prints out the questions in the list in CLI.","lastModifiedDate":"2023-10-08"},{"lineNumber":131,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":132,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions The question list that has been built.","lastModifiedDate":"2023-10-08"},{"lineNumber":133,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":134,"author":{"gitId":"James-Hong-Jey"},"content":" public void loadData(QuestionList questions) {","lastModifiedDate":"2023-10-08"},{"lineNumber":135,"author":{"gitId":"James-Hong-Jey"},"content":" buildCurrentListFromFile(questions);","lastModifiedDate":"2023-10-08"},{"lineNumber":136,"author":{"gitId":"lisizhuang-0121"},"content":" if (questions.getQuestionListSize() \u003d\u003d 0) {","lastModifiedDate":"2023-10-22"},{"lineNumber":137,"author":{"gitId":"lisizhuang-0121"},"content":" System.out.println(\" You currently have no saved questions uWu\");","lastModifiedDate":"2023-10-22"},{"lineNumber":138,"author":{"gitId":"lisizhuang-0121"},"content":" return;","lastModifiedDate":"2023-10-22"},{"lineNumber":139,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":140,"author":{"gitId":"James-Hong-Jey"},"content":" System.out.println(\" You currently have the following questions uWu\");","lastModifiedDate":"2023-10-08"},{"lineNumber":141,"author":{"gitId":"James-Hong-Jey"},"content":" questions.printQuestionList();","lastModifiedDate":"2023-10-08"},{"lineNumber":142,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":143,"author":{"gitId":"lisizhuang-0121"},"content":" private void storeQuestionToFile(Question question) throws IOException {","lastModifiedDate":"2023-10-22"},{"lineNumber":144,"author":{"gitId":"lisizhuang-0121"},"content":" String isDoneString \u003d \"undone\";","lastModifiedDate":"2023-10-22"},{"lineNumber":145,"author":{"gitId":"lisizhuang-0121"},"content":" if (question.questionIsDone()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":146,"author":{"gitId":"lisizhuang-0121"},"content":" isDoneString \u003d \"done\";","lastModifiedDate":"2023-10-22"},{"lineNumber":147,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":148,"author":{"gitId":"lisizhuang-0121"},"content":" switch (question.getQuestionType()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":149,"author":{"gitId":"lisizhuang-0121"},"content":" case SHORTANSWER:","lastModifiedDate":"2023-10-22"},{"lineNumber":150,"author":{"gitId":"lisizhuang-0121"},"content":" writeToFile(dataFile.getPath(), \"S | \" + isDoneString + \" | \" + question.getQuestionDescription()","lastModifiedDate":"2023-10-22"},{"lineNumber":151,"author":{"gitId":"lisizhuang-0121"},"content":" + System.lineSeparator(), true);","lastModifiedDate":"2023-10-22"},{"lineNumber":152,"author":{"gitId":"lisizhuang-0121"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":153,"author":{"gitId":"lisizhuang-0121"},"content":" default:","lastModifiedDate":"2023-10-22"},{"lineNumber":154,"author":{"gitId":"lisizhuang-0121"},"content":" break;","lastModifiedDate":"2023-10-22"},{"lineNumber":155,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":156,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":157,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":158,"author":{"gitId":"spinoandraptos"},"content":" * Overwrites all existing data in storage with","lastModifiedDate":"2023-10-04"},{"lineNumber":159,"author":{"gitId":"James-Hong-Jey"},"content":" * the current questions in the question list.","lastModifiedDate":"2023-10-08"},{"lineNumber":160,"author":{"gitId":"James-Hong-Jey"},"content":" * Used after every question change and on program termination.","lastModifiedDate":"2023-10-08"},{"lineNumber":161,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-04"},{"lineNumber":162,"author":{"gitId":"James-Hong-Jey"},"content":" * @param questions The question list to overwrite current data with.","lastModifiedDate":"2023-10-08"},{"lineNumber":163,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":164,"author":{"gitId":"James-Hong-Jey"},"content":" public void updateData(QuestionList questions){","lastModifiedDate":"2023-10-08"},{"lineNumber":165,"author":{"gitId":"spinoandraptos"},"content":" try{","lastModifiedDate":"2023-10-04"},{"lineNumber":166,"author":{"gitId":"spinoandraptos"},"content":" //flush all current records","lastModifiedDate":"2023-10-04"},{"lineNumber":167,"author":{"gitId":"James-Hong-Jey"},"content":" writeToFile(dataFile.getPath(), \"Latest Questions\" + System.lineSeparator(), false);","lastModifiedDate":"2023-10-08"},{"lineNumber":168,"author":{"gitId":"James-Hong-Jey"},"content":" ArrayList\u003cQuestion\u003e allQuestions \u003d questions.getAllQns();","lastModifiedDate":"2023-10-08"},{"lineNumber":169,"author":{"gitId":"James-Hong-Jey"},"content":" for (Question question : allQuestions) {","lastModifiedDate":"2023-10-08"},{"lineNumber":170,"author":{"gitId":"lisizhuang-0121"},"content":" storeQuestionToFile(question);","lastModifiedDate":"2023-10-22"},{"lineNumber":171,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":172,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":173,"author":{"gitId":"spinoandraptos"},"content":" catch(NullPointerException | IOException invalidFilePath){","lastModifiedDate":"2023-10-04"},{"lineNumber":174,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" \" + invalidFilePath.getMessage());","lastModifiedDate":"2023-10-04"},{"lineNumber":175,"author":{"gitId":"spinoandraptos"},"content":" System.out.println(\" ____________________________________________________________\");","lastModifiedDate":"2023-10-04"},{"lineNumber":176,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":177,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":178,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":96,"James-Hong-Jey":24,"lisizhuang-0121":58}},{"path":"src/main/java/quizhub/ui/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.ui;","lastModifiedDate":"2023-10-05"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":3,"author":{"gitId":"lisizhuang-0121"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-05"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-08"},{"lineNumber":5,"author":{"gitId":"yeo-menghan"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"/**","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" * Represents the user interface for CLI displays.","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" * Supports CLI interactions with users.","lastModifiedDate":"2023-10-04"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":"public class Ui {","lastModifiedDate":"2023-10-04"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" private final Scanner input \u003d new Scanner(System.in); // Create a Scanner object","lastModifiedDate":"2023-10-04"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" private Storage dataStorage;","lastModifiedDate":"2023-10-04"},{"lineNumber":15,"author":{"gitId":"James-Hong-Jey"},"content":" private QuestionList tasks;","lastModifiedDate":"2023-10-08"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" * Sets up the bridging between the UI and tasks data.","lastModifiedDate":"2023-10-21"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" *","lastModifiedDate":"2023-10-21"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" * @param tasks A record of all tasks documented that is built on program start and disposed on program exit.","lastModifiedDate":"2023-10-21"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" * @param dataStorage The hard disk record of all tasks documented that persists even on program exit.","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" public Ui(Storage dataStorage, QuestionList tasks){","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" this.dataStorage \u003d dataStorage;","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" this.tasks \u003d tasks;","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" * Print out separating line in CLI to mark","lastModifiedDate":"2023-10-04"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" * start and end of chatbot replies.","lastModifiedDate":"2023-10-04"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" public void showLine(){","lastModifiedDate":"2023-10-04"},{"lineNumber":31,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" ____________________________________________________________\\n\");","lastModifiedDate":"2023-10-09"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":34,"author":{"gitId":"StevenGX12"},"content":" * Displays app logo and opening message to welcome users","lastModifiedDate":"2023-10-09"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" * on the launch of chatbot.","lastModifiedDate":"2023-10-04"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" public void displayOpeningMessage(){","lastModifiedDate":"2023-10-04"},{"lineNumber":38,"author":{"gitId":"StevenGX12"},"content":" String logo \u003d \" _______ _________ _______ ______ \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":39,"author":{"gitId":"StevenGX12"},"content":" \" ( ___ )|\\\\ /|\\\\__ __// ___ )|\\\\ /||\\\\ /|( ___ \\\\ \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":40,"author":{"gitId":"StevenGX12"},"content":" \" | ( ) || ) ( | ) ( \\\\/ ) || ) ( || ) ( || ( ) )\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":41,"author":{"gitId":"StevenGX12"},"content":" \" | | | || | | | | | / )| (___) || | | || (__/ / \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":42,"author":{"gitId":"StevenGX12"},"content":" \" | | | || | | | | | / / | ___ || | | || __ ( \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":43,"author":{"gitId":"StevenGX12"},"content":" \" | | /\\\\| || | | | | | / / | ( ) || | | || ( \\\\ \\\\ \\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":44,"author":{"gitId":"StevenGX12"},"content":" \" | (_\\\\ \\\\ || (___) |___) (___ / (_/\\\\| ) ( || (___) || )___) )\\n\" +","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"StevenGX12"},"content":" \" (____\\\\/_)(_______)\\\\_______/(_______/|/ \\\\|(_______)|/ \\\\___/\";","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"StevenGX12"},"content":" System.out.println(logo);","lastModifiedDate":"2023-10-09"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" showLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":48,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Welcome to Quizhub!!!\\n\");","lastModifiedDate":"2023-10-09"},{"lineNumber":49,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Let the quizzing begin XDD\");","lastModifiedDate":"2023-10-09"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" System.out.println();","lastModifiedDate":"2023-10-04"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" dataStorage.loadData(tasks);","lastModifiedDate":"2023-10-04"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" showLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" * Retrieves the CLI input from the user","lastModifiedDate":"2023-10-04"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" * and documents it as a String object.","lastModifiedDate":"2023-10-04"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" public String getUserInput() {","lastModifiedDate":"2023-10-21"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" if(input.hasNextLine()){","lastModifiedDate":"2023-10-21"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" return input.nextLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" } else {","lastModifiedDate":"2023-10-21"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" return \"\";","lastModifiedDate":"2023-10-21"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-04"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" * Displays closing message on exiting the chatbot.","lastModifiedDate":"2023-10-04"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" */","lastModifiedDate":"2023-10-04"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" public void displayClosingMessage(){","lastModifiedDate":"2023-10-04"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" dataStorage.updateData(tasks);","lastModifiedDate":"2023-10-04"},{"lineNumber":71,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Are you sure you want to stop quizzing?\");","lastModifiedDate":"2023-10-09"},{"lineNumber":72,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" Well... hope you had fun quizzing :D\");","lastModifiedDate":"2023-10-09"},{"lineNumber":73,"author":{"gitId":"StevenGX12"},"content":" System.out.println(\" See you again soon!\");","lastModifiedDate":"2023-10-09"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" showLine();","lastModifiedDate":"2023-10-04"},{"lineNumber":75,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-04"},{"lineNumber":76,"author":{"gitId":"yeo-menghan"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":77,"author":{"gitId":"yeo-menghan"},"content":" * Displays a question along with its index in a set of questions and the total count of questions.","lastModifiedDate":"2023-10-09"},{"lineNumber":78,"author":{"gitId":"yeo-menghan"},"content":" * Extracts and displays the question part from the question description, which is in the \"question/answer\" format.","lastModifiedDate":"2023-10-09"},{"lineNumber":79,"author":{"gitId":"yeo-menghan"},"content":" * If the format is invalid or missing, it prompts the user to edit the question via the edit function.","lastModifiedDate":"2023-10-09"},{"lineNumber":80,"author":{"gitId":"yeo-menghan"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":81,"author":{"gitId":"yeo-menghan"},"content":" * @param question The Question object containing the question description.","lastModifiedDate":"2023-10-09"},{"lineNumber":82,"author":{"gitId":"yeo-menghan"},"content":" * @param currentQuestionIndex The index of the current question in the set of questions.","lastModifiedDate":"2023-10-09"},{"lineNumber":83,"author":{"gitId":"yeo-menghan"},"content":" * @param totalQuestions The total count of questions in the set.","lastModifiedDate":"2023-10-09"},{"lineNumber":84,"author":{"gitId":"yeo-menghan"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":85,"author":{"gitId":"yeo-menghan"},"content":" public void displayQuestion(Question question, int currentQuestionIndex, int totalQuestions) {","lastModifiedDate":"2023-10-09"},{"lineNumber":86,"author":{"gitId":"yeo-menghan"},"content":" showLine();","lastModifiedDate":"2023-10-09"},{"lineNumber":87,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Question \" + currentQuestionIndex + \" / \" + totalQuestions + \":\");","lastModifiedDate":"2023-10-09"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" // getQuestionDescription returns question/answer","lastModifiedDate":"2023-10-21"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":" String questionDescription \u003d question.getQuestionDescription();","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"yeo-menghan"},"content":" String[] parts \u003d questionDescription.split(\"/\");","lastModifiedDate":"2023-10-09"},{"lineNumber":91,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":92,"author":{"gitId":"yeo-menghan"},"content":" if (parts.length \u003e\u003d 1) {","lastModifiedDate":"2023-10-09"},{"lineNumber":93,"author":{"gitId":"yeo-menghan"},"content":" // Extract and display the question part","lastModifiedDate":"2023-10-09"},{"lineNumber":94,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" \" + parts[0]); // part[0] returns the question part","lastModifiedDate":"2023-10-09"},{"lineNumber":95,"author":{"gitId":"yeo-menghan"},"content":" } else {","lastModifiedDate":"2023-10-09"},{"lineNumber":96,"author":{"gitId":"yeo-menghan"},"content":" // Handle the case where the format is invalid","lastModifiedDate":"2023-10-09"},{"lineNumber":97,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(\" Invalid question format, please edit this question via the edit function\");","lastModifiedDate":"2023-10-09"},{"lineNumber":98,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":99,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":100,"author":{"gitId":"yeo-menghan"},"content":" System.out.print(\" Your Answer: \");","lastModifiedDate":"2023-10-09"},{"lineNumber":101,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":102,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":103,"author":{"gitId":"lisizhuang-0121"},"content":" public void showInvalidCommandHelp( String feedback ) {","lastModifiedDate":"2023-10-12"},{"lineNumber":104,"author":{"gitId":"lisizhuang-0121"},"content":" System.out.println(\" Please enter a valid command :0\");","lastModifiedDate":"2023-10-12"},{"lineNumber":105,"author":{"gitId":"lisizhuang-0121"},"content":" System.out.println(feedback);","lastModifiedDate":"2023-10-12"},{"lineNumber":106,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":107,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"yeo-menghan"},"content":" public void displayMessage(String message) {","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"yeo-menghan"},"content":" System.out.println(message);","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-04"},{"lineNumber":112,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"spinoandraptos":58,"StevenGX12":16,"James-Hong-Jey":2,"yeo-menghan":30,"lisizhuang-0121":6}},{"path":"src/test/java/quizhub/command/CommandDeleteTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"StevenGX12"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"StevenGX12"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"StevenGX12"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"StevenGX12"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.storage.MockStorage;","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"StevenGX12"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"StevenGX12"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"StevenGX12"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"StevenGX12"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"StevenGX12"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"StevenGX12"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-21"},{"lineNumber":19,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"StevenGX12"},"content":"public class CommandDeleteTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"StevenGX12"},"content":" private QuestionList questionList;","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"StevenGX12"},"content":" private Parser parser;","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"StevenGX12"},"content":" private Ui ui;","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"StevenGX12"},"content":" private MockStorage mockStorage;","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"StevenGX12"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"StevenGX12"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"StevenGX12"},"content":" * Create a new question list and populate with dummy SHORTANSWER questions","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":31,"author":{"gitId":"StevenGX12"},"content":" @BeforeEach","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"StevenGX12"},"content":" public void setQuestionList(@TempDir Path tempDir) throws IOException {","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"StevenGX12"},"content":" Path tempFile \u003d tempDir.resolve(\"testStorage.txt\");","lastModifiedDate":"2023-10-21"},{"lineNumber":34,"author":{"gitId":"StevenGX12"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"StevenGX12"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-10-21"},{"lineNumber":36,"author":{"gitId":"StevenGX12"},"content":" mockStorage \u003d new MockStorage(tempFile.toString());","lastModifiedDate":"2023-10-21"},{"lineNumber":37,"author":{"gitId":"StevenGX12"},"content":" ui \u003d new Ui(mockStorage, questionList);","lastModifiedDate":"2023-10-21"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" String[] questionsToAdd \u003d { \"short Question1 / Answer1 / Mod1 / NORMAL\", \"short Question2 / Answer2 / Mod2 / NORMAL\",","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" \"short Question3 / Answer3 / Mod3 / NORMAL\", \"short Question4 / Answer4 / Mod4/ NORMAL\" };","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-21"},{"lineNumber":41,"author":{"gitId":"StevenGX12"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"StevenGX12"},"content":" for (String question : questionsToAdd) {","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"StevenGX12"},"content":" questionList.addToQuestionList(question, qnType, showMessage);","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"StevenGX12"},"content":" questionList.markQuestionAsDone(1, showMessage);","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"StevenGX12"},"content":" questionList.markQuestionAsDone(3, showMessage);","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"StevenGX12"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"StevenGX12"},"content":" @AfterEach","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"StevenGX12"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"StevenGX12"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"StevenGX12"},"content":" * Compares system standard output with expected output","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"StevenGX12"},"content":" * Assertion error is thrown if the two are not the same","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":59,"author":{"gitId":"StevenGX12"},"content":" private void testCliOutputCorrectness(String expectedOutput) {","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"StevenGX12"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"StevenGX12"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":63,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":64,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"StevenGX12"},"content":" * Test deleting with out-of-bound index","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":67,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"StevenGX12"},"content":" void testDeleteOutOfBoundIndex() {","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"StevenGX12"},"content":" String expectedOutput \u003d \"Ono! Please enter valid question number *sobs*\";","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"StevenGX12"},"content":" questionList.deleteQuestionByIndex(-1);","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":75,"author":{"gitId":"StevenGX12"},"content":" * Test deleting with invalid type index","lastModifiedDate":"2023-10-21"},{"lineNumber":76,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":77,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-21"},{"lineNumber":78,"author":{"gitId":"StevenGX12"},"content":" void testDeleteInvalidTypeIndex() {","lastModifiedDate":"2023-10-21"},{"lineNumber":79,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Please enter valid integer index!\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" \" Please format your input as delete [question number]\";","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"StevenGX12"},"content":" parser.parseCommand(\"delete test\").executeCommand(ui, mockStorage, questionList);;","lastModifiedDate":"2023-10-21"},{"lineNumber":82,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-21"},{"lineNumber":83,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":84,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":85,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-21"},{"lineNumber":86,"author":{"gitId":"StevenGX12"},"content":" * Test deleting with missing index","lastModifiedDate":"2023-10-21"},{"lineNumber":87,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-21"},{"lineNumber":88,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-21"},{"lineNumber":89,"author":{"gitId":"StevenGX12"},"content":" void testDeleteMissingIndex() {","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Ono! You did not indicate question index :\u003c\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" \" Please format your input as delete [question number]!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"StevenGX12"},"content":" parser.parseCommand(\"delete\").executeCommand(ui, mockStorage, questionList);;","lastModifiedDate":"2023-10-21"},{"lineNumber":93,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-21"},{"lineNumber":94,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":95,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":96,"author":{"gitId":"StevenGX12"},"content":" // /**","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"StevenGX12"},"content":" // * Test deleting with valid index","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"StevenGX12"},"content":" // * */","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-21"},{"lineNumber":100,"author":{"gitId":"StevenGX12"},"content":" void testDeleteValidIndex() {","lastModifiedDate":"2023-10-21"},{"lineNumber":101,"author":{"gitId":"StevenGX12"},"content":" String expectedOutput \u003d \"Roger that! I have deleted the following question \u003ew\u003c !\\r\\n\" +","lastModifiedDate":"2023-10-21"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" \" [S][X] Question1 / Answer1 | Mod1 | NORMAL\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"StevenGX12"},"content":" \" Now you have 3 questions in the list! UWU\";","lastModifiedDate":"2023-10-21"},{"lineNumber":104,"author":{"gitId":"StevenGX12"},"content":" questionList.deleteQuestionByIndex(1);","lastModifiedDate":"2023-10-21"},{"lineNumber":105,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-21"},{"lineNumber":106,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":107,"author":{"gitId":"StevenGX12"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"spinoandraptos":13,"StevenGX12":94}},{"path":"src/test/java/quizhub/command/CommandEditTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"spinoandraptos"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.BeforeAll;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":"public class CommandEditTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" private static QuestionList questionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" * Create a new question list and populate with dummy SHORTANSWER questions","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" @BeforeAll","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" public static void setQuestionList(){","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" String[] questionsToAdd \u003d { \"short Question1 / Answer1 / Mod1 / NORMAL\", \"short Question2 / Answer2 / Mod2 / NORMAL\",","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" \"short Question3 / Answer3 / Mod3 / NORMAL\", \"short Question4 / Answer4 / Mod4 / NORMAL\" };","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-21"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" for (String question:questionsToAdd) {","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" questionList.addToQuestionList(question, qnType, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(1, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(3, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" public void setUpOutput() {","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" @AfterEach","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" * Compares system standard output with expected output","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" * Assertion error is thrown if the two are not the same","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" private void testCliOutputCorrectness(String expectedOutput){","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with out-of-bound index","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" void testEditOutOfBoundIndex(){","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Ono! Please enter valid question number *sobs*\";","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" questionList.editQuestionByIndex(-1, \"\", \"\");","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with non-integer index","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" void testEditNonIntIndex(){","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Ono! Please enter valid question number *sobs*\";","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":" questionList.editQuestionByIndex(\u0027a\u0027, \"\", \"\");","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with blank description and answer","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"spinoandraptos"},"content":" void testEditBlankDescAns(){","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Roger that! I have edited the following question \u003ew\u003c !\\r\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":" \" [S][X] / | Mod1 | NORMAL\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":" \" Now you have 4 questions in the list! UWU\";","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":" questionList.editQuestionByIndex(1, \"\", \"\");","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with filled answer and blank description","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" void testEditOnlyBlankDesc(){","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Roger that! I have edited the following question \u003ew\u003c !\\r\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":" \" [S][] / NewAnswer | Mod2 | NORMAL\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":" \" Now you have 4 questions in the list! UWU\";","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":" questionList.editQuestionByIndex(2, \"\", \"NewAnswer\");","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with filled description and blank answer","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" void testEditOnlyBlankAns(){","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Roger that! I have edited the following question \u003ew\u003c !\\r\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" \" [S][X] NewDescription / | Mod3 | NORMAL\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" \" Now you have 4 questions in the list! UWU\";","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"spinoandraptos"},"content":" questionList.editQuestionByIndex(3, \"NewDescription\", \"\");","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"spinoandraptos"},"content":" * Test editing with filled description and answer","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"spinoandraptos"},"content":" void testEditNonBlankDescAns(){","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Roger that! I have edited the following question \u003ew\u003c !\\r\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"spinoandraptos"},"content":" \" [S][] NewDescription / NewAnswer | Mod4 | NORMAL\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":117,"author":{"gitId":"spinoandraptos"},"content":" \" Now you have 4 questions in the list! UWU\";","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"spinoandraptos"},"content":" questionList.editQuestionByIndex(4, \"NewDescription\", \"NewAnswer\");","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":122,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"spinoandraptos":122}},{"path":"src/test/java/quizhub/command/CommandFindTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"StevenGX12"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.BeforeAll;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"StevenGX12"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"StevenGX12"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"StevenGX12"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"StevenGX12"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"StevenGX12"},"content":"public class CommandFindTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"StevenGX12"},"content":" private static QuestionList questionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"StevenGX12"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"StevenGX12"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"StevenGX12"},"content":" * Create a new question list and populate with dummy SHORTANSWER questions","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"StevenGX12"},"content":" @BeforeAll","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"StevenGX12"},"content":" public static void setQuestionList() {","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"StevenGX12"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" String[] questionsToAdd \u003d { \"short Question1 / Answer1 / Mod1 / NORMAL\",","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" \"short Question2 / Answer2 / Mod2 / NORMAL\", \"short Question3 / Answer3 / Mod3 / NORMAL\",","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" \"short Question4 / Answer4 / Mod4 / NORMAL\" };","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"StevenGX12"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"StevenGX12"},"content":" for (String question : questionsToAdd) {","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"StevenGX12"},"content":" questionList.addToQuestionList(question, qnType, showMessage);","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"StevenGX12"},"content":" questionList.markQuestionAsDone(1, showMessage);","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"StevenGX12"},"content":" questionList.markQuestionAsDone(3, showMessage);","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"StevenGX12"},"content":" @BeforeEach","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"StevenGX12"},"content":" public void setUpOutput() {","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"StevenGX12"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"StevenGX12"},"content":" @AfterEach","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"StevenGX12"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"StevenGX12"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"StevenGX12"},"content":" * Compares system standard output with expected output","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"StevenGX12"},"content":" * Assertion error is thrown if the two are not the same","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"StevenGX12"},"content":" private void testCliOutputCorrectness(String expectedOutput) {","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"StevenGX12"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"StevenGX12"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"StevenGX12"},"content":" * Test finding with no criteria","lastModifiedDate":"2023-10-18"},{"lineNumber":59,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":60,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":61,"author":{"gitId":"StevenGX12"},"content":" void testFindNoCriteria() {","lastModifiedDate":"2023-10-18"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Ono! You did not indicate if you are searching by description or module :\u003c\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" \"\\r\\n Please format your input as find /description [description] or find /module [module]!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"StevenGX12"},"content":" questionList.searchList(\"find\");","lastModifiedDate":"2023-10-18"},{"lineNumber":65,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":66,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"StevenGX12"},"content":" * Test finding by description with no keyword","lastModifiedDate":"2023-10-18"},{"lineNumber":70,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"StevenGX12"},"content":" void testFindDescriptionNoKeyword() {","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"StevenGX12"},"content":" String expectedOutput \u003d \"Ono! You did not indicate the keywords you are searching by :\u003c\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" \"\\r\\n Please format your input as find /description [description] or find /module [module]!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"StevenGX12"},"content":" questionList.searchList(\"find /description\");","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"StevenGX12"},"content":" * Test finding by description with matches","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-21"},{"lineNumber":83,"author":{"gitId":"StevenGX12"},"content":" void testFindDescriptionWithMatches() {","lastModifiedDate":"2023-10-21"},{"lineNumber":84,"author":{"gitId":"StevenGX12"},"content":" String expectedOutput \u003d \"Here are questions that matched your search:\\r\\n\"","lastModifiedDate":"2023-10-21"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":" + \" 1: [S][X] Question1 / Answer1 | Mod1 | NORMAL\\n\"","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" + \" 2: [S][] Question2 / Answer2 | Mod2 | NORMAL\\n\"","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" + \" 3: [S][X] Question3 / Answer3 | Mod3 | NORMAL\\n\"","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" + \" 4: [S][] Question4 / Answer4 | Mod4 | NORMAL\";","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"StevenGX12"},"content":" questionList.searchList(\"find /description Question\");","lastModifiedDate":"2023-10-21"},{"lineNumber":90,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-21"},{"lineNumber":91,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":92,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"StevenGX12"},"content":" * Test finding by description with no matches","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"StevenGX12"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"StevenGX12"},"content":" void testFindDescriptionNoMatches() {","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"StevenGX12"},"content":" String expectedOutput \u003d \"Here are questions that matched your search:\\r\\n\"","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"StevenGX12"},"content":" + \" No results found :\u003c Check your keyword is correct?\";","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"StevenGX12"},"content":" questionList.searchList(\"find /description no matches\");","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":103,"author":{"gitId":"StevenGX12"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"spinoandraptos":16,"StevenGX12":87}},{"path":"src/test/java/quizhub/command/CommandHelpTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"StevenGX12"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-18"},{"lineNumber":2,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":3,"author":{"gitId":"StevenGX12"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"StevenGX12"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":5,"author":{"gitId":"StevenGX12"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"StevenGX12"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"StevenGX12"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"StevenGX12"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"StevenGX12"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"StevenGX12"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"StevenGX12"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"StevenGX12"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"StevenGX12"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"StevenGX12"},"content":"import java.util.List;","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"StevenGX12"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"StevenGX12"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"StevenGX12"},"content":"public class CommandHelpTest {","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"StevenGX12"},"content":" private QuestionList questionList;","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"StevenGX12"},"content":" private Ui mockUi;","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"StevenGX12"},"content":" private MockStorage mockStorage;","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"StevenGX12"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"StevenGX12"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-18"},{"lineNumber":28,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":29,"author":{"gitId":"StevenGX12"},"content":" @BeforeEach","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"StevenGX12"},"content":" public void setUp(@TempDir Path tempDir) throws IOException {","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"StevenGX12"},"content":" // Create a temporary file in the tempDir","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"StevenGX12"},"content":" Path tempFile \u003d tempDir.resolve(\"testStorage.txt\");","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"StevenGX12"},"content":" mockStorage \u003d new MockStorage(tempFile.toString()); // Pass the temporary file path","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"StevenGX12"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"StevenGX12"},"content":" mockUi \u003d new Ui(mockStorage,questionList);","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"StevenGX12"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"StevenGX12"},"content":" @AfterEach","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"StevenGX12"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"StevenGX12"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-18"},{"lineNumber":42,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":43,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":44,"author":{"gitId":"StevenGX12"},"content":" private void testCliOutputCorrectness(String expectedOutput){","lastModifiedDate":"2023-10-18"},{"lineNumber":45,"author":{"gitId":"StevenGX12"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"StevenGX12"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"StevenGX12"},"content":" ","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"StevenGX12"},"content":" /**","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" * Test if help command displays the correct output","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"StevenGX12"},"content":" * */","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"StevenGX12"},"content":" @Test","lastModifiedDate":"2023-10-18"},{"lineNumber":54,"author":{"gitId":"StevenGX12"},"content":" public void testHelpCommand() {","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"StevenGX12"},"content":" String expectedOutput \u003d \"Here are the list of commands you can use:\\r\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"StevenGX12"},"content":" \" 1. help - shows the list of commands you can use\\r\\n\" +","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" \" 2. short [question]/[answer] - adds a short answer question and its answer to the list,\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" \" 3. list - shows the list of questions and answers,\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" \" 4. delete [question number] - deletes the question and answer at the specified number,\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" \" 5. find /[description] - displays all questions that contains the the specified description,\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" \" 6. edit [question number] /description [description] - edits the description of the question \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" \"with the specified number,\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" \" 7. edit [question number] /answer [answer] - edits the answer to the question with the \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":" \"specified number,\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" \" 8. start - starts the quiz,\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" \" 9. shuffle - shuffle quiz questions to a random order,\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" \" 10. markdiff [question number] [question difficulty] - sets the difficulty of question \" +","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" \"with the specified number,\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" \" 11. bye - exits the program\";","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"StevenGX12"},"content":" CommandHelp help \u003d new CommandHelp();","lastModifiedDate":"2023-10-18"},{"lineNumber":71,"author":{"gitId":"StevenGX12"},"content":" help.executeCommand(mockUi, mockStorage, questionList);","lastModifiedDate":"2023-10-18"},{"lineNumber":72,"author":{"gitId":"StevenGX12"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-18"},{"lineNumber":73,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":74,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":75,"author":{"gitId":"StevenGX12"},"content":" // MockStorage class for testing, using in-data memory","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"StevenGX12"},"content":" public class MockStorage extends Storage {","lastModifiedDate":"2023-10-18"},{"lineNumber":77,"author":{"gitId":"StevenGX12"},"content":" private List\u003cString\u003e questions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-18"},{"lineNumber":78,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"StevenGX12"},"content":" public MockStorage(String filepath) {","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"StevenGX12"},"content":" super(filepath);","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"StevenGX12"},"content":" public void saveData(String dataToAdd) {","lastModifiedDate":"2023-10-18"},{"lineNumber":84,"author":{"gitId":"StevenGX12"},"content":" questions.add(dataToAdd);","lastModifiedDate":"2023-10-18"},{"lineNumber":85,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":86,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":87,"author":{"gitId":"StevenGX12"},"content":" public String loadData() {","lastModifiedDate":"2023-10-18"},{"lineNumber":88,"author":{"gitId":"StevenGX12"},"content":" // In-memory storage, retrieve data from the list","lastModifiedDate":"2023-10-18"},{"lineNumber":89,"author":{"gitId":"StevenGX12"},"content":" if (questions.isEmpty()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":90,"author":{"gitId":"StevenGX12"},"content":" return \"\";","lastModifiedDate":"2023-10-18"},{"lineNumber":91,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":92,"author":{"gitId":"StevenGX12"},"content":" // Concatenate the data with line breaks","lastModifiedDate":"2023-10-18"},{"lineNumber":93,"author":{"gitId":"StevenGX12"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-10-18"},{"lineNumber":94,"author":{"gitId":"StevenGX12"},"content":" for (String line : questions) {","lastModifiedDate":"2023-10-18"},{"lineNumber":95,"author":{"gitId":"StevenGX12"},"content":" result.append(line).append(System.lineSeparator());","lastModifiedDate":"2023-10-18"},{"lineNumber":96,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"StevenGX12"},"content":" return result.toString().trim();","lastModifiedDate":"2023-10-18"},{"lineNumber":98,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":99,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":100,"author":{"gitId":"StevenGX12"},"content":" public boolean dataExists() {","lastModifiedDate":"2023-10-18"},{"lineNumber":101,"author":{"gitId":"StevenGX12"},"content":" return !questions.isEmpty();","lastModifiedDate":"2023-10-18"},{"lineNumber":102,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":103,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":104,"author":{"gitId":"StevenGX12"},"content":" public void clearData() {","lastModifiedDate":"2023-10-18"},{"lineNumber":105,"author":{"gitId":"StevenGX12"},"content":" questions.clear();","lastModifiedDate":"2023-10-18"},{"lineNumber":106,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":107,"author":{"gitId":"StevenGX12"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":108,"author":{"gitId":"StevenGX12"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":109,"author":{"gitId":"StevenGX12"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"spinoandraptos":14,"StevenGX12":95}},{"path":"src/test/java/quizhub/command/CommandListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"spinoandraptos"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":"public class CommandListTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" private QuestionList questionList;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" public void setUp() {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" @AfterEach","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" * Compares system standard output with expected output.","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" * Assertion error is thrown if the two are not the same.","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" private void testCliOutputCorrectness(String expectedOutput){","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" * Test display of empty question list.","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" void testListEmptyList(){","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"No questions found! Time to add some OWO\";","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" questionList.printQuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" * Test display of populated question list","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" * with one unmarked SHORTANSWER question.","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":" void testListOneUnmarkedShort(){","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" String questionToAdd \u003d \"short Question / Answer / Mod1 / EASY\";","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-21"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" questionList.addToQuestionList(questionToAdd, qnType, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"1: [S][] Question / Answer | Mod1 | EASY\";","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" questionList.printQuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":" * Test display of populated question list","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" * with one marked SHORTANSWER question.","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" void testListOneMarkedShort(){","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" String questionToAdd \u003d \"short Question / Answer / Mod1 / HARD\";","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-21"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" questionList.addToQuestionList(questionToAdd, qnType, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(1, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"1: [S][X] Question / Answer | Mod1 | HARD\";","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"spinoandraptos"},"content":" questionList.printQuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":" * Test display of populated question list","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":" * with a mix of marked and unmarked SHORTANSWER questions.","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":" void testListMixedShorts(){","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" String[] questionsToAdd \u003d { \"short Question1 / Answer1 / Mod1 / HARD \", \"short Question2 / Answer2 / Mod2 / HARD\",","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" \"short Question3 / Answer3 / Mod3 / NORMAL\", \"short Question4 / Answer4 / Mod4 / EASY\" };","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-21"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" for (String question:questionsToAdd) {","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" questionList.addToQuestionList(question, qnType, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(1, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(3, showMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" \"1: [S][X] Question1 / Answer1 | Mod1 | HARD\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":" \" 2: [S][] Question2 / Answer2 | Mod2 | HARD\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":" \" 3: [S][X] Question3 / Answer3 | Mod3 | NORMAL\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" \" 4: [S][] Question4 / Answer4 | Mod4 | EASY\" ;","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" questionList.printQuestionList();","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"spinoandraptos":105}},{"path":"src/test/java/quizhub/command/CommandMarkTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"spinoandraptos"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Assertions;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.parser.Parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.storage.MockStorage;","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":"public class CommandMarkTest {","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" private QuestionList questionList;","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" private Parser parser;","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" private Ui ui;","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" private MockStorage mockStorage;","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" * Create a new question list and populate with dummy SHORTANSWER questions","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" public void setQuestionList(@TempDir Path tempDir) throws IOException {","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" Path tempFile \u003d tempDir.resolve(\"testStorage.txt\");","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" mockStorage \u003d new MockStorage(tempFile.toString());","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" ui \u003d new Ui(mockStorage, questionList);","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":" String[] questionsToAdd \u003d { \"short Question1 / Answer1 / Mod1 / NORMAL\", \"short Question2 / Answer2 / Mod2 / NORMAL\",","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" \"short Question3 / Answer3 / Mod3 / NORMAL\", \"short Question4 / Answer4 / Mod4/ NORMAL\" };","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-22"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" boolean showMessage \u003d false;","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"spinoandraptos"},"content":" for (String question : questionsToAdd) {","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" questionList.addToQuestionList(question, qnType, showMessage);","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(1, showMessage);","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"spinoandraptos"},"content":" questionList.markQuestionAsDone(3, showMessage);","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"spinoandraptos"},"content":" @BeforeEach","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"spinoandraptos"},"content":" public void setUpOutput() {","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"spinoandraptos"},"content":" @AfterEach","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"spinoandraptos"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"spinoandraptos"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"spinoandraptos"},"content":" * Compares system standard output with expected output","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"spinoandraptos"},"content":" * Assertion error is thrown if the two are not the same","lastModifiedDate":"2023-10-22"},{"lineNumber":61,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" private void testCliOutputCorrectness(String expectedOutput){","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" String actualOutput \u003d outputStreamCaptor.toString().trim();","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"spinoandraptos"},"content":" Assertions.assertEquals(expectedOutput, actualOutput);","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"spinoandraptos"},"content":" * Test editing without question index","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffNoIndexNoDifficulty(){","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff\";","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Ono! You did not indicate index of question to be marked :\u003c\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" \" Please format your input as markdiff [question number] [question difficulty]!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d parser.parseCommand(input);","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":79,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":80,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"spinoandraptos"},"content":" * Test marking without question difficulty to assign","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffNoDifficulty(){","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff 1\";","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Ono! You did not indicate difficulty to be assigned the question :\u003c\";","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d parser.parseCommand(input);","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-22"},{"lineNumber":89,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-22"},{"lineNumber":90,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":91,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":92,"author":{"gitId":"spinoandraptos"},"content":" * Test marking with out-of-bound index","lastModifiedDate":"2023-10-22"},{"lineNumber":93,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffOutOfBoundIndex(){","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff -1 NORMAL\";","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Ono! Please enter valid question number *sobs*\";","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d parser.parseCommand(input);","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-22"},{"lineNumber":100,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-22"},{"lineNumber":101,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":102,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":103,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":104,"author":{"gitId":"spinoandraptos"},"content":" * Test marking with non-integer index","lastModifiedDate":"2023-10-22"},{"lineNumber":105,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":106,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":107,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffNonIntIndex(){","lastModifiedDate":"2023-10-22"},{"lineNumber":108,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff ?@!# NORMAL\";","lastModifiedDate":"2023-10-22"},{"lineNumber":109,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Please enter valid integer index!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":110,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d parser.parseCommand(input);","lastModifiedDate":"2023-10-22"},{"lineNumber":111,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-22"},{"lineNumber":112,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-22"},{"lineNumber":113,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":114,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":115,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":116,"author":{"gitId":"spinoandraptos"},"content":" * Test marking with assigning question non-existent difficulty level","lastModifiedDate":"2023-10-22"},{"lineNumber":117,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":118,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":119,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffWrongDifficulty(){","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff 1 ???\";","lastModifiedDate":"2023-10-22"},{"lineNumber":121,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Ono! We only support easy, normal and hard difficulty levels\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":122,"author":{"gitId":"spinoandraptos"},"content":" \" Please only use \u0027easy\u0027, \u0027normal\u0027 or \u0027hard\u0027 for difficulty levels!\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":123,"author":{"gitId":"spinoandraptos"},"content":" \" No changes made to original question difficulty!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":124,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d parser.parseCommand(input);","lastModifiedDate":"2023-10-22"},{"lineNumber":125,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-22"},{"lineNumber":126,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-22"},{"lineNumber":127,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":128,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":129,"author":{"gitId":"spinoandraptos"},"content":" * Test marking with assigning question same difficulty as its current one","lastModifiedDate":"2023-10-22"},{"lineNumber":130,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":131,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":132,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffRepeatedDifficulty(){","lastModifiedDate":"2023-10-22"},{"lineNumber":133,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff 1 NORMAL\";","lastModifiedDate":"2023-10-22"},{"lineNumber":134,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Question is already set as normal ! No changes made!\";","lastModifiedDate":"2023-10-22"},{"lineNumber":135,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d parser.parseCommand(input);","lastModifiedDate":"2023-10-22"},{"lineNumber":136,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-22"},{"lineNumber":137,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-22"},{"lineNumber":138,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":139,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":140,"author":{"gitId":"spinoandraptos"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":141,"author":{"gitId":"spinoandraptos"},"content":" * Test marking with assigning question different, correct difficulty level","lastModifiedDate":"2023-10-22"},{"lineNumber":142,"author":{"gitId":"spinoandraptos"},"content":" * */","lastModifiedDate":"2023-10-22"},{"lineNumber":143,"author":{"gitId":"spinoandraptos"},"content":" @Test","lastModifiedDate":"2023-10-22"},{"lineNumber":144,"author":{"gitId":"spinoandraptos"},"content":" void testMarkDiffCorrectDifficulty(){","lastModifiedDate":"2023-10-22"},{"lineNumber":145,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"markdiff 2 HARD\";","lastModifiedDate":"2023-10-22"},{"lineNumber":146,"author":{"gitId":"spinoandraptos"},"content":" String expectedOutput \u003d \"Roger that! I have marked the following question as hard \u003ew\u003c !\\r\\n\" +","lastModifiedDate":"2023-10-22"},{"lineNumber":147,"author":{"gitId":"spinoandraptos"},"content":" \" [S][] Question2 / Answer2 | Mod2 | HARD\";","lastModifiedDate":"2023-10-22"},{"lineNumber":148,"author":{"gitId":"spinoandraptos"},"content":" Command command \u003d parser.parseCommand(input);","lastModifiedDate":"2023-10-22"},{"lineNumber":149,"author":{"gitId":"spinoandraptos"},"content":" command.executeCommand(ui, mockStorage, questionList);","lastModifiedDate":"2023-10-22"},{"lineNumber":150,"author":{"gitId":"spinoandraptos"},"content":" testCliOutputCorrectness(expectedOutput);","lastModifiedDate":"2023-10-22"},{"lineNumber":151,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":152,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":153,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":154,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"spinoandraptos":154}},{"path":"src/test/java/quizhub/command/StartTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"yeo-menghan"},"content":"package quizhub.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"yeo-menghan"},"content":"import org.junit.jupiter.api.io.TempDir;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"yeo-menghan"},"content":"import quizhub.questionlist.QuestionList;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"yeo-menghan"},"content":"import quizhub.ui.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"yeo-menghan"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"yeo-menghan"},"content":"import quizhub.storage.Storage;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"yeo-menghan"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"yeo-menghan"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"yeo-menghan"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"yeo-menghan"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"yeo-menghan"},"content":"import java.nio.file.Path;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"yeo-menghan"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"yeo-menghan"},"content":"import java.util.LinkedList;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"yeo-menghan"},"content":"import java.util.List;","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"yeo-menghan"},"content":"import java.util.Queue;","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"yeo-menghan"},"content":"public class StartTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"yeo-menghan"},"content":" private QuestionList questionList;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"yeo-menghan"},"content":" private UiMock mockUi;","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"yeo-menghan"},"content":" private MockStorage mockStorage;","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"yeo-menghan"},"content":" @BeforeEach","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"yeo-menghan"},"content":" public void setUp(@TempDir Path tempDir) throws IOException {","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"yeo-menghan"},"content":" // Create a temporary file in the tempDir","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"yeo-menghan"},"content":" Path tempFile \u003d tempDir.resolve(\"testStorage.txt\");","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"yeo-menghan"},"content":" mockStorage \u003d new MockStorage(tempFile.toString()); // Pass the temporary file path","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"yeo-menghan"},"content":" questionList \u003d new QuestionList();","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"yeo-menghan"},"content":" mockUi \u003d new UiMock(questionList);","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"yeo-menghan"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"yeo-menghan"},"content":" public void testStartQuizWithNoQuestions() {","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"yeo-menghan"},"content":" // Ensure the quiz doesn\u0027t start if there are no questions","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"spinoandraptos"},"content":" questionList.startQuiz(mockUi, questionList.getAllQns());","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"spinoandraptos"},"content":" assertEquals(\" No questions found! Add questions before starting the quiz.\",","lastModifiedDate":"2023-10-21"},{"lineNumber":40,"author":{"gitId":"spinoandraptos"},"content":" mockUi.getLastDisplayedMessage());","lastModifiedDate":"2023-10-21"},{"lineNumber":41,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"yeo-menghan"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"yeo-menghan"},"content":" public void testAddQuestionToListAndStorage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"yeo-menghan"},"content":" // Add a question to the question list","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"spinoandraptos"},"content":" questionList.addToQuestionList(\"short What is 2 + 2?/4 / MA1511 / EASY\", Question.QnType.SHORTANSWER, false);","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"yeo-menghan"},"content":" // Store the question in the mock storage","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"yeo-menghan"},"content":" mockStorage.saveData(questionList.toString());","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"yeo-menghan"},"content":" // Retrieve questions from the mock storage (without clearing the list)","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"yeo-menghan"},"content":" mockStorage.loadData(questionList);","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"yeo-menghan"},"content":" // Verify that the question was added to the list and retrieved from storage","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"yeo-menghan"},"content":" assertEquals(1, questionList.getQuestionListSize());","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"yeo-menghan"},"content":" // assertEquals(\"short What is 2 + 2?/4\", questionList.getQuestionTextByIndex(1));","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"yeo-menghan"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"yeo-menghan"},"content":" public void testStartQuizWithQuestions() {","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"yeo-menghan"},"content":" // Add some questions to the question list","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"spinoandraptos"},"content":" questionList.addToQuestionList(\"short What is 2 + 2?/4 / MA1511 / EASY\", Question.QnType.SHORTANSWER, false);","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"spinoandraptos"},"content":" questionList.addToQuestionList(\"short What is 3 + 3?/6 / MA1511 / EASY\", Question.QnType.SHORTANSWER, false);","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"yeo-menghan"},"content":" // Set up user input for the quiz one by one","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"yeo-menghan"},"content":" mockUi.setUserInput(\"4\");","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"yeo-menghan"},"content":" mockUi.setUserInput(\"6\");","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"yeo-menghan"},"content":" // Start the quiz","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"spinoandraptos"},"content":" questionList.startQuiz(mockUi, questionList.getAllQns());","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"yeo-menghan"},"content":" // Verify that the expected messages are displayed","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"yeo-menghan"},"content":" assertEquals(\" Starting the quiz...\", mockUi.getLastDisplayedMessage());","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"spinoandraptos"},"content":" //assertEquals(\"Correct!\", mockUi.getLastDisplayedMessage()); // Verify that \"Correct!\" is displayed","lastModifiedDate":"2023-10-21"},{"lineNumber":75,"author":{"gitId":"spinoandraptos"},"content":" //for both questions","lastModifiedDate":"2023-10-21"},{"lineNumber":76,"author":{"gitId":"yeo-menghan"},"content":" //assertEquals(\"Quiz completed!\", mockUi.getLastDisplayedMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"yeo-menghan"},"content":" //assertEquals(\"Your score: 2/2\", mockUi.getLastDisplayedMessage()); // Verify the final score message","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"yeo-menghan"},"content":" // A simple mock class for Ui","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"yeo-menghan"},"content":" public class UiMock extends Ui {","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"yeo-menghan"},"content":" private final Queue\u003cString\u003e userInputQueue \u003d new LinkedList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"yeo-menghan"},"content":" private String lastDisplayedMessage;","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"yeo-menghan"},"content":" public UiMock(QuestionList tasks) {","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"yeo-menghan"},"content":" super(mockStorage, tasks);","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"yeo-menghan"},"content":" public void setUserInput(String input) {","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"yeo-menghan"},"content":" userInputQueue.add(input);","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"yeo-menghan"},"content":" public String getUserInput() {","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"yeo-menghan"},"content":" if (userInputQueue.isEmpty()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"yeo-menghan"},"content":" throw new RuntimeException(\"No more user inputs provided.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"yeo-menghan"},"content":" return userInputQueue.poll();","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"yeo-menghan"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"yeo-menghan"},"content":" public void displayMessage(String message) {","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"yeo-menghan"},"content":" lastDisplayedMessage \u003d message;","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"yeo-menghan"},"content":" public String getLastDisplayedMessage() {","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"yeo-menghan"},"content":" return lastDisplayedMessage;","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":110,"author":{"gitId":"yeo-menghan"},"content":" // MockStorage class for testing, using in-data memory","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"yeo-menghan"},"content":" public class MockStorage extends Storage {","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"yeo-menghan"},"content":" private List\u003cString\u003e questions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"yeo-menghan"},"content":" public MockStorage(String filepath) {","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"yeo-menghan"},"content":" super(filepath);","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":117,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":118,"author":{"gitId":"yeo-menghan"},"content":" public void saveData(String dataToAdd) {","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"yeo-menghan"},"content":" questions.add(dataToAdd);","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":121,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":122,"author":{"gitId":"yeo-menghan"},"content":" public String loadData() {","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"yeo-menghan"},"content":" // In-memory storage, retrieve data from the list","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"yeo-menghan"},"content":" if (questions.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"yeo-menghan"},"content":" return \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":126,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":127,"author":{"gitId":"yeo-menghan"},"content":" // Concatenate the data with line breaks","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"yeo-menghan"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-10-17"},{"lineNumber":129,"author":{"gitId":"yeo-menghan"},"content":" for (String line : questions) {","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"yeo-menghan"},"content":" result.append(line).append(System.lineSeparator());","lastModifiedDate":"2023-10-17"},{"lineNumber":131,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":132,"author":{"gitId":"yeo-menghan"},"content":" return result.toString().trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":134,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":135,"author":{"gitId":"yeo-menghan"},"content":" public boolean dataExists() {","lastModifiedDate":"2023-10-16"},{"lineNumber":136,"author":{"gitId":"yeo-menghan"},"content":" return !questions.isEmpty();","lastModifiedDate":"2023-10-17"},{"lineNumber":137,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":138,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":139,"author":{"gitId":"yeo-menghan"},"content":" public void clearData() {","lastModifiedDate":"2023-10-16"},{"lineNumber":140,"author":{"gitId":"yeo-menghan"},"content":" questions.clear();","lastModifiedDate":"2023-10-17"},{"lineNumber":141,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":142,"author":{"gitId":"yeo-menghan"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":143,"author":{"gitId":"yeo-menghan"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":144,"author":{"gitId":"yeo-menghan"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spinoandraptos":9,"yeo-menghan":135}},{"path":"src/test/java/quizhub/parser/ParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"lisizhuang-0121"},"content":"package quizhub.parser;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"lisizhuang-0121"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"lisizhuang-0121"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.command.Command;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.command.CommandShortAnswer;","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.command.CommandInvalid;","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"lisizhuang-0121"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"lisizhuang-0121"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"lisizhuang-0121"},"content":"class ParserTest {","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"lisizhuang-0121"},"content":" private Parser parser;","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"lisizhuang-0121"},"content":" @BeforeEach","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"lisizhuang-0121"},"content":" public void setUp() {","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"lisizhuang-0121"},"content":" parser \u003d new Parser();","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"lisizhuang-0121"},"content":" * Test command parser with empty commands (invalid commands)","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"lisizhuang-0121"},"content":" * */","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"lisizhuang-0121"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"lisizhuang-0121"},"content":" void test_parseCommand_emptyCommand() {","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"lisizhuang-0121"},"content":" final String[] emptyInputs \u003d { \"\", \" \", \"\\n \\n\" };","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"lisizhuang-0121"},"content":" final String resultMessage \u003d Parser.INVALID_COMMAND_FEEDBACK;","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"lisizhuang-0121"},"content":" parseAndAssertIncorrectWithMessage(resultMessage, emptyInputs);","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"lisizhuang-0121"},"content":" @Test","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"lisizhuang-0121"},"content":" void test_parseCommand_invalidIntegerCommand() {","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"lisizhuang-0121"},"content":" final String[] emptyInputs \u003d {","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"lisizhuang-0121"},"content":" \"delete\",","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"lisizhuang-0121"},"content":" \"delete system32\"","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"lisizhuang-0121"},"content":" };","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"lisizhuang-0121"},"content":" final String resultMessage \u003d Parser.INVALID_INTEGER_INDEX;","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"lisizhuang-0121"},"content":" parseAndAssertIncorrectWithMessage(resultMessage, emptyInputs);","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":40,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"James-Hong-Jey"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"spinoandraptos"},"content":" void test_parseCommand_commandShortAnswer() {","lastModifiedDate":"2023-10-21"},{"lineNumber":43,"author":{"gitId":"James-Hong-Jey"},"content":" final String validInput \u003d \"short What\u0027s 9 + 10 / 21\";","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"James-Hong-Jey"},"content":" CommandShortAnswer result \u003d parseAndAssertCommandType(validInput, CommandShortAnswer.class);","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"James-Hong-Jey"},"content":" assertEquals(\"short What\u0027s 9 + 10 / 21\", result.getUserInput());","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":49,"author":{"gitId":"lisizhuang-0121"},"content":" * Test list of INVALID inputs and validate their feedback","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"lisizhuang-0121"},"content":" * This function is adapted from ADDRESS_BOOK_LEVEL_2","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"lisizhuang-0121"},"content":" * @param feedback The target feedback message for invalid command","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"lisizhuang-0121"},"content":" * @param inputs The invalid inputs that would generate the same feedback","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"lisizhuang-0121"},"content":" * */","lastModifiedDate":"2023-10-12"},{"lineNumber":54,"author":{"gitId":"lisizhuang-0121"},"content":" private void parseAndAssertIncorrectWithMessage(String feedback, String[] inputs) {","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"lisizhuang-0121"},"content":" for (String input : inputs) {","lastModifiedDate":"2023-10-12"},{"lineNumber":56,"author":{"gitId":"lisizhuang-0121"},"content":" final CommandInvalid result \u003d parseAndAssertCommandType(input, CommandInvalid.class);","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"lisizhuang-0121"},"content":" assertEquals(result.feedback, feedback);","lastModifiedDate":"2023-10-12"},{"lineNumber":58,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":59,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":60,"author":{"gitId":"lisizhuang-0121"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"lisizhuang-0121"},"content":" /**","lastModifiedDate":"2023-10-12"},{"lineNumber":62,"author":{"gitId":"lisizhuang-0121"},"content":" * Parses and tests the command type returned","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"lisizhuang-0121"},"content":" * This function is adapted from ADDRESS_BOOK_LEVEL_2","lastModifiedDate":"2023-10-12"},{"lineNumber":64,"author":{"gitId":"lisizhuang-0121"},"content":" * @param input The command input to be tested","lastModifiedDate":"2023-10-12"},{"lineNumber":65,"author":{"gitId":"lisizhuang-0121"},"content":" * @param expectedClass The expected command class","lastModifiedDate":"2023-10-12"},{"lineNumber":66,"author":{"gitId":"lisizhuang-0121"},"content":" * */","lastModifiedDate":"2023-10-12"},{"lineNumber":67,"author":{"gitId":"lisizhuang-0121"},"content":" private \u003cT extends Command\u003e T parseAndAssertCommandType(String input, Class\u003cT\u003e expectedClass) {","lastModifiedDate":"2023-10-12"},{"lineNumber":68,"author":{"gitId":"lisizhuang-0121"},"content":" final Command result \u003d parser.parseCommand(input);","lastModifiedDate":"2023-10-12"},{"lineNumber":69,"author":{"gitId":"lisizhuang-0121"},"content":" assertTrue(result.getClass().isAssignableFrom(expectedClass));","lastModifiedDate":"2023-10-12"},{"lineNumber":70,"author":{"gitId":"lisizhuang-0121"},"content":" return (T) result;","lastModifiedDate":"2023-10-12"},{"lineNumber":71,"author":{"gitId":"lisizhuang-0121"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":72,"author":{"gitId":"lisizhuang-0121"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"spinoandraptos":4,"James-Hong-Jey":6,"lisizhuang-0121":62}},{"path":"src/test/java/quizhub/questionlist/QuestionListTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"James-Hong-Jey"},"content":"package quizhub.questionlist;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"James-Hong-Jey"},"content":"import org.junit.jupiter.api.AfterEach;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"James-Hong-Jey"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"James-Hong-Jey"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"import quizhub.question.Question;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"James-Hong-Jey"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"James-Hong-Jey"},"content":"import java.io.PrintStream;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-21"},{"lineNumber":12,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"James-Hong-Jey"},"content":"class QuestionListTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"James-Hong-Jey"},"content":" private final PrintStream standardOut \u003d System.out;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"James-Hong-Jey"},"content":" private final ByteArrayOutputStream outputStreamCaptor \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"James-Hong-Jey"},"content":" @BeforeEach","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"James-Hong-Jey"},"content":" public void setUp() {","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"James-Hong-Jey"},"content":" System.setOut(new PrintStream(outputStreamCaptor));","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"James-Hong-Jey"},"content":" @AfterEach","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"James-Hong-Jey"},"content":" public void tearDown() {","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"James-Hong-Jey"},"content":" System.setOut(standardOut);","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"James-Hong-Jey"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"James-Hong-Jey"},"content":" void test_addToQuestionList_valid() {","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":" String input \u003d \"short Question / Answer / Mod1 / NORMAL\";","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" Question.QnType qnType \u003d Question.QnType.SHORTANSWER;","lastModifiedDate":"2023-10-21"},{"lineNumber":31,"author":{"gitId":"James-Hong-Jey"},"content":" boolean showMessage \u003d true;","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"James-Hong-Jey"},"content":" QuestionList qns \u003d new QuestionList();","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"James-Hong-Jey"},"content":" qns.addToQuestionList(input, qnType, showMessage);","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" assertEquals(\"I have added the following question OwO:\" +","lastModifiedDate":"2023-10-21"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" \" [S] Question / Answer | Mod1 | NORMAL Now you have 1 questions in the list! UWU\",","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" outputStreamCaptor.toString().strip().replaceAll(\"\\\\R\", \"\"));","lastModifiedDate":"2023-10-21"},{"lineNumber":37,"author":{"gitId":"James-Hong-Jey"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"James-Hong-Jey"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"James-Hong-Jey"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"spinoandraptos":7,"James-Hong-Jey":32}},{"path":"src/test/java/quizhub/storage/MockStorage.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"spinoandraptos"},"content":"package quizhub.storage;","lastModifiedDate":"2023-10-22"},{"lineNumber":2,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":3,"author":{"gitId":"spinoandraptos"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"spinoandraptos"},"content":"import java.util.List;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"spinoandraptos"},"content":"public class MockStorage extends Storage {","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"spinoandraptos"},"content":" private List\u003cString\u003e questions \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"spinoandraptos"},"content":" public MockStorage(String filepath) {","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"spinoandraptos"},"content":" super(filepath);","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"spinoandraptos"},"content":" public void saveData(String dataToAdd) {","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"spinoandraptos"},"content":" questions.add(dataToAdd);","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"spinoandraptos"},"content":" public String loadData() {","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"spinoandraptos"},"content":" // In-memory storage, retrieve data from the list","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"spinoandraptos"},"content":" if (questions.isEmpty()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"spinoandraptos"},"content":" return \"\";","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"spinoandraptos"},"content":" // Concatenate the data with line breaks","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"spinoandraptos"},"content":" StringBuilder result \u003d new StringBuilder();","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"spinoandraptos"},"content":" for (String line : questions) {","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"spinoandraptos"},"content":" result.append(line).append(System.lineSeparator());","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"spinoandraptos"},"content":" return result.toString().trim();","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"spinoandraptos"},"content":" public boolean dataExists() {","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"spinoandraptos"},"content":" return !questions.isEmpty();","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"spinoandraptos"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"spinoandraptos"},"content":" public void clearData() {","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"spinoandraptos"},"content":" questions.clear();","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"spinoandraptos"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"spinoandraptos"},"content":"}","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"spinoandraptos":37}}] diff --git a/AY2324S1-CS2113-W12-1_tp_master/commits.json b/AY2324S1-CS2113-W12-1_tp_master/commits.json index 13ca133..b563853 100644 --- a/AY2324S1-CS2113-W12-1_tp_master/commits.json +++ b/AY2324S1-CS2113-W12-1_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"spinoandraptos":[{"date":"2023-10-04","commitResults":[{"hash":"6c6d1698f76fbc9d508f95105074ab9f2110d65c","isMergeCommit":true,"messageTitle":"Merge pull request #3 from StevenGX12/master","messageBody":"Add Guan Xiao","fileTypesAndContributionMap":{}},{"hash":"df29befffe396116433778af88e0a3623bece7fc","isMergeCommit":false,"messageTitle":"add Juncheng","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}},{"hash":"419f657d64069e11fed53b7deb272799c0cf26f6","isMergeCommit":false,"messageTitle":"Refactoring","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1335,"deletions":21}}},{"hash":"7d646598095de5b46119f52d8328c6dcbe88e668","isMergeCommit":true,"messageTitle":"Merge pull request #6 from spinoandraptos/master","messageBody":"Refactoring","fileTypesAndContributionMap":{}}]},{"date":"2023-10-08","commitResults":[{"hash":"84ed7d900a90383cf0be6bb3cf33621d45496623","isMergeCommit":true,"messageTitle":"Merge pull request #8 from James-Hong-Jey/master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"174c6b202404b7d3e4890aea3b763a50171dff07","isMergeCommit":true,"messageTitle":"Merge pull request #9 from James-Hong-Jey/master","messageBody":"Add CommandShortAnswer, Update Parser","fileTypesAndContributionMap":{}},{"hash":"3189b597a50f04c45de9a88523964aeeb1bdcb7f","isMergeCommit":false,"messageTitle":"Added CommandEdit, Implemented Storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":154,"deletions":112},"other":{"insertions":3,"deletions":3}}}]},{"date":"2023-10-12","commitResults":[{"hash":"8c043626b9ce59e181aef4173d1ccfd720fa7a51","isMergeCommit":true,"messageTitle":"Merge pull request #29 from lisizhuang-0121/master","messageBody":"Closes #27 Add skeleton for Parser JUnit test with test cases of invalid commands","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"d2d4c2442c60bc271a2448e5e30c354de723dfc5","isMergeCommit":false,"messageTitle":"Added tests for edit and list commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":2},"test-code":{"insertions":223,"deletions":0}}},{"hash":"619754ac78040fedfcce7715229d1123faf8ff29","isMergeCommit":true,"messageTitle":"Merge pull request #35 from yeo-menghan/branch-Logger","messageBody":"Add CustomLogger Class - provide logging capabilities to QuizHub","fileTypesAndContributionMap":{}},{"hash":"9d306428b7e46da2eac2f6a781e197979ed989ed","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp into junit-test-edit-list-command","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"77d5af63c40d5d1fec590a1839a9bda7e30cd8e5","isMergeCommit":true,"messageTitle":"Merge pull request #39 from StevenGX12/branch-junit-test-help-delete-find-command","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"02b2e656c2151f89645110e520df79a52d260788","isMergeCommit":true,"messageTitle":"Merge pull request #41 from lisizhuang-0121/master","messageBody":"Fix bug in editing questions and answers","fileTypesAndContributionMap":{}}]},{"date":"2023-10-21","commitResults":[{"hash":"803188901bf34d49d8dc2801c4b8f85cb756afdb","isMergeCommit":true,"messageTitle":"Merge pull request #50 from StevenGX12/branch-categorize-questions-by-module","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ac9694149cfd7f2e2faa3ae9a451f888d61f47ba","isMergeCommit":false,"messageTitle":"Refactored code to meet coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":111,"deletions":94},"other":{"insertions":2,"deletions":2},"test-code":{"insertions":63,"deletions":46}}},{"hash":"31df027fc7a15af84706e70831cd02a150409e39","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into code-quality-control","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7201655780fe5ec8aa3946d5fcb1468a03bda511","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp","messageBody":"# Conflicts:\n#\tsrc/main/java/quizhub/questionlist/QuestionList.java\n","fileTypesAndContributionMap":{}},{"hash":"b1d0b039dda0013076f420c3744f03bf48e6d6c7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp into code-quality-control","messageBody":"# Conflicts:\n#\tsrc/main/java/quizhub/questionlist/QuestionList.java\n","fileTypesAndContributionMap":{}},{"hash":"ff0205d612d5ceed374eb84a5dc5c2221c1beeb7","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":8,"deletions":83}}},{"hash":"96298734d292a2b39b661555af39485f9dab05a8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/spinoandraptos/tp into code-quality-control","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c0c68817e875fde5abfa7df5d05d0c1f512f5450","isMergeCommit":true,"messageTitle":"Merge branch \u0027code-quality-control\u0027 of https://github.com/spinoandraptos/tp into code-quality-control","messageBody":"# Conflicts:\n#\tsrc/main/java/quizhub/questionlist/QuestionList.java\n","fileTypesAndContributionMap":{}},{"hash":"0450003a6bc37a4824ffa42b902355ba2327077e","isMergeCommit":false,"messageTitle":"Refactored Code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":11},"other":{"insertions":1,"deletions":1}}},{"hash":"22bc37216bfac6f1c761c71c5d22a7d66f467c43","isMergeCommit":false,"messageTitle":"Updated checkstyle version","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"28760df5d989cd3a75edd708e8a274374fd22e7f","isMergeCommit":false,"messageTitle":"Refactored code for coding standard","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":12}}},{"hash":"a942565335e3305fe202aea376a37b30675cebf1","isMergeCommit":false,"messageTitle":"Refactored Code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":11}}},{"hash":"21f04502757b120fc73d5f0e5b738db96844a704","isMergeCommit":true,"messageTitle":"Merge pull request #56 from spinoandraptos/code-quality-control","messageBody":"Refactored code to meet coding standards","fileTypesAndContributionMap":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"cb2634cafc2f25b928067ae2c5a360551b11b068","isMergeCommit":false,"messageTitle":"Added question difficulty levels","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":360,"deletions":126},"test-code":{"insertions":59,"deletions":54}}},{"hash":"395063d74f60e949ba60c3fb9f10d3f500a9e6fb","isMergeCommit":true,"messageTitle":"Merge pull request #57 from spinoandraptos/mark-questions","messageBody":"Added question difficulty levels","fileTypesAndContributionMap":{}},{"hash":"596ab0e3e0926218008b05da298bf26f627e6980","isMergeCommit":false,"messageTitle":"Added categorisation for quiz modes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":74,"deletions":11},"test-code":{"insertions":2,"deletions":2}}},{"hash":"e0ede314755aa5c33370733627aebd54ba62976d","isMergeCommit":true,"messageTitle":"Merge pull request #59 from spinoandraptos/categorise-questions","messageBody":"Added categorisation to organise quiz questions by module","fileTypesAndContributionMap":{}}]}],"StevenGX12":[{"date":"2023-10-04","commitResults":[{"hash":"89a5fcaa30ce7cd31fe47503bb2873226575c6b8","isMergeCommit":true,"messageTitle":"Merge pull request #2 from James-Hong-Jey/master","messageBody":"Add James","fileTypesAndContributionMap":{}},{"hash":"9dc6e6889ff581686f9e040603ee748d51c37b1a","isMergeCommit":false,"messageTitle":"added Guan Xiao AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"e43a7268e881e66880f125a55ba992a5659e1637","isMergeCommit":true,"messageTitle":"resolved merge conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5794b6bc163b412507ec00d46d2f9627c6a034f7","isMergeCommit":true,"messageTitle":"Merge pull request #5 from lisizhuang-0121/master","messageBody":"Update aboutus.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-09","commitResults":[{"hash":"6dde24d6485345dc3c3bce285aa3370f4c826f7c","isMergeCommit":true,"messageTitle":"Merge pull request #12 from yeo-menghan/branch-QuizMode","messageBody":"Branch quiz mode","fileTypesAndContributionMap":{}},{"hash":"919bffd25b6508283eb156867e2dc13853958696","isMergeCommit":false,"messageTitle":"updated UI and help command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":33,"deletions":12}}}]},{"date":"2023-10-17","commitResults":[{"hash":"37e590ab99132292aba1ec5031af078a34d57805","isMergeCommit":true,"messageTitle":"Merge pull request #33 from yeo-menghan/branch-StartQuizTest","messageBody":"Branch StartTest","fileTypesAndContributionMap":{}},{"hash":"64a8e454d68bc3ae0aeba542489059b28323e079","isMergeCommit":true,"messageTitle":"Merge pull request #36 from spinoandraptos/junit-test-edit-list-command","messageBody":"Add JUnit CommandEdit, Add JUnit CommandList, Adjust Question Description Display Format","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"23ba5e69c4bbdf012c8f310e3105264004398153","isMergeCommit":false,"messageTitle":"Add Junit tests for help, find and delete commands","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":275,"deletions":0}}}]},{"date":"2023-10-21","commitResults":[{"hash":"c2027663c8ac122e37a35546af2da8be8d2a4b59","isMergeCommit":false,"messageTitle":"Update JUnit test for Help and Find commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1},"test-code":{"insertions":100,"deletions":34}}},{"hash":"18a095a2631ce870544a5c93efd82ab30779ba9b","isMergeCommit":true,"messageTitle":"Merge pull request #49 from StevenGX12/branch-junit-test-help-delete-find-command","messageBody":"Update JUnit test for Help and Find commands","fileTypesAndContributionMap":{}},{"hash":"c3b8139ffd40bc6ae94073568437b9404a5630ce","isMergeCommit":false,"messageTitle":"Add module attribute to question and search by module function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":72,"deletions":8},"test-code":{"insertions":15,"deletions":15}}}]}],"yeo-menghan":[{"date":"2023-10-04","commitResults":[{"hash":"437a578d991ab42603936e351239623440e806c8","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Change from Duke to QuizHub on ReadMe","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"96293a9443789434cf941b15cdebf0bbfa57d745","isMergeCommit":false,"messageTitle":"Add personal details(Meng Han) on AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"568326efb68a7553262bf268501d90613739f023","isMergeCommit":true,"messageTitle":"Merge pull request #4 from spinoandraptos/master","messageBody":"add Juncheng","fileTypesAndContributionMap":{}}]},{"date":"2023-10-09","commitResults":[{"hash":"908207acef2fd89a00b4a74737adf8ded8a80145","isMergeCommit":true,"messageTitle":"Merge pull request #10 from AY2324S1-CS2113-W12-1/CommandEdit-and-Storage","messageBody":"Added CommandEdit, Implemented Storage","fileTypesAndContributionMap":{}},{"hash":"53259b048ec950c253cbc566fedba93fdad0d2f7","isMergeCommit":false,"messageTitle":"Add quiz mode with Start command - known bug: displaying both Question \u0026 Answer","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":83,"deletions":2}}},{"hash":"afbcce9d71aef01eec2235c69a34d0fe5ad737cb","isMergeCommit":false,"messageTitle":"Implement v1.0 start quiz mode - hide answer when displaying question","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":37,"deletions":17}}}]},{"date":"2023-10-11","commitResults":[{"hash":"37435c2000856c832080cfb16ba748d83ee56dee","isMergeCommit":true,"messageTitle":"Merge pull request #13 from StevenGX12/branch-feature-ui","messageBody":"updated UI and help command","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"ac403d72be67d1f75c3320a5126fbbc221e2574d","isMergeCommit":false,"messageTitle":"Add StartQuiz test in file QuestionListTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":114,"deletions":0}}},{"hash":"0e8d55308019df6e501da3711ea7e1e81e61fcda","isMergeCommit":false,"messageTitle":"Add preliminary storage features - test cases 3/3 fail","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":0},"test-code":{"insertions":16,"deletions":0}}}]},{"date":"2023-10-17","commitResults":[{"hash":"89aec25e8204afaf04a2a153900060902eb265fa","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp into branch-StartQuizTest","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ab851efe950edee1dd31f03c777751cc81bc32f0","isMergeCommit":false,"messageTitle":"Pull from remote. Fix testStartQuizWithNoQuestions and testAddQuestionToListAndStorage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":1},"test-code":{"insertions":35,"deletions":23}}},{"hash":"e5a87ba72c59146eea2aa540c6d9059ef82dd580","isMergeCommit":false,"messageTitle":"Move QuestionListTest from parser to command - rename to StartTest","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4},"other":{"insertions":2,"deletions":2}}},{"hash":"f7fc87e17f86a4e5fa1f64ea8c8d49358f3d6f46","isMergeCommit":false,"messageTitle":"Pass 3/3 StartTest.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2},"test-code":{"insertions":5,"deletions":5}}},{"hash":"f17f3f8e6ff57b28b8b41862a9517d3efa054626","isMergeCommit":false,"messageTitle":"Add CustomLogger Class - provide logging capabilities to QuizHub","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":0}}},{"hash":"e86f5576f77bd60660ddaea01b2004011478424f","isMergeCommit":true,"messageTitle":"Merge pull request #37 from lisizhuang-0121/master","messageBody":"Fix minor code quality issues.","tags":["Version_1_0"],"fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"821b499e492917b6e4c50eba020b8c1a6839b65e","isMergeCommit":true,"messageTitle":"Merge pull request #38 from lisizhuang-0121/master","messageBody":"Fix minor bugs in adding questions and taking quiz","fileTypesAndContributionMap":{}}]}],"James-Hong-Jey":[{"date":"2023-10-04","commitResults":[{"hash":"cfa71b85ff164366845684af16d070e31ea60359","isMergeCommit":false,"messageTitle":"Change aboutus.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"ff15f0850b54fd060d30b9efb9967fc1e0d9ab18","isMergeCommit":true,"messageTitle":"Resolve merge conflict","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-08","commitResults":[{"hash":"59726e824ebe24615b40411cb772b0cd1af4b63f","isMergeCommit":true,"messageTitle":"Merge pull request #7 from lisizhuang-0121/master","messageBody":"Refactor code to align with QuizHub code structure.","fileTypesAndContributionMap":{}},{"hash":"5781673f896f0c94d455e6f90bd81064a2b60c5d","isMergeCommit":false,"messageTitle":"Change Task words to Question, Comment out old code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":388,"deletions":382}}},{"hash":"6ae2d08763bc68f7ce450755d3341b498a8f2075","isMergeCommit":false,"messageTitle":"Add CommandShortAnswer, remove redundancies","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":38},"other":{"insertions":6,"deletions":6}}}]},{"date":"2023-10-16","commitResults":[{"hash":"3689320d26a5d1629ca650330a058b18c15a637b","isMergeCommit":false,"messageTitle":"Add JUnit CommandShortAnswer, Add JUnit addToQuestionList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":1},"test-code":{"insertions":45,"deletions":0}}}]},{"date":"2023-10-17","commitResults":[{"hash":"7a965c94ecafa3507c2246700af709a8e035b42f","isMergeCommit":true,"messageTitle":"Merge pull request #32 from James-Hong-Jey/JUnit","messageBody":"Add JUnit CommandShortAnswer, Add JUnit addToQuestionList","fileTypesAndContributionMap":{}}]},{"date":"2023-10-21","commitResults":[{"hash":"2d48b66fa0ac979743ad4042ad721157907b1fea","isMergeCommit":false,"messageTitle":"Add Shuffle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":1}}},{"hash":"94f03b08917c989740c4aad088c8ac9b6cb66710","isMergeCommit":false,"messageTitle":"Add an assert and a logging","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"973220a81069c775bc9ce5aa1d62ccd51f606da2","isMergeCommit":false,"messageTitle":"Clean up Find command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":4}}},{"hash":"c83703fe81ed2dd8f4f32e1cd634fe4dcf0bfd1a","isMergeCommit":false,"messageTitle":"Add Dev Guide Architecture","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":21,"deletions":2}}},{"hash":"636404c0ddaeffae283f1f9978da51e626a03f5e","isMergeCommit":true,"messageTitle":"Merge pull request #55 from James-Hong-Jey/master","messageBody":"Add Architecture to Dev Guide","fileTypesAndContributionMap":{}}]}],"lisizhuang-0121":[{"date":"2023-10-04","commitResults":[{"hash":"db4924094e6d09cacbe80b263645d4f6e6778802","isMergeCommit":true,"messageTitle":"Merge pull request #1 from yeo-menghan/master","messageBody":"Add personal details(Meng Han) on AboutUs.md","fileTypesAndContributionMap":{}},{"hash":"7398eac81f0be5e14293d06439587f84e7cea114","isMergeCommit":false,"messageTitle":"Update aboutus.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}}]},{"date":"2023-10-05","commitResults":[{"hash":"be1e01236a2a636b43c835c00d65832c606e7b06","isMergeCommit":false,"messageTitle":"Refactor code to align with QuizHub code structure.","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":65,"deletions":243},"other":{"insertions":99,"deletions":105}}},{"hash":"815456aa4e9a69f2359c634ce6d3183d0ca11172","isMergeCommit":false,"messageTitle":"Refactor and rename classes for better readability","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":274,"deletions":462},"other":{"insertions":9,"deletions":9}}}]},{"date":"2023-10-12","commitResults":[{"hash":"7c06aff1313bf138f10ec7375ff55889f31f8e56","isMergeCommit":false,"messageTitle":"Add Invalid Command Class for improved command parsing","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":43,"deletions":20}}},{"hash":"af8a7aab2f7cff548363c5615fa500b84cf7b7d4","isMergeCommit":true,"messageTitle":"Merge pull request #16 from lisizhuang-0121/master","messageBody":"Add Invalid Command Class for improved command parsing","fileTypesAndContributionMap":{}},{"hash":"76953b2108f83fa551f74a4db56822b3c9c22f8f","isMergeCommit":false,"messageTitle":"Fix minor bug in command parser for handling empty commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":16}}},{"hash":"c71a386f5bd64788eddb3377662b848b3782e91c","isMergeCommit":true,"messageTitle":"Merge pull request #28 from lisizhuang-0121/master","messageBody":"Fix minor bug in command parser for handling empty commands","fileTypesAndContributionMap":{}},{"hash":"6f9d92535a8c58c94add3a36bf2b6b7e374091f5","isMergeCommit":false,"messageTitle":"Add skeleton for Parser JUnit test with test cases of invalid commands","messageBody":"Edit message field of commandInvalid to public to allow comparison in the tests.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"test-code":{"insertions":63,"deletions":0}}}]},{"date":"2023-10-17","commitResults":[{"hash":"4fdf529869faba917c09787471e457a9a43c39bb","isMergeCommit":false,"messageTitle":"Add assertions and fix minor code quality issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":98,"deletions":98}}},{"hash":"46c9191ff97396777d903f98670298b78bab1ec6","isMergeCommit":false,"messageTitle":"Fix minor bug in assertion","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"d38040b3ebff23f9e10e4b8bbb1cd541605bcd11","isMergeCommit":false,"messageTitle":"Fix minor bugs in adding questions and taking quiz","messageBody":"Bug 1 - Add question has uncaught exceptions, fixed by checking for null\nBug 2 - Taking quiz may output wrong for white spaces in answers\n","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":4}}}]},{"date":"2023-10-18","commitResults":[{"hash":"7522945291940993ef8bc68b936802cb438a39be","isMergeCommit":false,"messageTitle":"Fix bug in editing questions and answers","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":18},"other":{"insertions":1,"deletions":0}}}]},{"date":"2023-10-21","commitResults":[{"hash":"3400e5554e05c19f7e781646902f06e1f2f5344f","isMergeCommit":false,"messageTitle":"Update skeleton for Developer guide with UML","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":64,"deletions":8}}},{"hash":"68b82f82ce1625c492e51edbfa099a8f070250bf","isMergeCommit":true,"messageTitle":"Merge pull request #51 from James-Hong-Jey/shuffle","messageBody":"Add Shuffle, Find","fileTypesAndContributionMap":{}},{"hash":"e8db9d9b43bd4a2a4a1d5a57f54ec35f98af1815","isMergeCommit":true,"messageTitle":"Merge pull request #52 from lisizhuang-0121/master","messageBody":"Update skeleton for Developer guide with UML","fileTypesAndContributionMap":{}},{"hash":"54454cd61ae874d56ee2857fdfd153c9841fa76e","isMergeCommit":true,"messageTitle":"Merge pull request #53 from lisizhuang-0121/master","messageBody":"Add UML Powerpoint Template","fileTypesAndContributionMap":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"b5c467d5a61d9c6dcb6e5caa0f91cb4ad5463c0c","isMergeCommit":false,"messageTitle":"Improve code quality in /storage/Storage.java","messageBody":"Abstract functions for lower nesting level\nImprove error handling for file parsing cases\nImprove program logic\n","fileTypesAndContributionMap":{"functional-code":{"insertions":53,"deletions":33}}},{"hash":"5089a7189cc6d7cd13cfa615f38cbb1998d391af","isMergeCommit":true,"messageTitle":"Merge pull request #60 from lisizhuang-0121/master","messageBody":"Improve code quality in /storage/Storage.java","fileTypesAndContributionMap":{}},{"hash":"07fb6ec555da28475febb6a2927956598ac36d41","isMergeCommit":false,"messageTitle":"Handle invalid question difficulty levels when reading from storage","messageBody":"Ensure questions conform to the 3 difficulty levels by calling the parser class\n","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":1}}},{"hash":"d2a3e118f4010cad370bc5dd182e929cdad34ae8","isMergeCommit":true,"messageTitle":"Merge pull request #61 from lisizhuang-0121/master","messageBody":"Handle invalid question difficulty levels when reading from storage","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"spinoandraptos":{"docs":4,"functional-code":915,"test-code":289,"other":2},"StevenGX12":{"docs":1,"functional-code":85,"test-code":312},"yeo-menghan":{"docs":2,"functional-code":125,"test-code":135},"James-Hong-Jey":{"docs":22,"functional-code":326,"test-code":38},"lisizhuang-0121":{"docs":63,"functional-code":187,"test-code":62,"other":1}},"authorContributionVariance":{"spinoandraptos":77330.164,"StevenGX12":4136.0996,"yeo-menghan":1544.1539,"James-Hong-Jey":22598.102,"lisizhuang-0121":50909.742},"authorDisplayNameMap":{"spinoandraptos":"CS2113-W12-1 MAN ..HENG","StevenGX12":"CS2113-W12-1 GUAN..XIAO","yeo-menghan":"CS2113-W12-1 YEO .. HAN","James-Hong-Jey":"CS2113-W12-1 JAME.. JEY","lisizhuang-0121":"CS2113-W12-1 LI S..UANG"}} +{"authorDailyContributionsMap":{"spinoandraptos":[{"date":"2023-10-04","commitResults":[{"hash":"6c6d1698f76fbc9d508f95105074ab9f2110d65c","isMergeCommit":true,"messageTitle":"Merge pull request #3 from StevenGX12/master","messageBody":"Add Guan Xiao","fileTypesAndContributionMap":{}},{"hash":"df29befffe396116433778af88e0a3623bece7fc","isMergeCommit":false,"messageTitle":"add Juncheng","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":6,"deletions":6}}},{"hash":"419f657d64069e11fed53b7deb272799c0cf26f6","isMergeCommit":false,"messageTitle":"Refactoring","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1335,"deletions":21}}},{"hash":"7d646598095de5b46119f52d8328c6dcbe88e668","isMergeCommit":true,"messageTitle":"Merge pull request #6 from spinoandraptos/master","messageBody":"Refactoring","fileTypesAndContributionMap":{}}]},{"date":"2023-10-08","commitResults":[{"hash":"84ed7d900a90383cf0be6bb3cf33621d45496623","isMergeCommit":true,"messageTitle":"Merge pull request #8 from James-Hong-Jey/master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"174c6b202404b7d3e4890aea3b763a50171dff07","isMergeCommit":true,"messageTitle":"Merge pull request #9 from James-Hong-Jey/master","messageBody":"Add CommandShortAnswer, Update Parser","fileTypesAndContributionMap":{}},{"hash":"3189b597a50f04c45de9a88523964aeeb1bdcb7f","isMergeCommit":false,"messageTitle":"Added CommandEdit, Implemented Storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":154,"deletions":112},"other":{"insertions":3,"deletions":3}}}]},{"date":"2023-10-12","commitResults":[{"hash":"8c043626b9ce59e181aef4173d1ccfd720fa7a51","isMergeCommit":true,"messageTitle":"Merge pull request #29 from lisizhuang-0121/master","messageBody":"Closes #27 Add skeleton for Parser JUnit test with test cases of invalid commands","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"d2d4c2442c60bc271a2448e5e30c354de723dfc5","isMergeCommit":false,"messageTitle":"Added tests for edit and list commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":2},"test-code":{"insertions":223,"deletions":0}}},{"hash":"619754ac78040fedfcce7715229d1123faf8ff29","isMergeCommit":true,"messageTitle":"Merge pull request #35 from yeo-menghan/branch-Logger","messageBody":"Add CustomLogger Class - provide logging capabilities to QuizHub","fileTypesAndContributionMap":{}},{"hash":"9d306428b7e46da2eac2f6a781e197979ed989ed","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp into junit-test-edit-list-command","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"77d5af63c40d5d1fec590a1839a9bda7e30cd8e5","isMergeCommit":true,"messageTitle":"Merge pull request #39 from StevenGX12/branch-junit-test-help-delete-find-command","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"02b2e656c2151f89645110e520df79a52d260788","isMergeCommit":true,"messageTitle":"Merge pull request #41 from lisizhuang-0121/master","messageBody":"Fix bug in editing questions and answers","fileTypesAndContributionMap":{}}]},{"date":"2023-10-21","commitResults":[{"hash":"803188901bf34d49d8dc2801c4b8f85cb756afdb","isMergeCommit":true,"messageTitle":"Merge pull request #50 from StevenGX12/branch-categorize-questions-by-module","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ac9694149cfd7f2e2faa3ae9a451f888d61f47ba","isMergeCommit":false,"messageTitle":"Refactored code to meet coding standards","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":111,"deletions":94},"other":{"insertions":2,"deletions":2},"test-code":{"insertions":63,"deletions":46}}},{"hash":"31df027fc7a15af84706e70831cd02a150409e39","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into code-quality-control","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"7201655780fe5ec8aa3946d5fcb1468a03bda511","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp","messageBody":"# Conflicts:\n#\tsrc/main/java/quizhub/questionlist/QuestionList.java\n","fileTypesAndContributionMap":{}},{"hash":"b1d0b039dda0013076f420c3744f03bf48e6d6c7","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp into code-quality-control","messageBody":"# Conflicts:\n#\tsrc/main/java/quizhub/questionlist/QuestionList.java\n","fileTypesAndContributionMap":{}},{"hash":"ff0205d612d5ceed374eb84a5dc5c2221c1beeb7","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":8,"deletions":83}}},{"hash":"96298734d292a2b39b661555af39485f9dab05a8","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/spinoandraptos/tp into code-quality-control","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c0c68817e875fde5abfa7df5d05d0c1f512f5450","isMergeCommit":true,"messageTitle":"Merge branch \u0027code-quality-control\u0027 of https://github.com/spinoandraptos/tp into code-quality-control","messageBody":"# Conflicts:\n#\tsrc/main/java/quizhub/questionlist/QuestionList.java\n","fileTypesAndContributionMap":{}},{"hash":"0450003a6bc37a4824ffa42b902355ba2327077e","isMergeCommit":false,"messageTitle":"Refactored Code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":11},"other":{"insertions":1,"deletions":1}}},{"hash":"22bc37216bfac6f1c761c71c5d22a7d66f467c43","isMergeCommit":false,"messageTitle":"Updated checkstyle version","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"28760df5d989cd3a75edd708e8a274374fd22e7f","isMergeCommit":false,"messageTitle":"Refactored code for coding standard","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":12,"deletions":12}}},{"hash":"a942565335e3305fe202aea376a37b30675cebf1","isMergeCommit":false,"messageTitle":"Refactored Code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":11}}},{"hash":"21f04502757b120fc73d5f0e5b738db96844a704","isMergeCommit":true,"messageTitle":"Merge pull request #56 from spinoandraptos/code-quality-control","messageBody":"Refactored code to meet coding standards","fileTypesAndContributionMap":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"cb2634cafc2f25b928067ae2c5a360551b11b068","isMergeCommit":false,"messageTitle":"Added question difficulty levels","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":360,"deletions":126},"test-code":{"insertions":59,"deletions":54}}},{"hash":"395063d74f60e949ba60c3fb9f10d3f500a9e6fb","isMergeCommit":true,"messageTitle":"Merge pull request #57 from spinoandraptos/mark-questions","messageBody":"Added question difficulty levels","fileTypesAndContributionMap":{}},{"hash":"596ab0e3e0926218008b05da298bf26f627e6980","isMergeCommit":false,"messageTitle":"Added categorisation for quiz modes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":74,"deletions":11},"test-code":{"insertions":2,"deletions":2}}},{"hash":"e0ede314755aa5c33370733627aebd54ba62976d","isMergeCommit":true,"messageTitle":"Merge pull request #59 from spinoandraptos/categorise-questions","messageBody":"Added categorisation to organise quiz questions by module","fileTypesAndContributionMap":{}},{"hash":"86d74d03ea53982ce91b3495df39f255fbd2023a","isMergeCommit":false,"messageTitle":"Added junit testing for command to mark question difficulty, abstracted out class MockStorage for easy reuse in testing","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":192,"deletions":36}}},{"hash":"2c95f662f577ae85402c9f6e201aed789e4fee4a","isMergeCommit":true,"messageTitle":"Merge pull request #62 from spinoandraptos/junit-mark-difficulty","messageBody":"Added junit testing for command to mark question difficulty, abstract…","fileTypesAndContributionMap":{}}]}],"StevenGX12":[{"date":"2023-10-04","commitResults":[{"hash":"89a5fcaa30ce7cd31fe47503bb2873226575c6b8","isMergeCommit":true,"messageTitle":"Merge pull request #2 from James-Hong-Jey/master","messageBody":"Add James","fileTypesAndContributionMap":{}},{"hash":"9dc6e6889ff581686f9e040603ee748d51c37b1a","isMergeCommit":false,"messageTitle":"added Guan Xiao AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"e43a7268e881e66880f125a55ba992a5659e1637","isMergeCommit":true,"messageTitle":"resolved merge conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5794b6bc163b412507ec00d46d2f9627c6a034f7","isMergeCommit":true,"messageTitle":"Merge pull request #5 from lisizhuang-0121/master","messageBody":"Update aboutus.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-09","commitResults":[{"hash":"6dde24d6485345dc3c3bce285aa3370f4c826f7c","isMergeCommit":true,"messageTitle":"Merge pull request #12 from yeo-menghan/branch-QuizMode","messageBody":"Branch quiz mode","fileTypesAndContributionMap":{}},{"hash":"919bffd25b6508283eb156867e2dc13853958696","isMergeCommit":false,"messageTitle":"updated UI and help command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":33,"deletions":12}}}]},{"date":"2023-10-17","commitResults":[{"hash":"37e590ab99132292aba1ec5031af078a34d57805","isMergeCommit":true,"messageTitle":"Merge pull request #33 from yeo-menghan/branch-StartQuizTest","messageBody":"Branch StartTest","fileTypesAndContributionMap":{}},{"hash":"64a8e454d68bc3ae0aeba542489059b28323e079","isMergeCommit":true,"messageTitle":"Merge pull request #36 from spinoandraptos/junit-test-edit-list-command","messageBody":"Add JUnit CommandEdit, Add JUnit CommandList, Adjust Question Description Display Format","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"23ba5e69c4bbdf012c8f310e3105264004398153","isMergeCommit":false,"messageTitle":"Add Junit tests for help, find and delete commands","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":275,"deletions":0}}}]},{"date":"2023-10-21","commitResults":[{"hash":"c2027663c8ac122e37a35546af2da8be8d2a4b59","isMergeCommit":false,"messageTitle":"Update JUnit test for Help and Find commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1},"test-code":{"insertions":100,"deletions":34}}},{"hash":"18a095a2631ce870544a5c93efd82ab30779ba9b","isMergeCommit":true,"messageTitle":"Merge pull request #49 from StevenGX12/branch-junit-test-help-delete-find-command","messageBody":"Update JUnit test for Help and Find commands","fileTypesAndContributionMap":{}},{"hash":"c3b8139ffd40bc6ae94073568437b9404a5630ce","isMergeCommit":false,"messageTitle":"Add module attribute to question and search by module function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":72,"deletions":8},"test-code":{"insertions":15,"deletions":15}}}]}],"yeo-menghan":[{"date":"2023-10-04","commitResults":[{"hash":"437a578d991ab42603936e351239623440e806c8","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"Change from Duke to QuizHub on ReadMe","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"96293a9443789434cf941b15cdebf0bbfa57d745","isMergeCommit":false,"messageTitle":"Add personal details(Meng Han) on AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"568326efb68a7553262bf268501d90613739f023","isMergeCommit":true,"messageTitle":"Merge pull request #4 from spinoandraptos/master","messageBody":"add Juncheng","fileTypesAndContributionMap":{}}]},{"date":"2023-10-09","commitResults":[{"hash":"908207acef2fd89a00b4a74737adf8ded8a80145","isMergeCommit":true,"messageTitle":"Merge pull request #10 from AY2324S1-CS2113-W12-1/CommandEdit-and-Storage","messageBody":"Added CommandEdit, Implemented Storage","fileTypesAndContributionMap":{}},{"hash":"53259b048ec950c253cbc566fedba93fdad0d2f7","isMergeCommit":false,"messageTitle":"Add quiz mode with Start command - known bug: displaying both Question \u0026 Answer","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":83,"deletions":2}}},{"hash":"afbcce9d71aef01eec2235c69a34d0fe5ad737cb","isMergeCommit":false,"messageTitle":"Implement v1.0 start quiz mode - hide answer when displaying question","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":37,"deletions":17}}}]},{"date":"2023-10-11","commitResults":[{"hash":"37435c2000856c832080cfb16ba748d83ee56dee","isMergeCommit":true,"messageTitle":"Merge pull request #13 from StevenGX12/branch-feature-ui","messageBody":"updated UI and help command","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"ac403d72be67d1f75c3320a5126fbbc221e2574d","isMergeCommit":false,"messageTitle":"Add StartQuiz test in file QuestionListTest","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":114,"deletions":0}}},{"hash":"0e8d55308019df6e501da3711ea7e1e81e61fcda","isMergeCommit":false,"messageTitle":"Add preliminary storage features - test cases 3/3 fail","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":0},"test-code":{"insertions":16,"deletions":0}}}]},{"date":"2023-10-17","commitResults":[{"hash":"89aec25e8204afaf04a2a153900060902eb265fa","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-1/tp into branch-StartQuizTest","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ab851efe950edee1dd31f03c777751cc81bc32f0","isMergeCommit":false,"messageTitle":"Pull from remote. Fix testStartQuizWithNoQuestions and testAddQuestionToListAndStorage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":1},"test-code":{"insertions":35,"deletions":23}}},{"hash":"e5a87ba72c59146eea2aa540c6d9059ef82dd580","isMergeCommit":false,"messageTitle":"Move QuestionListTest from parser to command - rename to StartTest","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4},"other":{"insertions":2,"deletions":2}}},{"hash":"f7fc87e17f86a4e5fa1f64ea8c8d49358f3d6f46","isMergeCommit":false,"messageTitle":"Pass 3/3 StartTest.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2},"test-code":{"insertions":5,"deletions":5}}},{"hash":"f17f3f8e6ff57b28b8b41862a9517d3efa054626","isMergeCommit":false,"messageTitle":"Add CustomLogger Class - provide logging capabilities to QuizHub","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":0}}},{"hash":"e86f5576f77bd60660ddaea01b2004011478424f","isMergeCommit":true,"messageTitle":"Merge pull request #37 from lisizhuang-0121/master","messageBody":"Fix minor code quality issues.","tags":["Version_1_0"],"fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"821b499e492917b6e4c50eba020b8c1a6839b65e","isMergeCommit":true,"messageTitle":"Merge pull request #38 from lisizhuang-0121/master","messageBody":"Fix minor bugs in adding questions and taking quiz","fileTypesAndContributionMap":{}}]}],"James-Hong-Jey":[{"date":"2023-10-04","commitResults":[{"hash":"cfa71b85ff164366845684af16d070e31ea60359","isMergeCommit":false,"messageTitle":"Change aboutus.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"ff15f0850b54fd060d30b9efb9967fc1e0d9ab18","isMergeCommit":true,"messageTitle":"Resolve merge conflict","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-08","commitResults":[{"hash":"59726e824ebe24615b40411cb772b0cd1af4b63f","isMergeCommit":true,"messageTitle":"Merge pull request #7 from lisizhuang-0121/master","messageBody":"Refactor code to align with QuizHub code structure.","fileTypesAndContributionMap":{}},{"hash":"5781673f896f0c94d455e6f90bd81064a2b60c5d","isMergeCommit":false,"messageTitle":"Change Task words to Question, Comment out old code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":388,"deletions":382}}},{"hash":"6ae2d08763bc68f7ce450755d3341b498a8f2075","isMergeCommit":false,"messageTitle":"Add CommandShortAnswer, remove redundancies","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":38},"other":{"insertions":6,"deletions":6}}}]},{"date":"2023-10-16","commitResults":[{"hash":"3689320d26a5d1629ca650330a058b18c15a637b","isMergeCommit":false,"messageTitle":"Add JUnit CommandShortAnswer, Add JUnit addToQuestionList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":1},"test-code":{"insertions":45,"deletions":0}}}]},{"date":"2023-10-17","commitResults":[{"hash":"7a965c94ecafa3507c2246700af709a8e035b42f","isMergeCommit":true,"messageTitle":"Merge pull request #32 from James-Hong-Jey/JUnit","messageBody":"Add JUnit CommandShortAnswer, Add JUnit addToQuestionList","fileTypesAndContributionMap":{}}]},{"date":"2023-10-21","commitResults":[{"hash":"2d48b66fa0ac979743ad4042ad721157907b1fea","isMergeCommit":false,"messageTitle":"Add Shuffle","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":1}}},{"hash":"94f03b08917c989740c4aad088c8ac9b6cb66710","isMergeCommit":false,"messageTitle":"Add an assert and a logging","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"973220a81069c775bc9ce5aa1d62ccd51f606da2","isMergeCommit":false,"messageTitle":"Clean up Find command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":4}}},{"hash":"c83703fe81ed2dd8f4f32e1cd634fe4dcf0bfd1a","isMergeCommit":false,"messageTitle":"Add Dev Guide Architecture","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":21,"deletions":2}}},{"hash":"636404c0ddaeffae283f1f9978da51e626a03f5e","isMergeCommit":true,"messageTitle":"Merge pull request #55 from James-Hong-Jey/master","messageBody":"Add Architecture to Dev Guide","fileTypesAndContributionMap":{}}]}],"lisizhuang-0121":[{"date":"2023-10-04","commitResults":[{"hash":"db4924094e6d09cacbe80b263645d4f6e6778802","isMergeCommit":true,"messageTitle":"Merge pull request #1 from yeo-menghan/master","messageBody":"Add personal details(Meng Han) on AboutUs.md","fileTypesAndContributionMap":{}},{"hash":"7398eac81f0be5e14293d06439587f84e7cea114","isMergeCommit":false,"messageTitle":"Update aboutus.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}}]},{"date":"2023-10-05","commitResults":[{"hash":"be1e01236a2a636b43c835c00d65832c606e7b06","isMergeCommit":false,"messageTitle":"Refactor code to align with QuizHub code structure.","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":65,"deletions":243},"other":{"insertions":99,"deletions":105}}},{"hash":"815456aa4e9a69f2359c634ce6d3183d0ca11172","isMergeCommit":false,"messageTitle":"Refactor and rename classes for better readability","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":274,"deletions":462},"other":{"insertions":9,"deletions":9}}}]},{"date":"2023-10-12","commitResults":[{"hash":"7c06aff1313bf138f10ec7375ff55889f31f8e56","isMergeCommit":false,"messageTitle":"Add Invalid Command Class for improved command parsing","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":43,"deletions":20}}},{"hash":"af8a7aab2f7cff548363c5615fa500b84cf7b7d4","isMergeCommit":true,"messageTitle":"Merge pull request #16 from lisizhuang-0121/master","messageBody":"Add Invalid Command Class for improved command parsing","fileTypesAndContributionMap":{}},{"hash":"76953b2108f83fa551f74a4db56822b3c9c22f8f","isMergeCommit":false,"messageTitle":"Fix minor bug in command parser for handling empty commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":20,"deletions":16}}},{"hash":"c71a386f5bd64788eddb3377662b848b3782e91c","isMergeCommit":true,"messageTitle":"Merge pull request #28 from lisizhuang-0121/master","messageBody":"Fix minor bug in command parser for handling empty commands","fileTypesAndContributionMap":{}},{"hash":"6f9d92535a8c58c94add3a36bf2b6b7e374091f5","isMergeCommit":false,"messageTitle":"Add skeleton for Parser JUnit test with test cases of invalid commands","messageBody":"Edit message field of commandInvalid to public to allow comparison in the tests.\n","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"test-code":{"insertions":63,"deletions":0}}}]},{"date":"2023-10-17","commitResults":[{"hash":"4fdf529869faba917c09787471e457a9a43c39bb","isMergeCommit":false,"messageTitle":"Add assertions and fix minor code quality issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":98,"deletions":98}}},{"hash":"46c9191ff97396777d903f98670298b78bab1ec6","isMergeCommit":false,"messageTitle":"Fix minor bug in assertion","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"d38040b3ebff23f9e10e4b8bbb1cd541605bcd11","isMergeCommit":false,"messageTitle":"Fix minor bugs in adding questions and taking quiz","messageBody":"Bug 1 - Add question has uncaught exceptions, fixed by checking for null\nBug 2 - Taking quiz may output wrong for white spaces in answers\n","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":4}}}]},{"date":"2023-10-18","commitResults":[{"hash":"7522945291940993ef8bc68b936802cb438a39be","isMergeCommit":false,"messageTitle":"Fix bug in editing questions and answers","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":21,"deletions":18},"other":{"insertions":1,"deletions":0}}}]},{"date":"2023-10-21","commitResults":[{"hash":"3400e5554e05c19f7e781646902f06e1f2f5344f","isMergeCommit":false,"messageTitle":"Update skeleton for Developer guide with UML","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":64,"deletions":8}}},{"hash":"68b82f82ce1625c492e51edbfa099a8f070250bf","isMergeCommit":true,"messageTitle":"Merge pull request #51 from James-Hong-Jey/shuffle","messageBody":"Add Shuffle, Find","fileTypesAndContributionMap":{}},{"hash":"e8db9d9b43bd4a2a4a1d5a57f54ec35f98af1815","isMergeCommit":true,"messageTitle":"Merge pull request #52 from lisizhuang-0121/master","messageBody":"Update skeleton for Developer guide with UML","fileTypesAndContributionMap":{}},{"hash":"54454cd61ae874d56ee2857fdfd153c9841fa76e","isMergeCommit":true,"messageTitle":"Merge pull request #53 from lisizhuang-0121/master","messageBody":"Add UML Powerpoint Template","fileTypesAndContributionMap":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"b5c467d5a61d9c6dcb6e5caa0f91cb4ad5463c0c","isMergeCommit":false,"messageTitle":"Improve code quality in /storage/Storage.java","messageBody":"Abstract functions for lower nesting level\nImprove error handling for file parsing cases\nImprove program logic\n","fileTypesAndContributionMap":{"functional-code":{"insertions":53,"deletions":33}}},{"hash":"5089a7189cc6d7cd13cfa615f38cbb1998d391af","isMergeCommit":true,"messageTitle":"Merge pull request #60 from lisizhuang-0121/master","messageBody":"Improve code quality in /storage/Storage.java","fileTypesAndContributionMap":{}},{"hash":"07fb6ec555da28475febb6a2927956598ac36d41","isMergeCommit":false,"messageTitle":"Handle invalid question difficulty levels when reading from storage","messageBody":"Ensure questions conform to the 3 difficulty levels by calling the parser class\n","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":1}}},{"hash":"d2a3e118f4010cad370bc5dd182e929cdad34ae8","isMergeCommit":true,"messageTitle":"Merge pull request #61 from lisizhuang-0121/master","messageBody":"Handle invalid question difficulty levels when reading from storage","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"spinoandraptos":{"docs":4,"functional-code":915,"test-code":481,"other":2},"StevenGX12":{"docs":1,"functional-code":85,"test-code":276},"yeo-menghan":{"docs":2,"functional-code":125,"test-code":135},"James-Hong-Jey":{"docs":22,"functional-code":326,"test-code":38},"lisizhuang-0121":{"docs":63,"functional-code":187,"test-code":62,"other":1}},"authorContributionVariance":{"spinoandraptos":87637.39,"StevenGX12":4136.0996,"yeo-menghan":1544.1539,"James-Hong-Jey":22598.102,"lisizhuang-0121":50909.742},"authorDisplayNameMap":{"spinoandraptos":"CS2113-W12-1 MAN ..HENG","StevenGX12":"CS2113-W12-1 GUAN..XIAO","yeo-menghan":"CS2113-W12-1 YEO .. HAN","James-Hong-Jey":"CS2113-W12-1 JAME.. JEY","lisizhuang-0121":"CS2113-W12-1 LI S..UANG"}} diff --git a/AY2324S1-CS2113-W12-3_tp_master/authorship.json b/AY2324S1-CS2113-W12-3_tp_master/authorship.json index e46610c..83b395d 100644 --- a/AY2324S1-CS2113-W12-3_tp_master/authorship.json +++ b/AY2324S1-CS2113-W12-3_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName.set(\"duke\")","lastModifiedDate":"2023-09-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"sRanay"},"content":" enableAssertions \u003d true;","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"sRanay":1,"-":46}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Portfolio ","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"--------|:----:|:--------------:|:---------:","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"itayrefaely"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Itay Refaely | [Github](https://github.com/itayrefaely) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":6,"author":{"gitId":"ChoonSiang"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Chan Choon Siang | [Github](https://github.com/ChoonSiang) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"Jonoans"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Jonathan Tan | [Github](https://github.com/Jonoans) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"sRanay"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Jason Song Jun Jie | [Github](https://github.com/sRanay) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"hooami"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Jun Hong | [Github](https://github.com/hooami) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"Jonoans":1,"sRanay":1,"itayrefaely":1,"-":4,"hooami":1,"ChoonSiang":1}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"hooami"},"content":"# FinText","lastModifiedDate":"2023-10-04"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"hooami"},"content":"FinText is a **Command Line Interface (CLI)-based personal finance tracker to make it easy for users to track and manage","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"hooami"},"content":"their spending,** and generate daily/weekly/monthly reports to break down how they spend.","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":6,"author":{"gitId":"-"},"content":"Useful links:","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"* [User Guide](UserGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"* [Developer Guide](DeveloperGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"* [About Us](AboutUs.md)","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"hooami":3,"-":6}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"hooami"},"content":"# FinText User Guide","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Introduction","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"hooami"},"content":"FinText is a **Command Line Interface (CLI)-based personal finance tracker to make it easy for users to track and manage","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"hooami"},"content":"their spending,** and generate daily/weekly/monthly reports to break down how they spend.","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"hooami"},"content":"* [Quick Start](#quick-start)","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"hooami"},"content":"* [Features](#features)","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"hooami"},"content":" * [Viewing Help: `help`](#viewing-help-help)","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"hooami"},"content":" * [Adding an income entry: `in`](#adding-an-income-entry-in)","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"hooami"},"content":" * [Adding an expense entry: `out`](#adding-an-expense-entry-out)","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"hooami"},"content":" * [Delete Transaction: `delete`](#delete-transaction-delete)","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"hooami"},"content":" * [List Transactions: `list`](#list-transactions-list)","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"hooami"},"content":" * [End Program: `bye`](#end-program-bye)","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"hooami"},"content":"* [Command Summary](#command-summary)","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":"## Quick Start","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":21,"author":{"gitId":"hooami"},"content":"1. Ensure that you have Java 11 installed on your computer.","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"hooami"},"content":"2. Download the latest version of `FinText` from [here](https://github.com/AY2324S1-CS2113-W12-3/tp/releases).","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2020-05-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":26,"author":{"gitId":"hooami"},"content":"\u003e * `UPPER_CASE` denotes user-supplied parameters, and arguments with square brackets\u003cbr\u003e e.g. `[/date DATE]` denote","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"hooami"},"content":" optional arguments, while arguments not in square brackets are mandatory.","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"hooami"},"content":"\u003e * Any text e.g. `DESCRIPTION` has to come before arguments.\u003cbr\u003e","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"hooami"},"content":" `in Salary /amount 500 /goal Savings` is a valid command, while `in /amount 500 /goal Savings Salary` is not a valid","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"hooami"},"content":" command.","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"hooami"},"content":"\u003e * Arguments can be in any order. \u003cbr\u003e","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"hooami"},"content":" e.g. if a command has the arguments `/amount AMOUNT /goal GOAL`, `/goal GOAL /amount AMOUNT` is acceptable as well.","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"hooami"},"content":"### Viewing Help: `help`","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"hooami"},"content":"Shows a list of all the commands available to the user.","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"hooami"},"content":"### Adding an income entry: `in`","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"hooami"},"content":"Adds an income towards a goal.","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"hooami"},"content":"Format: `in DESCRIPTION /amount AMOUNT /goal GOAL [/date DATE]`","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"hooami"},"content":"* `DESCRIPTION` is case-sensitive, while the arguments are not.","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"hooami"},"content":"* `DATE` must be in format `DDMMYYYY`","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"hooami"},"content":"**Usage Example:**","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"hooami"},"content":"`in part-time job /amount 500 /goal car` \u003cbr\u003e","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"hooami"},"content":"Adds an income entry for \u0027part-time job\u0027 with an amount of 500 towards a goal called \u0027car\u0027.","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"hooami"},"content":"`in red packet money /amount 50 /goal PS5 /date 18092023`\u003cbr\u003e","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"hooami"},"content":"Adds an income entry that happened on 18 Sept 2023 for \u0027red packet money\u0027 for an amount of 50 towards","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"hooami"},"content":"a goal called \u0027PS5\u0027.","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"hooami"},"content":"### Adding an expense entry: `out`","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"hooami"},"content":"Adds an expense for a category.","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"hooami"},"content":"Format: `out DESCRIPTION /amount AMOUNT /category CATEGORY [/date DATE in DDMMYYYY]`","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"hooami"},"content":"* `DESCRIPTION` is case-sensitive, while the arguments are not.","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"hooami"},"content":"* `DATE` must be in format `DDMMYYYY`","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"hooami"},"content":"**Usage Example:**","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"hooami"},"content":"`out dinner /amount 10.50 /category food` \u003cbr\u003e","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"hooami"},"content":"Adds an expense entry for \u0027dinner\u0027 with an amount of 10.50 towards the \u0027food\u0027 category.","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"hooami"},"content":"`out pokemon card pack /amount 10.50 /category food /date 18092023`\u003cbr\u003e","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"hooami"},"content":"Adds an expense entry that happened on 18 Sept 2023 for \u0027pokemon card pack\u0027 for an amount of 10.50 towards","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"hooami"},"content":"the \u0027game\u0027 category.","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"hooami"},"content":"### Delete Transaction: `delete`","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"hooami"},"content":"Delete a specific transaction based on the index in the list.","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"hooami"},"content":"Format: `delete INDEX /type (in | out)`","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"hooami"},"content":"* `/type` only accepts `in` or `out`.","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"hooami"},"content":"* `INDEX` is based on the ID from the `list` command.","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"hooami"},"content":"**Usage Example:**","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"hooami"},"content":"`delete 1 /type in` - Deletes the first income entry.","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"hooami"},"content":"`delete 2 /type out` - Deletes the second expense entry.","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":86,"author":{"gitId":"hooami"},"content":"### List Transactions: `list`","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"hooami"},"content":"Shows a list of all added transactions based on type, with filters for goals and categories.","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":89,"author":{"gitId":"hooami"},"content":"Format: `list /type (in | out) [/goal GOAL] [/category CATEGORY]`","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"hooami"},"content":"* User must specify /type option to list either transactions added under income or expense","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"hooami"},"content":"* Deletion has to be based on the ID of the transaction without any filters.","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":93,"author":{"gitId":"hooami"},"content":"**Usage Example:**","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":95,"author":{"gitId":"hooami"},"content":"`list /type in` - List all income transactions","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":97,"author":{"gitId":"hooami"},"content":"`list /type out` - List all expense transactions","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":99,"author":{"gitId":"hooami"},"content":"`list /type in /goal Travel` - List all income transactions with the \u0027Travel\u0027 goal","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":101,"author":{"gitId":"hooami"},"content":"`list /type out /category Food` - List all expense transactions with the \u0027Food\u0027 category","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":103,"author":{"gitId":"hooami"},"content":"**Sample Output:**","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"hooami"},"content":"```","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"hooami"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d IN TRANSACTIONS \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"hooami"},"content":"ID Description Date Amount Goal","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"hooami"},"content":"1 Random 12 SEP 2023 $10 TRAVEL","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"hooami"},"content":"2 Hongbao 13 SEP 2023 $10 KOREA STUDIES","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"hooami"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d IN TRANSACTIONS \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"hooami"},"content":"```","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"hooami"},"content":"### End Program: `bye`","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"hooami"},"content":"Safely ends the program.","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":114,"author":{"gitId":"-"},"content":"## Command Summary","lastModifiedDate":"2020-05-24"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":116,"author":{"gitId":"hooami"},"content":"| Action | Format | Example |","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"hooami"},"content":"|-------------------------|-----------------------------------------------------------------------------|-----------------------------------------------------------|","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"hooami"},"content":"| Help | `help` | |","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"hooami"},"content":"| Adding an income entry | `in DESCRIPTION /amount AMOUNT /goal GOAL [/date DATE in DDMMYYYY]` | `in part-time job /amount 500 /goal car` |","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"hooami"},"content":"| Adding an expense entry | `out DESCRIPTION /amount AMOUNT /category CATEGORY [/date DATE in DDMMYYYY]`| `out dinner /amount 10.50 /category food` |","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"hooami"},"content":"| Delete Transaction | `delete INDEX /type (in | out)` | `delete 1 /type in` |","lastModifiedDate":"2023-10-17"},{"lineNumber":122,"author":{"gitId":"hooami"},"content":"| List Transactions | `list /type (in | out) [/goal GOAL] [/category CATEGORY]` | `list /type in` |","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"hooami"},"content":"| End program | `bye` | |","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"hooami":98,"-":26}},{"path":"src/main/java/seedu/duke/Duke.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.duke;","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.command.Command;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.command.ExitCommand;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.parser.Parser;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"import java.util.Scanner;","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":12,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"ChoonSiang"},"content":" private static Ui ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"ChoonSiang"},"content":" public Duke() {","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"ChoonSiang"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"ChoonSiang"},"content":" public void run() {","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"ChoonSiang"},"content":" Scanner scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"ChoonSiang"},"content":" ui.printGreeting();","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"ChoonSiang"},"content":" String userInput;","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"ChoonSiang"},"content":" while (true) {","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"ChoonSiang"},"content":" userInput \u003d scanner.nextLine();","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"ChoonSiang"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d new Parser().parse(userInput);","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"ChoonSiang"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"ChoonSiang"},"content":" if (command instanceof ExitCommand) {","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"ChoonSiang"},"content":" break;","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"ChoonSiang"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"ChoonSiang"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"sRanay"},"content":" scanner.close();","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":" * Main entry-point for the java.duke.Duke application.","lastModifiedDate":"2020-05-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-24"},{"lineNumber":42,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":43,"author":{"gitId":"ChoonSiang"},"content":" Duke duke \u003d new Duke();","lastModifiedDate":"2023-10-12"},{"lineNumber":44,"author":{"gitId":"ChoonSiang"},"content":" duke.run();","lastModifiedDate":"2023-10-12"},{"lineNumber":45,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":46,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"sRanay":1,"-":11,"ChoonSiang":34}},{"path":"src/main/java/seedu/duke/classes/Category.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"sRanay"},"content":"package seedu.duke.classes;","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"sRanay"},"content":"public class Category {","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"sRanay"},"content":" private String name;","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"sRanay"},"content":" public Category(String name) {","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"sRanay"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"sRanay"},"content":" public String getName() {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"sRanay"},"content":" return name;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"sRanay"},"content":" public void setName(String name) {","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"sRanay"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"sRanay"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"sRanay":17}},{"path":"src/main/java/seedu/duke/classes/Expense.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Jonoans"},"content":"package seedu.duke.classes;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Jonoans"},"content":"public class Expense {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Jonoans"},"content":" private Transaction transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"hooami"},"content":" private Category category;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"hooami"},"content":" public Expense(Transaction transaction, Category category) {","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Jonoans"},"content":" this.transaction \u003d transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"hooami"},"content":" this.category \u003d category;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Jonoans"},"content":" public Transaction getTransaction() {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Jonoans"},"content":" return transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Jonoans"},"content":" public void setTransaction(Transaction transaction) {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Jonoans"},"content":" this.transaction \u003d transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"hooami"},"content":" public Category getCategory() {","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"hooami"},"content":" return category;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"hooami"},"content":" public void setCategory(Category category) {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"hooami"},"content":" this.category \u003d category;","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Jonoans"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Jonoans":20,"hooami":7}},{"path":"src/main/java/seedu/duke/classes/Goal.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"sRanay"},"content":"package seedu.duke.classes;","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"sRanay"},"content":"public class Goal {","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"sRanay"},"content":" private String description;","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"sRanay"},"content":" private int amount;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"sRanay"},"content":" public Goal(String description, int amount) {","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"sRanay"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"sRanay"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"sRanay"},"content":" public int getAmount() {","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"sRanay"},"content":" return amount;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"sRanay"},"content":" public void setAmount(int amount) {","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"sRanay"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"sRanay"},"content":" public String getDescription() {","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"sRanay"},"content":" return description;","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"sRanay"},"content":" public void setDescription(String description) {","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"sRanay"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"sRanay"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"sRanay":28}},{"path":"src/main/java/seedu/duke/classes/Income.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Jonoans"},"content":"package seedu.duke.classes;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Jonoans"},"content":"public class Income {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Jonoans"},"content":" private Transaction transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"hooami"},"content":" private Goal goal;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"hooami"},"content":" public Income(Transaction transaction, Goal goal) {","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Jonoans"},"content":" this.transaction \u003d transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"hooami"},"content":" this.goal \u003d goal;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Jonoans"},"content":" public Transaction getTransaction() {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Jonoans"},"content":" return transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Jonoans"},"content":" public void setTransaction(Transaction transaction) {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Jonoans"},"content":" this.transaction \u003d transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"hooami"},"content":" public Goal getGoal() {","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"hooami"},"content":" return goal;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"hooami"},"content":" public void setGoal(Goal goal) {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"hooami"},"content":" this.goal \u003d goal;","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Jonoans"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Jonoans":20,"hooami":7}},{"path":"src/main/java/seedu/duke/classes/StateManager.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Jonoans"},"content":"package seedu.duke.classes;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Jonoans"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Jonoans"},"content":"public class StateManager {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Jonoans"},"content":" private static StateManager stateManager \u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Jonoans"},"content":" private final ArrayList\u003cGoal\u003e goals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Jonoans"},"content":" private final ArrayList\u003cCategory\u003e categories \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"Jonoans"},"content":" private final ArrayList\u003cIncome\u003e incomes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Jonoans"},"content":" private final ArrayList\u003cExpense\u003e expenses \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Jonoans"},"content":" private StateManager() {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Jonoans"},"content":" public static StateManager getStateManager() {","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Jonoans"},"content":" if (stateManager \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Jonoans"},"content":" stateManager \u003d new StateManager();","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Jonoans"},"content":" return stateManager;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Jonoans"},"content":" public void addGoal(Goal goal) {","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Jonoans"},"content":" assert goal !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Jonoans"},"content":" goals.add(goal);","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Jonoans"},"content":" public Goal getGoal(int idx) {","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Jonoans"},"content":" if (idx \u003c 0 || idx \u003e\u003d goals.size()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Jonoans"},"content":" return null;","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"Jonoans"},"content":" return goals.get(idx);","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Jonoans"},"content":" public boolean removeGoal(Goal goal) {","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Jonoans"},"content":" assert goal !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Jonoans"},"content":" return goals.remove(goal);","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"Jonoans"},"content":" public boolean removeGoal(int idx) {","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Jonoans"},"content":" Goal goal \u003d getGoal(idx);","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"Jonoans"},"content":" if (goal \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Jonoans"},"content":" return false;","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Jonoans"},"content":" return removeGoal(goal);","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Jonoans"},"content":" public void addCategory(Category category) {","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"Jonoans"},"content":" assert category !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"Jonoans"},"content":" categories.add(category);","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"Jonoans"},"content":" public Category getCategory(int idx) {","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"Jonoans"},"content":" if (idx \u003c 0 || idx \u003e\u003d categories.size()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"Jonoans"},"content":" return null;","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"Jonoans"},"content":" return categories.get(idx);","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"Jonoans"},"content":" public boolean removeCategory(Category category) {","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"Jonoans"},"content":" assert category !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"Jonoans"},"content":" return categories.remove(category);","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"Jonoans"},"content":" public boolean removeCategory(int idx) {","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"Jonoans"},"content":" Category category \u003d getCategory(idx);","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"Jonoans"},"content":" if (category \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"Jonoans"},"content":" return false;","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"Jonoans"},"content":" return removeCategory(category);","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"Jonoans"},"content":" public void addIncome(Income income) {","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"Jonoans"},"content":" assert income !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"Jonoans"},"content":" incomes.add(income);","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"Jonoans"},"content":" public Income getIncome(int idx) {","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"Jonoans"},"content":" if (idx \u003c 0 || idx \u003e\u003d incomes.size()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"Jonoans"},"content":" return null;","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"Jonoans"},"content":" return incomes.get(idx);","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"Jonoans"},"content":" public boolean removeIncome(Income income) {","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"Jonoans"},"content":" assert income !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"Jonoans"},"content":" return incomes.remove(income);","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"Jonoans"},"content":" public boolean removeIncome(int idx) {","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"Jonoans"},"content":" Income income \u003d getIncome(idx);","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"Jonoans"},"content":" if (income \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"Jonoans"},"content":" return false;","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"Jonoans"},"content":" return removeIncome(income);","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"Jonoans"},"content":" public void addExpense(Expense expense) {","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"Jonoans"},"content":" assert expense !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"Jonoans"},"content":" expenses.add(expense);","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"Jonoans"},"content":" public Expense getExpense(int idx) {","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"Jonoans"},"content":" if (idx \u003c 0 || idx \u003e\u003d expenses.size()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"Jonoans"},"content":" return null;","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"Jonoans"},"content":" return expenses.get(idx);","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"Jonoans"},"content":" public boolean removeExpense(Expense expense) {","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"Jonoans"},"content":" assert expense !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"Jonoans"},"content":" return expenses.remove(expense);","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"Jonoans"},"content":" public boolean removeExpense(int idx) {","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"Jonoans"},"content":" Expense expense \u003d getExpense(idx);","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"Jonoans"},"content":" if (expense \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"Jonoans"},"content":" return false;","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":122,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"Jonoans"},"content":" return removeExpense(expense);","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"hooami"},"content":" public ArrayList\u003cIncome\u003e getAllIncomes() {","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"hooami"},"content":" return incomes;","lastModifiedDate":"2023-10-15"},{"lineNumber":128,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"hooami"},"content":" public ArrayList\u003cExpense\u003e getAllExpenses() {","lastModifiedDate":"2023-10-15"},{"lineNumber":131,"author":{"gitId":"hooami"},"content":" return expenses;","lastModifiedDate":"2023-10-15"},{"lineNumber":132,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":133,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"ChoonSiang"},"content":" public int getIncomesSize() {","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"ChoonSiang"},"content":" return incomes.size();","lastModifiedDate":"2023-10-17"},{"lineNumber":136,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":137,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":138,"author":{"gitId":"ChoonSiang"},"content":" public int getExpensesSize() {","lastModifiedDate":"2023-10-17"},{"lineNumber":139,"author":{"gitId":"ChoonSiang"},"content":" return expenses.size();","lastModifiedDate":"2023-10-17"},{"lineNumber":140,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":141,"author":{"gitId":"Jonoans"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Jonoans":125,"hooami":7,"ChoonSiang":9}},{"path":"src/main/java/seedu/duke/classes/Transaction.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"sRanay"},"content":"package seedu.duke.classes;","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"sRanay"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"sRanay"},"content":"public class Transaction {","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"sRanay"},"content":" private String description;","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"Jonoans"},"content":" private Double amount;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"sRanay"},"content":" private LocalDate date;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"Jonoans"},"content":" public Transaction(String description, Double amount, LocalDate date) {","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Jonoans"},"content":" if (date \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Jonoans"},"content":" date \u003d LocalDate.now();","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"sRanay"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"sRanay"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"sRanay"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"Jonoans"},"content":" public Double getAmount() {","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"sRanay"},"content":" return amount;","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"Jonoans"},"content":" public void setAmount(Double amount) {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"sRanay"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"sRanay"},"content":" public LocalDate getDate() {","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"sRanay"},"content":" return date;","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"sRanay"},"content":" public void setDate(LocalDate date) {","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"sRanay"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"sRanay"},"content":" public String getDescription() {","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"sRanay"},"content":" return description;","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"sRanay"},"content":" public void setDescription(String description) {","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"sRanay"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":43,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":44,"author":{"gitId":"sRanay"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"Jonoans":8,"sRanay":36}},{"path":"src/main/java/seedu/duke/command/AddExpenseCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Jonoans"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.classes.Expense;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.classes.StateManager;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.classes.Transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.parser.Parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Jonoans"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Jonoans"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Jonoans"},"content":"public class AddExpenseCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Jonoans"},"content":" private static final String AMOUNT_ARG \u003d \"amount\";","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Jonoans"},"content":" private static final String[] HEADERS \u003d {\"Description\", \"Amount\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Jonoans"},"content":" private static final String SUCCESS_PRINT \u003d \"Nice! The following expense has been tracked:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Jonoans"},"content":" private static final String MISSING_DESC \u003d \"Description cannot be empty...\";","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Jonoans"},"content":" private static final String MISSING_AMOUNT \u003d \"Amount cannot be empty...\";","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"Jonoans"},"content":" private static final String BAD_AMOUNT \u003d \"Invalid amount value specified...\";","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Jonoans"},"content":" public AddExpenseCommand(String description, HashMap\u003cString, String\u003e args) {","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Jonoans"},"content":" super(description, args);","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Jonoans"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Jonoans"},"content":" public void execute(Ui ui) throws DukeException {","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Jonoans"},"content":" // TODO:","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Jonoans"},"content":" // Add dates arg to command","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"Jonoans"},"content":" throwIfInvalidDescOrArgs();","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"Jonoans"},"content":" Transaction transaction \u003d prepareTransaction();","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"Jonoans"},"content":" Expense expense \u003d addNewExpense(transaction);","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"Jonoans"},"content":" printSuccess(ui, expense);","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Jonoans"},"content":" private Expense addNewExpense(Transaction transaction) {","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Jonoans"},"content":" Expense expense \u003d new Expense(transaction, null);","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"Jonoans"},"content":" StateManager.getStateManager().addExpense(expense);","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"Jonoans"},"content":" return expense;","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Jonoans"},"content":" private Transaction prepareTransaction() {","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Jonoans"},"content":" String description \u003d getDescription();","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"Jonoans"},"content":" Double amount \u003d Parser.parseNonNegativeDouble(getArg(AMOUNT_ARG));","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Jonoans"},"content":" return new Transaction(description, amount, null);","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Jonoans"},"content":" private void printSuccess(Ui ui, Expense expense) {","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"Jonoans"},"content":" Transaction transaction \u003d expense.getTransaction();","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cString\u003e printValues \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"Jonoans"},"content":" printValues.add(transaction.getDescription());","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"Jonoans"},"content":" printValues.add(ui.formatAmount(transaction.getAmount()));","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"Jonoans"},"content":" ui.print(SUCCESS_PRINT);","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"Jonoans"},"content":" ui.printTableRow(printValues, HEADERS);","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"Jonoans"},"content":" private void throwIfInvalidDescOrArgs() throws DukeException {","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"Jonoans"},"content":" // TODO:","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"Jonoans"},"content":" // Ensure category is non-null - after V1.0","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"Jonoans"},"content":" assert getDescription() !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"Jonoans"},"content":" assert getArgs() !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"Jonoans"},"content":" if (getDescription().isBlank()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"Jonoans"},"content":" throw new DukeException(MISSING_DESC);","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"Jonoans"},"content":" String amountArg \u003d getArg(AMOUNT_ARG);","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"Jonoans"},"content":" if (amountArg \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"Jonoans"},"content":" throw new DukeException(MISSING_AMOUNT);","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"Jonoans"},"content":" Double amount \u003d Parser.parseNonNegativeDouble(amountArg);","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"Jonoans"},"content":" if (amount \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"Jonoans"},"content":" throw new DukeException(BAD_AMOUNT);","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"Jonoans"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Jonoans":77}},{"path":"src/main/java/seedu/duke/command/AddIncomeCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Jonoans"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.classes.Income;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.classes.StateManager;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.classes.Transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.parser.Parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Jonoans"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Jonoans"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Jonoans"},"content":"public class AddIncomeCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Jonoans"},"content":" private static final String AMOUNT_ARG \u003d \"amount\";","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Jonoans"},"content":" private static final String[] HEADERS \u003d {\"Description\", \"Amount\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Jonoans"},"content":" private static final String SUCCESS_PRINT \u003d \"Nice! The following income has been tracked:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Jonoans"},"content":" private static final String MISSING_DESC \u003d \"Description cannot be empty...\";","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Jonoans"},"content":" private static final String MISSING_AMOUNT \u003d \"Amount cannot be empty...\";","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"Jonoans"},"content":" private static final String BAD_AMOUNT \u003d \"Invalid amount value specified...\";","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Jonoans"},"content":" public AddIncomeCommand(String description, HashMap\u003cString, String\u003e args) {","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Jonoans"},"content":" super(description, args);","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Jonoans"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Jonoans"},"content":" public void execute(Ui ui) throws DukeException {","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Jonoans"},"content":" // TODO:","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Jonoans"},"content":" // Add dates arg to command","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"Jonoans"},"content":" throwIfInvalidDescOrArgs();","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"Jonoans"},"content":" Transaction transaction \u003d prepareTransaction();","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"Jonoans"},"content":" Income income \u003d addNewIncome(transaction);","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"Jonoans"},"content":" printSuccess(ui, income);","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Jonoans"},"content":" private Income addNewIncome(Transaction transaction) {","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Jonoans"},"content":" Income income \u003d new Income(transaction, null);","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"Jonoans"},"content":" StateManager.getStateManager().addIncome(income);","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"Jonoans"},"content":" return income;","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Jonoans"},"content":" private Transaction prepareTransaction() {","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Jonoans"},"content":" String description \u003d getDescription();","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"Jonoans"},"content":" Double amount \u003d Parser.parseNonNegativeDouble(getArg(AMOUNT_ARG));","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Jonoans"},"content":" return new Transaction(description, amount, null);","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Jonoans"},"content":" private void printSuccess(Ui ui, Income income) {","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"Jonoans"},"content":" Transaction transaction \u003d income.getTransaction();","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cString\u003e printValues \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"Jonoans"},"content":" printValues.add(transaction.getDescription());","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"Jonoans"},"content":" printValues.add(ui.formatAmount(transaction.getAmount()));","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"Jonoans"},"content":" ui.print(SUCCESS_PRINT);","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"Jonoans"},"content":" ui.printTableRow(printValues, HEADERS);","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"Jonoans"},"content":" private void throwIfInvalidDescOrArgs() throws DukeException {","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"Jonoans"},"content":" // TODO:","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"Jonoans"},"content":" // Ensure goal is non-null - after V1.0","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"Jonoans"},"content":" assert getDescription() !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"Jonoans"},"content":" assert getArgs() !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"Jonoans"},"content":" if (getDescription().isBlank()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"Jonoans"},"content":" throw new DukeException(MISSING_DESC);","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"Jonoans"},"content":" String amountArg \u003d getArg(AMOUNT_ARG);","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"Jonoans"},"content":" if (amountArg \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"Jonoans"},"content":" throw new DukeException(MISSING_AMOUNT);","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"Jonoans"},"content":" Double amount \u003d Parser.parseNonNegativeDouble(amountArg);","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"Jonoans"},"content":" if (amount \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"Jonoans"},"content":" throw new DukeException(BAD_AMOUNT);","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"Jonoans"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Jonoans":77}},{"path":"src/main/java/seedu/duke/command/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ChoonSiang"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"Jonoans"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"ChoonSiang"},"content":"public abstract class Command {","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"Jonoans"},"content":" private final String description;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Jonoans"},"content":" private final HashMap\u003cString, String\u003e args;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Jonoans"},"content":" public Command() {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Jonoans"},"content":" description \u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Jonoans"},"content":" args \u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Jonoans"},"content":" public Command(String description, HashMap\u003cString, String\u003e args) {","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Jonoans"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Jonoans"},"content":" this.args \u003d args;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Jonoans"},"content":" protected String getDescription() {","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Jonoans"},"content":" return description;","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Jonoans"},"content":" protected String getArg(String key) {","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Jonoans"},"content":" assert args !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Jonoans"},"content":" return args.get(key);","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"Jonoans"},"content":" protected HashMap\u003cString, String\u003e getArgs() {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"Jonoans"},"content":" return args;","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"Jonoans"},"content":" public abstract void execute(Ui ui) throws DukeException;","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"ChoonSiang"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"Jonoans":29,"ChoonSiang":8}},{"path":"src/main/java/seedu/duke/command/ExitCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ChoonSiang"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"ChoonSiang"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"ChoonSiang"},"content":" @Override","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"ChoonSiang"},"content":" public void execute(Ui ui) {","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"ChoonSiang"},"content":" ui.printBye();","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"ChoonSiang"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"ChoonSiang":11}},{"path":"src/main/java/seedu/duke/command/HelpCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"sRanay"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"sRanay"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"sRanay"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"sRanay"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"sRanay"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"sRanay"},"content":" private static final String LINE_DIVIDER \u003d \"\";","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"sRanay"},"content":" private static final String[] FULL_LIST_HEADERS \u003d {\"Command\", \"Description\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"sRanay"},"content":" private static final String[] FLAG_DESCRIPTION_HEADERS \u003d {\"Option\", \"Description\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"sRanay"},"content":" private static final Integer[] CUSTOM_COLUMN_WIDTH \u003d {10, 1000};","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"sRanay"},"content":" private static final String HELP_COMMAND \u003d \"help\";","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"sRanay"},"content":" private static final String HELP_DESCRIPTION \u003d \"Shows a list of all the commands available to the user\";","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"sRanay"},"content":" private static final String IN_COMMAND \u003d \"in\";","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"sRanay"},"content":" private static final String IN_DESCRIPTION \u003d \"Adds an income towards goal\";","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"sRanay"},"content":" private static final String IN_COMMAND_USAGE \u003d \" DESCRIPTION /amount AMOUNT /goal GOAL [/date DATE in DDMMYYYY]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"sRanay"},"content":" private static final String[] IN_COMMAND_FLAGS \u003d {\"/amount\", \"/goal\", \"/date\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"sRanay"},"content":" private static final String[] IN_COMMAND_FLAGS_DESCRIPTION \u003d {\"Amount to be added\", ","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"sRanay"},"content":" \"The goal to classify it under\", ","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"sRanay"},"content":" \"Date of the transaction\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"sRanay"},"content":" private static final String OUT_COMMAND \u003d \"out\";","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"sRanay"},"content":" private static final String OUT_DESCRIPTION \u003d \"Adds an expense for a category\";","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"sRanay"},"content":" private static final String OUT_COMMAND_USAGE \u003d \" DESCRIPTION /amount AMOUNT \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"sRanay"},"content":" \"/category CATEGORY [/date DATE in DDMMYYYY]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"sRanay"},"content":" private static final String[] OUT_COMMAND_FLAGS \u003d {\"/amount\", \"/category\", \"/date\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"sRanay"},"content":" private static final String[] OUT_COMMAND_FLAGS_DESCRIPTION \u003d {\"Amount to be deducted\", ","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"sRanay"},"content":" \"The spending category to classify it under\", ","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"sRanay"},"content":" \"Date of the transaction\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"sRanay"},"content":" private static final String DELETE_COMMAND \u003d \"delete\";","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"sRanay"},"content":" private static final String DELETE_DESCRIPTION \u003d \"Delete a specific transaction based on the index in the list\";","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"sRanay"},"content":" private static final String DELETE_COMMAND_USAGE \u003d \" INDEX /type (in | out)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"sRanay"},"content":" private static final String[] DELETE_COMMAND_FLAGS \u003d {\"/type\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"sRanay"},"content":" private static final String[] DELETE_COMMAND_FLAGS_DESCRIPTION \u003d {\"To set whether it is a in or out transaction\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"sRanay"},"content":" private static final String LIST_COMMAND \u003d \"list\";","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"sRanay"},"content":" private static final String LIST_DESCRIPTION \u003d \"Shows a list of all added transactions based on type\";","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"sRanay"},"content":" private static final String LIST_COMMAND_USAGE \u003d \" /type (in | out) [/goal GOAL] [/category CATEGORY]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"sRanay"},"content":" private static final String[] LIST_COMMAND_FLAGS \u003d {\"/type\", \"/goal\", \"/category\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"sRanay"},"content":" private static final String[] LIST_COMMAND_FLAGS_DESCRIPTION \u003d {\"To set whether it is a in or out transaction\", ","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"sRanay"},"content":" \"The goal which it is classify under\", ","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"sRanay"},"content":" \"The spending category it is classify under\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"sRanay"},"content":" private static final String USAGE_PREFIX \u003d \"Usage: \";","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"sRanay"},"content":" private static final String INVALID_COMMAND \u003d \"NO SUCH COMMAND\";","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"sRanay"},"content":" private ArrayList\u003cArrayList\u003cString\u003e\u003e helpList;","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"sRanay"},"content":" public HelpCommand(String command, HashMap\u003cString, String\u003e args) {","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"sRanay"},"content":" super(command, args);","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"sRanay"},"content":" helpList \u003d new ArrayList\u003cArrayList\u003cString\u003e\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"sRanay"},"content":" public ArrayList\u003cString\u003e convertCommandList(String command, String description) {","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"sRanay"},"content":" ArrayList\u003cString\u003e tableData \u003d new ArrayList\u003cString\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"sRanay"},"content":" tableData.add(command);","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"sRanay"},"content":" tableData.add(description);","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"sRanay"},"content":" return tableData;","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"sRanay"},"content":" public ArrayList\u003cString\u003e printHelpDescription() {","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"sRanay"},"content":" ArrayList\u003cString\u003e help \u003d convertCommandList(HELP_COMMAND, HELP_DESCRIPTION);","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"sRanay"},"content":" return help;","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"sRanay"},"content":" public ArrayList\u003cString\u003e printInDescription() {","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"sRanay"},"content":" ArrayList\u003cString\u003e in \u003d convertCommandList(IN_COMMAND, IN_DESCRIPTION);","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"sRanay"},"content":" return in;","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"sRanay"},"content":" public ArrayList\u003cString\u003e printOutDescription() {","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"sRanay"},"content":" ArrayList\u003cString\u003e out \u003d convertCommandList(OUT_COMMAND, OUT_DESCRIPTION);","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"sRanay"},"content":" return out; ","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"sRanay"},"content":" public ArrayList\u003cString\u003e printDeleteDescription() {","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"sRanay"},"content":" ArrayList\u003cString\u003e delete \u003d convertCommandList(DELETE_COMMAND, DELETE_DESCRIPTION);","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"sRanay"},"content":" return delete;","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"sRanay"},"content":" public ArrayList\u003cString\u003e printListDescription() {","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"sRanay"},"content":" ArrayList\u003cString\u003e list \u003d convertCommandList(LIST_COMMAND, LIST_DESCRIPTION);","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"sRanay"},"content":" return list;","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"sRanay"},"content":" public ArrayList\u003cArrayList\u003cString\u003e\u003e printFullList() {","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"sRanay"},"content":" this.helpList.add(printHelpDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"sRanay"},"content":" this.helpList.add(printInDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"sRanay"},"content":" this.helpList.add(printOutDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"sRanay"},"content":" this.helpList.add(printDeleteDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"sRanay"},"content":" this.helpList.add(printListDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"sRanay"},"content":" assert this.helpList !\u003d null;","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"sRanay"},"content":" return this.helpList;","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"sRanay"},"content":" public String helpUsage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"sRanay"},"content":" return USAGE_PREFIX + HELP_COMMAND;","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"sRanay"},"content":" public String inUsage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"sRanay"},"content":" return USAGE_PREFIX + IN_COMMAND + IN_COMMAND_USAGE;","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"sRanay"},"content":" public String outUsage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"sRanay"},"content":" return USAGE_PREFIX + OUT_COMMAND + OUT_COMMAND_USAGE;","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"sRanay"},"content":" public String deleteUsage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"sRanay"},"content":" return USAGE_PREFIX + DELETE_COMMAND + DELETE_COMMAND_USAGE;","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"sRanay"},"content":" public String listUsage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"sRanay"},"content":" return USAGE_PREFIX + LIST_COMMAND + LIST_COMMAND_USAGE;","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"sRanay"},"content":" public void convertIntoList(String[] flags, String[] description) {","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"sRanay"},"content":" for (int i \u003d 0; i \u003c flags.length; i++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"sRanay"},"content":" ArrayList\u003cString\u003e row \u003d new ArrayList\u003cString\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"sRanay"},"content":" row.add(flags[i]);","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"sRanay"},"content":" row.add(description[i]);","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"sRanay"},"content":" this.helpList.add(row);","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":122,"author":{"gitId":"sRanay"},"content":" public void updateOutput(Ui ui) {","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"sRanay"},"content":" if (getDescription().isBlank()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":124,"author":{"gitId":"sRanay"},"content":" printFullList();","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"sRanay"},"content":" ui.printTableRows(this.helpList, FULL_LIST_HEADERS, CUSTOM_COLUMN_WIDTH);","lastModifiedDate":"2023-10-17"},{"lineNumber":126,"author":{"gitId":"sRanay"},"content":" return;","lastModifiedDate":"2023-10-17"},{"lineNumber":127,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"sRanay"},"content":" ","lastModifiedDate":"2023-10-17"},{"lineNumber":129,"author":{"gitId":"sRanay"},"content":" switch (getDescription().toLowerCase()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"sRanay"},"content":" case \"help\":","lastModifiedDate":"2023-10-16"},{"lineNumber":131,"author":{"gitId":"sRanay"},"content":" ui.print(helpUsage());","lastModifiedDate":"2023-10-17"},{"lineNumber":132,"author":{"gitId":"sRanay"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":133,"author":{"gitId":"sRanay"},"content":" case \"in\":","lastModifiedDate":"2023-10-16"},{"lineNumber":134,"author":{"gitId":"sRanay"},"content":" ui.print(inUsage());","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"sRanay"},"content":" convertIntoList(IN_COMMAND_FLAGS, IN_COMMAND_FLAGS_DESCRIPTION);","lastModifiedDate":"2023-10-17"},{"lineNumber":136,"author":{"gitId":"sRanay"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":137,"author":{"gitId":"sRanay"},"content":" case \"out\":","lastModifiedDate":"2023-10-16"},{"lineNumber":138,"author":{"gitId":"sRanay"},"content":" ui.print(outUsage());","lastModifiedDate":"2023-10-17"},{"lineNumber":139,"author":{"gitId":"sRanay"},"content":" convertIntoList(OUT_COMMAND_FLAGS, OUT_COMMAND_FLAGS_DESCRIPTION);","lastModifiedDate":"2023-10-17"},{"lineNumber":140,"author":{"gitId":"sRanay"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":141,"author":{"gitId":"sRanay"},"content":" case \"delete\":","lastModifiedDate":"2023-10-16"},{"lineNumber":142,"author":{"gitId":"sRanay"},"content":" ui.print(deleteUsage());","lastModifiedDate":"2023-10-17"},{"lineNumber":143,"author":{"gitId":"sRanay"},"content":" convertIntoList(DELETE_COMMAND_FLAGS, DELETE_COMMAND_FLAGS_DESCRIPTION);","lastModifiedDate":"2023-10-17"},{"lineNumber":144,"author":{"gitId":"sRanay"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":145,"author":{"gitId":"sRanay"},"content":" case \"list\":","lastModifiedDate":"2023-10-16"},{"lineNumber":146,"author":{"gitId":"sRanay"},"content":" ui.print(listUsage());","lastModifiedDate":"2023-10-17"},{"lineNumber":147,"author":{"gitId":"sRanay"},"content":" convertIntoList(LIST_COMMAND_FLAGS, LIST_COMMAND_FLAGS_DESCRIPTION);","lastModifiedDate":"2023-10-17"},{"lineNumber":148,"author":{"gitId":"sRanay"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":149,"author":{"gitId":"sRanay"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":150,"author":{"gitId":"sRanay"},"content":" ui.print(INVALID_COMMAND);","lastModifiedDate":"2023-10-17"},{"lineNumber":151,"author":{"gitId":"sRanay"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":152,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":153,"author":{"gitId":"sRanay"},"content":" ","lastModifiedDate":"2023-10-17"},{"lineNumber":154,"author":{"gitId":"sRanay"},"content":" if (!this.helpList.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":155,"author":{"gitId":"sRanay"},"content":" ui.printTableRows(this.helpList, FLAG_DESCRIPTION_HEADERS, CUSTOM_COLUMN_WIDTH);","lastModifiedDate":"2023-10-17"},{"lineNumber":156,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":157,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":158,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":159,"author":{"gitId":"sRanay"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":160,"author":{"gitId":"sRanay"},"content":" public void execute(Ui ui) {","lastModifiedDate":"2023-10-17"},{"lineNumber":161,"author":{"gitId":"sRanay"},"content":" ui.print(LINE_DIVIDER);","lastModifiedDate":"2023-10-17"},{"lineNumber":162,"author":{"gitId":"sRanay"},"content":" updateOutput(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":163,"author":{"gitId":"sRanay"},"content":" ui.print(LINE_DIVIDER);","lastModifiedDate":"2023-10-17"},{"lineNumber":164,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":165,"author":{"gitId":"sRanay"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"sRanay":165}},{"path":"src/main/java/seedu/duke/command/ListCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"hooami"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"hooami"},"content":"import seedu.duke.classes.Expense;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"hooami"},"content":"import seedu.duke.classes.Income;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"hooami"},"content":"import seedu.duke.classes.StateManager;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"hooami"},"content":"import seedu.duke.classes.Transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"hooami"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"hooami"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"hooami"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"hooami"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"hooami"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"hooami"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"hooami"},"content":" private static final String INVALID_TYPE_FORMAT \u003d \"I\u0027m sorry, you need to specify a type in the format \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"hooami"},"content":" \"\u0027/type in\u0027 or \u0027/type out\u0027\";","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"hooami"},"content":" private static final String INVALID_GOAL_FORMAT \u003d \"You have entered /goal, but you did not enter anything\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"hooami"},"content":" \" after that\";","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"hooami"},"content":" private static final String INVALID_CATEGORY_FORMAT \u003d \"You have entered /category, but you did not enter\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"hooami"},"content":" \" anything after that\";","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"hooami"},"content":" private static final String EMPTY_LIST \u003d \"It appears that we have came up empty. Why not try adding some\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"hooami"},"content":" \" transactions first?\";","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"hooami"},"content":" private static final String[] HEADERS \u003d {\"ID\", \"Description\", \"Date\", \"Amount\", \"Goal\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"hooami"},"content":" private static final String IN \u003d \"IN TRANSACTIONS\";","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"hooami"},"content":" private static final String OUT \u003d \"OUT TRANSACTIONS\";","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"hooami"},"content":" private Ui ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"hooami"},"content":" public ListCommand(String description, HashMap\u003cString, String\u003e args) {","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"hooami"},"content":" super(description, args);","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"hooami"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"hooami"},"content":" public void execute(Ui ui) throws DukeException {","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"hooami"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"hooami"},"content":" validateArgs();","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"hooami"},"content":" listTypeHandler();","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"hooami"},"content":" // Description gets ignored for list","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"hooami"},"content":" private void validateArgs() throws DukeException {","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"hooami"},"content":" if (!getArgs().containsKey(\"type\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"hooami"},"content":" throw new DukeException(INVALID_TYPE_FORMAT);","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"hooami"},"content":" String type \u003d getArg(\"type\");","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"hooami"},"content":" if (!type.equals(\"in\") \u0026\u0026 !type.equals(\"out\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"hooami"},"content":" throw new DukeException(INVALID_TYPE_FORMAT);","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"hooami"},"content":" if (getArgs().containsKey(\"goal\") \u0026\u0026 getArg(\"goal\").isBlank()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"hooami"},"content":" throw new DukeException(INVALID_GOAL_FORMAT);","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"hooami"},"content":" if (getArgs().containsKey(\"category\") \u0026\u0026 getArg(\"goal\").isBlank()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"hooami"},"content":" throw new DukeException(INVALID_CATEGORY_FORMAT);","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"hooami"},"content":" private void listTypeHandler() throws DukeException {","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"hooami"},"content":" ArrayList\u003cArrayList\u003cString\u003e\u003e returnArray;","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"hooami"},"content":" String type \u003d getArg(\"type\");","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"hooami"},"content":" assert type !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"hooami"},"content":" if (type.equals(\"in\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"hooami"},"content":" listIncome();","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"hooami"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"hooami"},"content":" listExpenses();","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"hooami"},"content":" private void printList(ArrayList\u003cArrayList\u003cString\u003e\u003e listArray, String headerMessage) {","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"hooami"},"content":" ui.listTransactions(listArray, HEADERS, headerMessage);","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"hooami"},"content":" private void listIncome() throws DukeException {","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"hooami"},"content":" ArrayList\u003cIncome\u003e incomeArray \u003d StateManager.getStateManager().getAllIncomes();","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"hooami"},"content":" ArrayList\u003cArrayList\u003cString\u003e\u003e printIncomes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"hooami"},"content":" if (incomeArray \u003d\u003d null || incomeArray.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"hooami"},"content":" throw new DukeException(EMPTY_LIST);","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"hooami"},"content":" int index \u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"hooami"},"content":" for (Income i : incomeArray) {","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"hooami"},"content":" Transaction currentTransaction \u003d i.getTransaction();","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"hooami"},"content":" String description \u003d currentTransaction.getDescription();","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"hooami"},"content":" String date \u003d currentTransaction.getDate().toString();","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"hooami"},"content":" String amount \u003d String.valueOf(ui.formatAmount(currentTransaction.getAmount()));","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"hooami"},"content":" String goal \u003d \"TBC\";","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"hooami"},"content":" // TODO uncomment once goal is implemented","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"hooami"},"content":" // String goal \u003d i.getGoal().getDescription();","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"hooami"},"content":" printIncomes.add(new ArrayList\u003c\u003e(Arrays.asList(String.valueOf(index), description, date, amount, goal)));","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"hooami"},"content":" index++;","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"hooami"},"content":" printList(printIncomes, IN);","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"hooami"},"content":" private void listExpenses() throws DukeException {","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"hooami"},"content":" ArrayList\u003cExpense\u003e expenseArray \u003d StateManager.getStateManager().getAllExpenses();","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"hooami"},"content":" ArrayList\u003cArrayList\u003cString\u003e\u003e printExpenses \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"hooami"},"content":" if (expenseArray \u003d\u003d null || expenseArray.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"hooami"},"content":" throw new DukeException(EMPTY_LIST);","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"hooami"},"content":" int index \u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"hooami"},"content":" for (Expense i : expenseArray) {","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"hooami"},"content":" Transaction currentExpense \u003d i.getTransaction();","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"hooami"},"content":" String description \u003d currentExpense.getDescription();","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"hooami"},"content":" String date \u003d currentExpense.getDate().toString();","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"hooami"},"content":" String amount \u003d String.valueOf(currentExpense.getAmount());","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"hooami"},"content":" String category \u003d \"TBC\";","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"hooami"},"content":" // TODO uncomment once category is implemented","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"hooami"},"content":" // String category \u003d i.getCategory().getName();","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"hooami"},"content":" printExpenses.add(new ArrayList\u003c\u003e(Arrays.asList(String.valueOf(index), description, date,","lastModifiedDate":"2023-10-16"},{"lineNumber":111,"author":{"gitId":"hooami"},"content":" amount, category)));","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"hooami"},"content":" index++;","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"hooami"},"content":" printList(printExpenses, OUT);","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"hooami"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"hooami":116}},{"path":"src/main/java/seedu/duke/command/RemoveTransactionCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ChoonSiang"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.classes.StateManager;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"ChoonSiang"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"ChoonSiang"},"content":"public class RemoveTransactionCommand extends Command {","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"ChoonSiang"},"content":" private static final String MISSING_IDX \u003d \"Index cannot be empty...\";","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"ChoonSiang"},"content":" private static final String INVALID_IDX \u003d \"Please enter a valid index.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"ChoonSiang"},"content":" private static final String MISSING_TYPE \u003d \"Please indicate the transaction type.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"ChoonSiang"},"content":" private static final String INVALID_TYPE \u003d \"Please indicate either /type in or /type out.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"ChoonSiang"},"content":" private static final String ERROR_MSG \u003d \"Error encountered when removing transaction.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"ChoonSiang"},"content":" public RemoveTransactionCommand(String description, HashMap\u003cString, String\u003e args) {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"ChoonSiang"},"content":" super(description, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"ChoonSiang"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"ChoonSiang"},"content":" public void execute(Ui ui) throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"ChoonSiang"},"content":" throwIfInvalidDescOrArgs();","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"ChoonSiang"},"content":" removeTransaction(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"ChoonSiang"},"content":" private void throwIfInvalidDescOrArgs() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"ChoonSiang"},"content":" assert getDescription() !\u003d null;","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"ChoonSiang"},"content":" assert getArgs() !\u003d null;","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"ChoonSiang"},"content":" if (getDescription().isBlank()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"ChoonSiang"},"content":" throw new DukeException(MISSING_IDX);","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ChoonSiang"},"content":" String description \u003d getDescription();","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"ChoonSiang"},"content":" if (!isInteger(description)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"ChoonSiang"},"content":" throw new DukeException(INVALID_IDX);","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"ChoonSiang"},"content":" String typeArg \u003d getArg(\"type\");","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"ChoonSiang"},"content":" if (typeArg \u003d\u003d null) {","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"ChoonSiang"},"content":" throw new DukeException(MISSING_TYPE);","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"ChoonSiang"},"content":" if (!(typeArg.equalsIgnoreCase(\"in\") || typeArg.equalsIgnoreCase(\"out\"))) {","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"ChoonSiang"},"content":" throw new DukeException(INVALID_TYPE);","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"ChoonSiang"},"content":" private boolean isInteger(String description) {","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"ChoonSiang"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"ChoonSiang"},"content":" Integer.parseInt(description);","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"ChoonSiang"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"ChoonSiang"},"content":" return false;","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"ChoonSiang"},"content":" return true;","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"ChoonSiang"},"content":" private void removeTransaction(Ui ui) throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"ChoonSiang"},"content":" String type \u003d getArg(\"type\").toLowerCase();","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"ChoonSiang"},"content":" int maxSize \u003d getTransactionMaxSize(type);","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"ChoonSiang"},"content":" int idx \u003d parseIdx(maxSize) - 1; //-1 due to 0 based indexing for arraylist","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"ChoonSiang"},"content":" assert idx \u003e\u003d 0 : \"Index should be a valid integer greater than 0\";","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"ChoonSiang"},"content":" boolean isSuccess \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"ChoonSiang"},"content":" String transactionDescription \u003d \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"ChoonSiang"},"content":" if (type.equals(\"in\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"ChoonSiang"},"content":" transactionDescription \u003d StateManager.getStateManager().getIncome(idx)","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"ChoonSiang"},"content":" .getTransaction().getDescription();","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"ChoonSiang"},"content":" isSuccess \u003d StateManager.getStateManager().removeIncome(idx);","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"ChoonSiang"},"content":" } else if (type.equals(\"out\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"ChoonSiang"},"content":" transactionDescription \u003d StateManager.getStateManager().getExpense(idx)","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"ChoonSiang"},"content":" .getTransaction().getDescription();","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"ChoonSiang"},"content":" isSuccess \u003d StateManager.getStateManager().removeExpense(idx);","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"ChoonSiang"},"content":" if (!isSuccess) {","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"ChoonSiang"},"content":" throw new DukeException(ERROR_MSG);","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"ChoonSiang"},"content":" printSuccess(ui, transactionDescription, idx + 1); // idx + 1 for format to show to user","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"ChoonSiang"},"content":" private int getTransactionMaxSize(String type) {","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"ChoonSiang"},"content":" int maxSize \u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"ChoonSiang"},"content":" if (type.equals(\"in\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"ChoonSiang"},"content":" maxSize \u003d StateManager.getStateManager().getIncomesSize();","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"ChoonSiang"},"content":" } else if (type.equals(\"out\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"ChoonSiang"},"content":" maxSize \u003d StateManager.getStateManager().getExpensesSize();","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"ChoonSiang"},"content":" return maxSize;","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"ChoonSiang"},"content":" private int parseIdx(int maxSize) throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"ChoonSiang"},"content":" int index \u003d Integer.parseInt(getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"ChoonSiang"},"content":" if (index \u003c 1 || index \u003e maxSize) {","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"ChoonSiang"},"content":" throw new DukeException(INVALID_IDX);","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"ChoonSiang"},"content":" return index;","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"ChoonSiang"},"content":" private void printSuccess(Ui ui, String description, int idx) {","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"ChoonSiang"},"content":" String type \u003d getArg(\"type\").toLowerCase();","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"ChoonSiang"},"content":" String transactionType \u003d type.equals(\"in\") ? \"income\" : \"expense\";","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"ChoonSiang"},"content":" String msg \u003d \"Successfully remove \" + transactionType + \" no.\" + idx + \": \" + description;","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"ChoonSiang"},"content":" ui.print(msg);","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"ChoonSiang"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"ChoonSiang":109}},{"path":"src/main/java/seedu/duke/exception/DukeException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ChoonSiang"},"content":"package seedu.duke.exception;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"ChoonSiang"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"ChoonSiang"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"ChoonSiang"},"content":" super(message);","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"ChoonSiang"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"ChoonSiang":8}},{"path":"src/main/java/seedu/duke/parser/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ChoonSiang"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"hooami"},"content":"import seedu.duke.command.AddExpenseCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"hooami"},"content":"import seedu.duke.command.AddIncomeCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"hooami"},"content":"import seedu.duke.command.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"hooami"},"content":"import seedu.duke.command.ExitCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"sRanay"},"content":"import seedu.duke.command.HelpCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"hooami"},"content":"import seedu.duke.command.ListCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.command.RemoveTransactionCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"ChoonSiang"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"ChoonSiang"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"ChoonSiang"},"content":"public class Parser {","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"ChoonSiang"},"content":" private static final String SPACE_WITH_ARG_PREFIX \u003d \" /\";","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"ChoonSiang"},"content":" private static final String ARG_PREFIX \u003d \"/\";","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"ChoonSiang"},"content":" private static final String DELIM \u003d \" \";","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"ChoonSiang"},"content":" private static final String EMPTY_STRING \u003d \"\";","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"ChoonSiang"},"content":" public Parser() {","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"ChoonSiang"},"content":" public Command parse(String userInput) throws DukeException {","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"ChoonSiang"},"content":" String trimmedInput \u003d userInput.trim();","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"ChoonSiang"},"content":" String commandWord \u003d getCommandWord(trimmedInput);","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"ChoonSiang"},"content":" String description \u003d getDescription(trimmedInput);","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"ChoonSiang"},"content":" HashMap\u003cString, String\u003e argsMap \u003d getArguments(trimmedInput);","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"ChoonSiang"},"content":" return getCommand(commandWord, description, argsMap);","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"ChoonSiang"},"content":" public Command getCommand(String commandWord, String description,","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"ChoonSiang"},"content":" HashMap\u003cString, String\u003e argsMap) throws DukeException {","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"ChoonSiang"},"content":" switch (commandWord) {","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"ChoonSiang"},"content":" case \"bye\":","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"ChoonSiang"},"content":" return new ExitCommand();","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"Jonoans"},"content":" case \"in\":","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Jonoans"},"content":" return new AddIncomeCommand(description, argsMap);","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"Jonoans"},"content":" case \"out\":","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Jonoans"},"content":" return new AddExpenseCommand(description, argsMap);","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"hooami"},"content":" case \"list\":","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"hooami"},"content":" return new ListCommand(description, argsMap);","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"ChoonSiang"},"content":" case \"delete\":","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"ChoonSiang"},"content":" return new RemoveTransactionCommand(description, argsMap);","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"sRanay"},"content":" case \"help\":","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"sRanay"},"content":" return new HelpCommand(description, argsMap);","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"ChoonSiang"},"content":" default:","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"ChoonSiang"},"content":" throw new DukeException(\"Sorry I do not understand your command\");","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":54,"author":{"gitId":"ChoonSiang"},"content":" public String getCommandWord(String userInput) {","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"ChoonSiang"},"content":" return userInput.split(DELIM, 2)[0].toLowerCase();","lastModifiedDate":"2023-10-12"},{"lineNumber":56,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":58,"author":{"gitId":"ChoonSiang"},"content":" public String getDescription(String userInput) {","lastModifiedDate":"2023-10-12"},{"lineNumber":59,"author":{"gitId":"ChoonSiang"},"content":" String[] splitInput \u003d userInput.split(DELIM, 2);","lastModifiedDate":"2023-10-12"},{"lineNumber":60,"author":{"gitId":"ChoonSiang"},"content":" if (splitInput.length \u003c\u003d 1) {","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"ChoonSiang"},"content":" return EMPTY_STRING;","lastModifiedDate":"2023-10-12"},{"lineNumber":62,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"ChoonSiang"},"content":" String description \u003d splitInput[1].split(SPACE_WITH_ARG_PREFIX, 2)[0].trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"ChoonSiang"},"content":" if (description.startsWith(ARG_PREFIX)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"ChoonSiang"},"content":" return EMPTY_STRING;","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"ChoonSiang"},"content":" return description;","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":69,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":70,"author":{"gitId":"ChoonSiang"},"content":" public HashMap\u003cString, String\u003e getArguments(String userInput) {","lastModifiedDate":"2023-10-12"},{"lineNumber":71,"author":{"gitId":"ChoonSiang"},"content":" String[] splitInput \u003d userInput.split(SPACE_WITH_ARG_PREFIX, 2);","lastModifiedDate":"2023-10-12"},{"lineNumber":72,"author":{"gitId":"ChoonSiang"},"content":" HashMap\u003cString, String\u003e argsMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-12"},{"lineNumber":73,"author":{"gitId":"ChoonSiang"},"content":" if (splitInput.length \u003c\u003d 1) {","lastModifiedDate":"2023-10-12"},{"lineNumber":74,"author":{"gitId":"ChoonSiang"},"content":" return argsMap;","lastModifiedDate":"2023-10-12"},{"lineNumber":75,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":76,"author":{"gitId":"ChoonSiang"},"content":" String[] spitArgs \u003d splitInput[1].split(DELIM);","lastModifiedDate":"2023-10-12"},{"lineNumber":77,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":78,"author":{"gitId":"ChoonSiang"},"content":" String argName \u003d spitArgs[0];","lastModifiedDate":"2023-10-12"},{"lineNumber":79,"author":{"gitId":"ChoonSiang"},"content":" ArrayList\u003cString\u003e currentWords \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-12"},{"lineNumber":80,"author":{"gitId":"ChoonSiang"},"content":" for (int i \u003d 1; i \u003c spitArgs.length; i++) {","lastModifiedDate":"2023-10-12"},{"lineNumber":81,"author":{"gitId":"ChoonSiang"},"content":" String word \u003d spitArgs[i];","lastModifiedDate":"2023-10-12"},{"lineNumber":82,"author":{"gitId":"ChoonSiang"},"content":" if (word.startsWith(ARG_PREFIX)) {","lastModifiedDate":"2023-10-12"},{"lineNumber":83,"author":{"gitId":"ChoonSiang"},"content":" String argValue \u003d convertArgValueListToString(currentWords);","lastModifiedDate":"2023-10-12"},{"lineNumber":84,"author":{"gitId":"ChoonSiang"},"content":" argsMap.put(argName, argValue);","lastModifiedDate":"2023-10-12"},{"lineNumber":85,"author":{"gitId":"ChoonSiang"},"content":" argName \u003d word.substring(1);","lastModifiedDate":"2023-10-12"},{"lineNumber":86,"author":{"gitId":"ChoonSiang"},"content":" currentWords.clear();","lastModifiedDate":"2023-10-12"},{"lineNumber":87,"author":{"gitId":"ChoonSiang"},"content":" } else {","lastModifiedDate":"2023-10-12"},{"lineNumber":88,"author":{"gitId":"ChoonSiang"},"content":" currentWords.add(word);","lastModifiedDate":"2023-10-12"},{"lineNumber":89,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":90,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":91,"author":{"gitId":"ChoonSiang"},"content":" if (!currentWords.isEmpty()) {","lastModifiedDate":"2023-10-12"},{"lineNumber":92,"author":{"gitId":"ChoonSiang"},"content":" String argValue \u003d convertArgValueListToString(currentWords);","lastModifiedDate":"2023-10-12"},{"lineNumber":93,"author":{"gitId":"ChoonSiang"},"content":" argsMap.put(argName, argValue);","lastModifiedDate":"2023-10-12"},{"lineNumber":94,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":95,"author":{"gitId":"ChoonSiang"},"content":" return argsMap;","lastModifiedDate":"2023-10-12"},{"lineNumber":96,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":97,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":98,"author":{"gitId":"ChoonSiang"},"content":" public String convertArgValueListToString(ArrayList\u003cString\u003e argValues) {","lastModifiedDate":"2023-10-12"},{"lineNumber":99,"author":{"gitId":"ChoonSiang"},"content":" if (argValues.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"ChoonSiang"},"content":" return null;","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"ChoonSiang"},"content":" return String.join(DELIM, argValues).trim();","lastModifiedDate":"2023-10-12"},{"lineNumber":103,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":104,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"Jonoans"},"content":" public static Double parseDouble(String value) {","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"Jonoans"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"Jonoans"},"content":" return Double.parseDouble(value);","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"Jonoans"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"Jonoans"},"content":" return null;","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"Jonoans"},"content":" public static Double parseNonNegativeDouble(String value) {","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"Jonoans"},"content":" Double parsedValue \u003d parseDouble(value);","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"Jonoans"},"content":" if (parsedValue \u003d\u003d null || parsedValue \u003c 0) {","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"Jonoans"},"content":" return null;","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"Jonoans"},"content":" return parsedValue;","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"ChoonSiang"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"Jonoans":21,"sRanay":3,"hooami":7,"ChoonSiang":90}},{"path":"src/main/java/seedu/duke/ui/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ChoonSiang"},"content":"package seedu.duke.ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"Jonoans"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Jonoans"},"content":"import java.io.OutputStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Jonoans"},"content":"import java.nio.charset.StandardCharsets;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Jonoans"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Jonoans"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Jonoans"},"content":"import java.util.List;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"hooami"},"content":"import java.util.StringJoiner;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Jonoans"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Jonoans"},"content":"import java.util.stream.IntStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"ChoonSiang"},"content":"public class Ui {","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"Jonoans"},"content":" private static final String ELLIPSIS \u003d \"...\";","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"ChoonSiang"},"content":" private static final String PROGRAM_NAME \u003d \"FinText\";","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"Jonoans"},"content":" private static final char FILLER_CHAR \u003d \u0027 \u0027;","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"hooami"},"content":" private static final char LIST_SEPARATOR \u003d \u0027\u003d\u0027;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Jonoans"},"content":" private static final int COLUMN_WIDTH \u003d 10;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"hooami"},"content":" private static final int LIST_COLUMN_WIDTH \u003d 30;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"hooami"},"content":" private static final int ID_COLUMN_WIDTH \u003d 3;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"Jonoans"},"content":" private static final int SPACE_BETWEEN_COLS \u003d 3;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Jonoans"},"content":" private static final String AMOUNT_FORMAT \u003d \"%.2f\";","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Jonoans"},"content":" private static final char LINE_DELIMITER \u003d \u0027\\n\u0027;","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Jonoans"},"content":" private final OutputStream outputStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"ChoonSiang"},"content":" public Ui() {","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"Jonoans"},"content":" outputStream \u003d System.out;","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"Jonoans"},"content":" public Ui(OutputStream outputStream) {","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"Jonoans"},"content":" this.outputStream \u003d outputStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Jonoans"},"content":" public void printTableRow(ArrayList\u003cString\u003e rowValues) {","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Jonoans"},"content":" printTableRow(rowValues, null, null);","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Jonoans"},"content":" public void printTableRow(ArrayList\u003cString\u003e rowValues, String[] headers) {","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"Jonoans"},"content":" printTableRow(rowValues, headers, null);","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"Jonoans"},"content":" public void printTableRow(ArrayList\u003cString\u003e rowValues, String[] headers, Integer[] customWidths) {","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Jonoans"},"content":" assert rowValues !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cInteger\u003e colWidths \u003d printTableHeader(headers, customWidths);","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Jonoans"},"content":" if (colWidths \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Jonoans"},"content":" colWidths \u003d getDefaultColWidths(rowValues.size());","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"Jonoans"},"content":" colWidths \u003d mergeColWidths(colWidths, customWidths);","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"Jonoans"},"content":" print(formatColumnValues(colWidths, rowValues));","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"Jonoans"},"content":" public void printTableRows(ArrayList\u003cArrayList\u003cString\u003e\u003e rows) {","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"Jonoans"},"content":" printTableRows(rows, null);","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"Jonoans"},"content":" public void printTableRows(ArrayList\u003cArrayList\u003cString\u003e\u003e rows, String[] headers) {","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"Jonoans"},"content":" printTableRows(rows, headers, null);","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"Jonoans"},"content":" public void printTableRows(ArrayList\u003cArrayList\u003cString\u003e\u003e rows, String[] headers, Integer[] customWidths) {","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"Jonoans"},"content":" assert rows !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cInteger\u003e colWidths \u003d printTableHeader(headers, customWidths);","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"Jonoans"},"content":" if (rows.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"Jonoans"},"content":" return;","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"Jonoans"},"content":" if (colWidths \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"Jonoans"},"content":" colWidths \u003d getPrintWidths(genColWidths(rows.get(0).size(), 0), customWidths);","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"Jonoans"},"content":" for (ArrayList\u003cString\u003e rowValues : rows) {","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"Jonoans"},"content":" print(formatColumnValues(colWidths, rowValues));","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"Jonoans"},"content":" public ArrayList\u003cInteger\u003e printTableHeader(String[] headers, Integer[] customWidths) {","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"Jonoans"},"content":" if (headers \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"Jonoans"},"content":" return null;","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cInteger\u003e colWidths \u003d (ArrayList\u003cInteger\u003e) Arrays.stream(headers)","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"Jonoans"},"content":" .parallel()","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"Jonoans"},"content":" .map(String::length)","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"Jonoans"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"Jonoans"},"content":" colWidths \u003d getPrintWidths(colWidths, customWidths);","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"Jonoans"},"content":" List\u003cString\u003e headerList \u003d Arrays.asList(headers);","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"Jonoans"},"content":" print(formatColumnValues(colWidths, new ArrayList\u003c\u003e(headerList)));","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"Jonoans"},"content":" return colWidths;","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"Jonoans"},"content":" public String formatAmount(Double value) {","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"Jonoans"},"content":" return String.format(AMOUNT_FORMAT, value);","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"Jonoans"},"content":" public void print(String value) {","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"Jonoans"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"Jonoans"},"content":" outputStream.write(value.getBytes(StandardCharsets.UTF_8));","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"Jonoans"},"content":" outputStream.write(LINE_DELIMITER);","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"Jonoans"},"content":" outputStream.flush();","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"Jonoans"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"Jonoans"},"content":" // Fail quietly for now","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"ChoonSiang"},"content":" public void printGreeting() {","lastModifiedDate":"2023-10-12"},{"lineNumber":108,"author":{"gitId":"Jonoans"},"content":" print(\"Welcome to \" + PROGRAM_NAME + \", your personal finance tracker.\");","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":110,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":111,"author":{"gitId":"ChoonSiang"},"content":" public void printBye() {","lastModifiedDate":"2023-10-12"},{"lineNumber":112,"author":{"gitId":"Jonoans"},"content":" print(\"Bye Bye!\");","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":114,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":115,"author":{"gitId":"Jonoans"},"content":" private ArrayList\u003cInteger\u003e genColWidths(int length, int width) {","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"Jonoans"},"content":" return (ArrayList\u003cInteger\u003e) IntStream.range(0, length)","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"Jonoans"},"content":" .mapToObj(i -\u003e width)","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"Jonoans"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"Jonoans"},"content":" private ArrayList\u003cInteger\u003e getDefaultColWidths(int length) {","lastModifiedDate":"2023-10-17"},{"lineNumber":122,"author":{"gitId":"Jonoans"},"content":" return genColWidths(length, COLUMN_WIDTH);","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"Jonoans"},"content":" private ArrayList\u003cInteger\u003e getPrintWidths(ArrayList\u003cInteger\u003e colWidths, Integer[] customWidths) {","lastModifiedDate":"2023-10-16"},{"lineNumber":126,"author":{"gitId":"Jonoans"},"content":" if (customWidths \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":127,"author":{"gitId":"Jonoans"},"content":" colWidths \u003d mergeColWidths(colWidths, getDefaultColWidths(colWidths.size()));","lastModifiedDate":"2023-10-16"},{"lineNumber":128,"author":{"gitId":"Jonoans"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":129,"author":{"gitId":"Jonoans"},"content":" colWidths \u003d mergeColWidths(colWidths, customWidths);","lastModifiedDate":"2023-10-16"},{"lineNumber":130,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":131,"author":{"gitId":"Jonoans"},"content":" return colWidths;","lastModifiedDate":"2023-10-16"},{"lineNumber":132,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":133,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":134,"author":{"gitId":"Jonoans"},"content":" private ArrayList\u003cInteger\u003e mergeColWidths(ArrayList\u003cInteger\u003e colWidths, ArrayList\u003cInteger\u003e customWidths) {","lastModifiedDate":"2023-10-16"},{"lineNumber":135,"author":{"gitId":"Jonoans"},"content":" if (customWidths \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":136,"author":{"gitId":"Jonoans"},"content":" return mergeColWidths(colWidths, (Integer[]) null);","lastModifiedDate":"2023-10-16"},{"lineNumber":137,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":138,"author":{"gitId":"Jonoans"},"content":" Integer[] customWidthArray \u003d new Integer[customWidths.size()];","lastModifiedDate":"2023-10-16"},{"lineNumber":139,"author":{"gitId":"Jonoans"},"content":" customWidths.toArray(customWidthArray);","lastModifiedDate":"2023-10-16"},{"lineNumber":140,"author":{"gitId":"Jonoans"},"content":" return mergeColWidths(colWidths, customWidthArray);","lastModifiedDate":"2023-10-16"},{"lineNumber":141,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":142,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":143,"author":{"gitId":"Jonoans"},"content":" private ArrayList\u003cInteger\u003e mergeColWidths(ArrayList\u003cInteger\u003e colWidths, Integer[] customWidths) {","lastModifiedDate":"2023-10-15"},{"lineNumber":144,"author":{"gitId":"Jonoans"},"content":" assert colWidths !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":145,"author":{"gitId":"Jonoans"},"content":" if (customWidths \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":146,"author":{"gitId":"Jonoans"},"content":" return colWidths;","lastModifiedDate":"2023-10-15"},{"lineNumber":147,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":148,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":149,"author":{"gitId":"Jonoans"},"content":" assert colWidths.size() \u003c\u003d customWidths.length;","lastModifiedDate":"2023-10-15"},{"lineNumber":150,"author":{"gitId":"Jonoans"},"content":" int colCount \u003d colWidths.size();","lastModifiedDate":"2023-10-15"},{"lineNumber":151,"author":{"gitId":"Jonoans"},"content":" for (int i \u003d 0; i \u003c colCount; ++i) {","lastModifiedDate":"2023-10-15"},{"lineNumber":152,"author":{"gitId":"Jonoans"},"content":" colWidths.add(i, Math.max(colWidths.get(i), customWidths[i]));","lastModifiedDate":"2023-10-15"},{"lineNumber":153,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":154,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":155,"author":{"gitId":"Jonoans"},"content":" return colWidths;","lastModifiedDate":"2023-10-15"},{"lineNumber":156,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":157,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":158,"author":{"gitId":"Jonoans"},"content":" private String formatColumnValues(ArrayList\u003cInteger\u003e colWidths, ArrayList\u003cString\u003e colValues) {","lastModifiedDate":"2023-10-15"},{"lineNumber":159,"author":{"gitId":"Jonoans"},"content":" assert colWidths !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":160,"author":{"gitId":"Jonoans"},"content":" assert colValues !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":161,"author":{"gitId":"Jonoans"},"content":" assert colWidths.size() \u003e\u003d colValues.size();","lastModifiedDate":"2023-10-15"},{"lineNumber":162,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":163,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cString\u003e finalValues \u003d new ArrayList\u003c\u003e(colValues.size());","lastModifiedDate":"2023-10-15"},{"lineNumber":164,"author":{"gitId":"Jonoans"},"content":" int lastIdx \u003d colValues.size() - 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":165,"author":{"gitId":"Jonoans"},"content":" for (int i \u003d 0; i \u003c colValues.size(); ++i) {","lastModifiedDate":"2023-10-15"},{"lineNumber":166,"author":{"gitId":"Jonoans"},"content":" int maxWidth \u003d colWidths.get(i);","lastModifiedDate":"2023-10-15"},{"lineNumber":167,"author":{"gitId":"Jonoans"},"content":" String truncatedValue \u003d colValues.get(i);","lastModifiedDate":"2023-10-15"},{"lineNumber":168,"author":{"gitId":"Jonoans"},"content":" if (truncatedValue.length() \u003e maxWidth) {","lastModifiedDate":"2023-10-15"},{"lineNumber":169,"author":{"gitId":"Jonoans"},"content":" truncatedValue \u003d truncatedValue.substring(0, maxWidth - ELLIPSIS.length()) + ELLIPSIS;","lastModifiedDate":"2023-10-15"},{"lineNumber":170,"author":{"gitId":"Jonoans"},"content":" } else if (i !\u003d lastIdx) {","lastModifiedDate":"2023-10-15"},{"lineNumber":171,"author":{"gitId":"Jonoans"},"content":" char[] fillerChars \u003d new char[maxWidth - truncatedValue.length()];","lastModifiedDate":"2023-10-15"},{"lineNumber":172,"author":{"gitId":"Jonoans"},"content":" Arrays.fill(fillerChars, FILLER_CHAR);","lastModifiedDate":"2023-10-15"},{"lineNumber":173,"author":{"gitId":"Jonoans"},"content":" truncatedValue +\u003d new String(fillerChars);","lastModifiedDate":"2023-10-15"},{"lineNumber":174,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":175,"author":{"gitId":"Jonoans"},"content":" finalValues.add(i, truncatedValue);","lastModifiedDate":"2023-10-15"},{"lineNumber":176,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":177,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":178,"author":{"gitId":"Jonoans"},"content":" char[] spacer \u003d new char[SPACE_BETWEEN_COLS];","lastModifiedDate":"2023-10-15"},{"lineNumber":179,"author":{"gitId":"Jonoans"},"content":" Arrays.fill(spacer, FILLER_CHAR);","lastModifiedDate":"2023-10-15"},{"lineNumber":180,"author":{"gitId":"Jonoans"},"content":" return String.join(new String(spacer), finalValues);","lastModifiedDate":"2023-10-15"},{"lineNumber":181,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":182,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":183,"author":{"gitId":"hooami"},"content":" public void listTransactions(ArrayList\u003cArrayList\u003cString\u003e\u003e list, String[] headers, String headerMessage) {","lastModifiedDate":"2023-10-15"},{"lineNumber":184,"author":{"gitId":"hooami"},"content":" String end \u003d \" transactions.\";","lastModifiedDate":"2023-10-15"},{"lineNumber":185,"author":{"gitId":"hooami"},"content":" if (list.size() \u003d\u003d 1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":186,"author":{"gitId":"hooami"},"content":" end \u003d \" transaction.\";","lastModifiedDate":"2023-10-15"},{"lineNumber":187,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":188,"author":{"gitId":"hooami"},"content":" print(\"Alright! Displaying \" + list.size() + end);","lastModifiedDate":"2023-10-15"},{"lineNumber":189,"author":{"gitId":"hooami"},"content":" Integer[] columnWidths \u003d {ID_COLUMN_WIDTH, LIST_COLUMN_WIDTH, COLUMN_WIDTH, COLUMN_WIDTH, COLUMN_WIDTH};","lastModifiedDate":"2023-10-15"},{"lineNumber":190,"author":{"gitId":"hooami"},"content":" int totalSpace \u003d Arrays.stream(columnWidths)","lastModifiedDate":"2023-10-15"},{"lineNumber":191,"author":{"gitId":"hooami"},"content":" .mapToInt(Integer::intValue)","lastModifiedDate":"2023-10-15"},{"lineNumber":192,"author":{"gitId":"hooami"},"content":" .sum();","lastModifiedDate":"2023-10-15"},{"lineNumber":193,"author":{"gitId":"hooami"},"content":" totalSpace \u003d totalSpace + (SPACE_BETWEEN_COLS * columnWidths.length) - headerMessage.length();","lastModifiedDate":"2023-10-15"},{"lineNumber":194,"author":{"gitId":"hooami"},"content":" int leftSide \u003d totalSpace / 2;","lastModifiedDate":"2023-10-15"},{"lineNumber":195,"author":{"gitId":"hooami"},"content":" int rightSide \u003d totalSpace - leftSide;","lastModifiedDate":"2023-10-15"},{"lineNumber":196,"author":{"gitId":"hooami"},"content":" String leftPad \u003d new String(new char[leftSide]).replace(\u0027\\0\u0027, LIST_SEPARATOR);","lastModifiedDate":"2023-10-16"},{"lineNumber":197,"author":{"gitId":"hooami"},"content":" String rightPad \u003d new String(new char[rightSide]).replace(\u0027\\0\u0027, LIST_SEPARATOR);","lastModifiedDate":"2023-10-16"},{"lineNumber":198,"author":{"gitId":"hooami"},"content":" StringJoiner wrapper \u003d new StringJoiner(\" \");","lastModifiedDate":"2023-10-15"},{"lineNumber":199,"author":{"gitId":"hooami"},"content":" wrapper.add(leftPad);","lastModifiedDate":"2023-10-15"},{"lineNumber":200,"author":{"gitId":"hooami"},"content":" wrapper.add(headerMessage);","lastModifiedDate":"2023-10-15"},{"lineNumber":201,"author":{"gitId":"hooami"},"content":" wrapper.add(rightPad);","lastModifiedDate":"2023-10-15"},{"lineNumber":202,"author":{"gitId":"hooami"},"content":" print(wrapper.toString());","lastModifiedDate":"2023-10-15"},{"lineNumber":203,"author":{"gitId":"hooami"},"content":" printTableRows(list, headers, columnWidths);","lastModifiedDate":"2023-10-16"},{"lineNumber":204,"author":{"gitId":"hooami"},"content":" print(wrapper.toString());","lastModifiedDate":"2023-10-15"},{"lineNumber":205,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":206,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":207,"author":{"gitId":"ChoonSiang"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"Jonoans":162,"hooami":30,"ChoonSiang":15}},{"path":"src/test/java/seedu/duke/command/HelpCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"sRanay"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"sRanay"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"sRanay"},"content":"import seedu.duke.parser.Parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"sRanay"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"sRanay"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"sRanay"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"sRanay"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"sRanay"},"content":"public class HelpCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"sRanay"},"content":" ","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"sRanay"},"content":" void helpCommand_printFullList() {","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help\";","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nCommand Description\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"sRanay"},"content":" \"help Shows a list of all the commands available to the user\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"sRanay"},"content":" \"in Adds an income towards goal\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"sRanay"},"content":" \"out Adds an expense for a category\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"sRanay"},"content":" \"delete Delete a specific transaction based on the index in the list\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"sRanay"},"content":" \"list Shows a list of all added transactions based on type\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"sRanay"},"content":" void helpCommand_withEmptyCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help \";","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nCommand Description\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"sRanay"},"content":" \"help Shows a list of all the commands available to the user\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"sRanay"},"content":" \"in Adds an income towards goal\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"sRanay"},"content":" \"out Adds an expense for a category\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"sRanay"},"content":" \"delete Delete a specific transaction based on the index in the list\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"sRanay"},"content":" \"list Shows a list of all added transactions based on type\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"sRanay"},"content":" void helpCommand_withInvalidCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help asdasds\";","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nNO SUCH COMMAND\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"sRanay"},"content":" void helpCommand_withValidInCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help in\";","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nUsage: in DESCRIPTION /amount AMOUNT /goal GOAL [/date DATE in DDMMYYYY]\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"sRanay"},"content":" \"Option Description\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"sRanay"},"content":" \"/amount Amount to be added\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"sRanay"},"content":" \"/goal The goal to classify it under\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"sRanay"},"content":" \"/date Date of the transaction\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"sRanay"},"content":" void helpCommand_commandCaseSensitive() {","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help In\";","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nUsage: in DESCRIPTION /amount AMOUNT /goal GOAL [/date DATE in DDMMYYYY]\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"sRanay"},"content":" \"Option Description\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"sRanay"},"content":" \"/amount Amount to be added\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"sRanay"},"content":" \"/goal The goal to classify it under\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"sRanay"},"content":" \"/date Date of the transaction\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"sRanay"},"content":" void helpCommand_commandAllUpperCase() {","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help IN\";","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nUsage: in DESCRIPTION /amount AMOUNT /goal GOAL [/date DATE in DDMMYYYY]\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"sRanay"},"content":" \"Option Description\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"sRanay"},"content":" \"/amount Amount to be added\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"sRanay"},"content":" \"/goal The goal to classify it under\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"sRanay"},"content":" \"/date Date of the transaction\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"sRanay"},"content":" void helpCommand_withValidOutCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help out\";","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":122,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nUsage: out DESCRIPTION /amount AMOUNT /category CATEGORY [/date DATE in DDMMYYYY]\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":126,"author":{"gitId":"sRanay"},"content":" \"Option Description\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":127,"author":{"gitId":"sRanay"},"content":" \"/amount Amount to be deducted\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"sRanay"},"content":" \"/category The spending category to classify it under\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":129,"author":{"gitId":"sRanay"},"content":" \"/date Date of the transaction\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":131,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":132,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"sRanay"},"content":" void helpCommand_withValidDeleteCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":136,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":137,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help delete\";","lastModifiedDate":"2023-10-17"},{"lineNumber":138,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":139,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":140,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":141,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":142,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nUsage: delete INDEX /type (in | out)\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":143,"author":{"gitId":"sRanay"},"content":" \"Option Description\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":144,"author":{"gitId":"sRanay"},"content":" \"/type To set whether it is a in or out transaction\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":145,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":146,"author":{"gitId":"sRanay"},"content":" ","lastModifiedDate":"2023-10-17"},{"lineNumber":147,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":148,"author":{"gitId":"sRanay"},"content":" void helpCommand_withValidListCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":149,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":150,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":151,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":152,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help list\";","lastModifiedDate":"2023-10-17"},{"lineNumber":153,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":154,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":155,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":156,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":157,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nUsage: list /type (in | out) [/goal GOAL] [/category CATEGORY]\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":158,"author":{"gitId":"sRanay"},"content":" \"Option Description\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":159,"author":{"gitId":"sRanay"},"content":" \"/type To set whether it is a in or out transaction\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":160,"author":{"gitId":"sRanay"},"content":" \"/goal The goal which it is classify under\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":161,"author":{"gitId":"sRanay"},"content":" \"/category The spending category it is classify under\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":162,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":163,"author":{"gitId":"sRanay"},"content":" ","lastModifiedDate":"2023-10-17"},{"lineNumber":164,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":165,"author":{"gitId":"sRanay"},"content":" void helpCommand_withValidHelpCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":166,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":167,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":168,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":169,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help help\";","lastModifiedDate":"2023-10-17"},{"lineNumber":170,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":171,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":172,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":173,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":174,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nUsage: help\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":175,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":176,"author":{"gitId":"sRanay"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"sRanay":176}},{"path":"src/test/java/seedu/duke/command/ListCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"hooami"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"hooami"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"hooami"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"hooami"},"content":"import seedu.duke.parser.Parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"hooami"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"hooami"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"Jonoans"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-20"},{"lineNumber":10,"author":{"gitId":"hooami"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"hooami"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"hooami"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"hooami"},"content":"class ListCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"hooami"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"hooami"},"content":" void invalidList() {","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"hooami"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"hooami"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"hooami"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"hooami"},"content":" String userInput \u003d \"list\";","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"hooami"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"hooami"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"hooami"},"content":" ListCommand command \u003d new ListCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"hooami"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"hooami"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"hooami"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"hooami"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"hooami"},"content":" void invalidListType() {","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"hooami"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"hooami"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"hooami"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"hooami"},"content":" String userInput \u003d \"list /type abc\";","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"hooami"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"hooami"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"hooami"},"content":" ListCommand command \u003d new ListCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"hooami"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"hooami"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"hooami"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"hooami"},"content":" private static void addInEntries() {","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"hooami"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"hooami"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"hooami"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"hooami"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"hooami"},"content":" parser.parse(\"in part-time job /amount 500 /goal car\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"hooami"},"content":" parser.parse(\"in red packet money /amount 50 /goal PS5 /date 18092023\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"hooami"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"hooami"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"hooami"},"content":" private static void addOutEntries() {","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"hooami"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"hooami"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"hooami"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"hooami"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"hooami"},"content":" parser.parse(\"out dinner /amount 10.50 /category food\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"hooami"},"content":" parser.parse(\"out pokemon card pack /amount 10.50 /category games /date 18092023\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"hooami"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"hooami"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"hooami"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"hooami"},"content":" void validInList() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"hooami"},"content":" addInEntries();","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"hooami"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"hooami"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"hooami"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"Jonoans"},"content":" LocalDate currentDate \u003d LocalDate.now();","lastModifiedDate":"2023-10-20"},{"lineNumber":78,"author":{"gitId":"hooami"},"content":" Command command \u003d parser.parse(\"list /type in\");","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"hooami"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"hooami"},"content":" assertEquals(\"Alright! Displaying 2 transactions.\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"hooami"},"content":" + \"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d IN TRANSACTIONS \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"hooami"},"content":" + \"ID Description Date Amount Goal\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"Jonoans"},"content":" + \"1 part-time job \" + currentDate.toString() + \" 500.00 TBC\\n\"","lastModifiedDate":"2023-10-20"},{"lineNumber":84,"author":{"gitId":"Jonoans"},"content":" + \"2 red packet money \" + currentDate.toString() + \" 50.00 TBC\\n\"","lastModifiedDate":"2023-10-20"},{"lineNumber":85,"author":{"gitId":"hooami"},"content":" + \"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d IN TRANSACTIONS \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"hooami"},"content":" , outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"hooami"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"hooami"},"content":" void validOutList() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"hooami"},"content":" addOutEntries();","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"hooami"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"hooami"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"hooami"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"Jonoans"},"content":" LocalDate currentDate \u003d LocalDate.now();","lastModifiedDate":"2023-10-20"},{"lineNumber":97,"author":{"gitId":"hooami"},"content":" Command command \u003d parser.parse(\"list /type out\");","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"hooami"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"hooami"},"content":" assertEquals(\"Alright! Displaying 2 transactions.\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"hooami"},"content":" + \"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d OUT TRANSACTIONS \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"hooami"},"content":" + \"ID Description Date Amount Goal\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"Jonoans"},"content":" + \"1 dinner \" + currentDate.toString() + \" 10.5 TBC\\n\"","lastModifiedDate":"2023-10-20"},{"lineNumber":103,"author":{"gitId":"Jonoans"},"content":" + \"2 pokemon card pack \" + currentDate.toString() + \" 10.5 TBC\\n\"","lastModifiedDate":"2023-10-20"},{"lineNumber":104,"author":{"gitId":"hooami"},"content":" + \"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d OUT TRANSACTIONS \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"hooami"},"content":" , outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"hooami"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Jonoans":7,"hooami":101}},{"path":"src/test/java/seedu/duke/command/RemoveTransactionCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ChoonSiang"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"ChoonSiang"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.classes.StateManager;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.parser.Parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"ChoonSiang"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"ChoonSiang"},"content":"import static org.junit.jupiter.api.Assertions.assertNotEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"ChoonSiang"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"ChoonSiang"},"content":"class RemoveTransactionCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"ChoonSiang"},"content":" private static Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"ChoonSiang"},"content":" private static ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"ChoonSiang"},"content":" private static Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"ChoonSiang"},"content":" public static void populateStateManager() {","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ChoonSiang"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"ChoonSiang"},"content":" parser.parse(\"in part-time job /amount 1000 /goal car\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"ChoonSiang"},"content":" parser.parse(\"in allowance /amount 500 /goal car\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"ChoonSiang"},"content":" parser.parse(\"in sell stuff /amount 50 /goal ps5\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"ChoonSiang"},"content":" parser.parse(\"out buy dinner /amount 15 /category food\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"ChoonSiang"},"content":" parser.parse(\"out popmart /amount 12 /category toy\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"ChoonSiang"},"content":" parser.parse(\"out grab /amount 20 /category transport\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"ChoonSiang"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"ChoonSiang"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"ChoonSiang"},"content":" void execute_missingIdx_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"ChoonSiang"},"content":" populateStateManager();","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d parser.parse(\"delete /type in\");","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"ChoonSiang"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"ChoonSiang"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"ChoonSiang"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"ChoonSiang"},"content":" void execute_missingTypeArgument_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"ChoonSiang"},"content":" populateStateManager();","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d parser.parse(\"delete 1\");","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"ChoonSiang"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"ChoonSiang"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"ChoonSiang"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"ChoonSiang"},"content":" void execute_missingTypeValue_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"ChoonSiang"},"content":" populateStateManager();","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d parser.parse(\"delete 1 /type\");","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"ChoonSiang"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"ChoonSiang"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"ChoonSiang"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"ChoonSiang"},"content":" void execute_negativeIdx_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"ChoonSiang"},"content":" populateStateManager();","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d parser.parse(\"delete -1 /type in\");","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"ChoonSiang"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"ChoonSiang"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"ChoonSiang"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"ChoonSiang"},"content":" void execute_outOfRangeIdx_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"ChoonSiang"},"content":" populateStateManager();","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d parser.parse(\"delete 1000 /type in\");","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"ChoonSiang"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"ChoonSiang"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"ChoonSiang"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"ChoonSiang"},"content":" void execute_validIncomeIdx_removedFromStateManager() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"ChoonSiang"},"content":" populateStateManager();","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d parser.parse(\"delete 1 /type in\");","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"ChoonSiang"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"ChoonSiang"},"content":" String transactionDescription \u003d StateManager.getStateManager().getIncome(0) // 0-based indexing","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"ChoonSiang"},"content":" .getTransaction().getDescription();","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"ChoonSiang"},"content":" assertNotEquals(\"part-time job\", transactionDescription);","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"ChoonSiang"},"content":" void execute_validExpenseIdx_removedFromStateManager() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"ChoonSiang"},"content":" populateStateManager();","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d parser.parse(\"delete 2 /type out\");","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"ChoonSiang"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"ChoonSiang"},"content":" String transactionDescription \u003d StateManager.getStateManager().getExpense(1) // 0-based indexing","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"ChoonSiang"},"content":" .getTransaction().getDescription();","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"ChoonSiang"},"content":" assertNotEquals(\"popmart\", transactionDescription);","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"ChoonSiang"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"ChoonSiang":102}},{"path":"src/test/java/seedu/duke/parser/ParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ChoonSiang"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"ChoonSiang"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.command.AddIncomeCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.command.Command;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"ChoonSiang"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ChoonSiang"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"ChoonSiang"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"ChoonSiang"},"content":"import static org.junit.jupiter.api.Assertions.assertNull;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"ChoonSiang"},"content":"class ParserTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"ChoonSiang"},"content":" void parse_validIncome_incomeCommand() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"ChoonSiang"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d parser.parse(\"in job /amount 100 /goal car\");","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"ChoonSiang"},"content":" assertEquals(AddIncomeCommand.class, command.getClass());","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"ChoonSiang"},"content":" void parse_invalidCommand_exceptionThrown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"ChoonSiang"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"ChoonSiang"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d parser.parse(\"invalid command\");","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"ChoonSiang"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"ChoonSiang"},"content":" void getCommandWord_validCommand_commandInLowerCase() {","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"ChoonSiang"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"ChoonSiang"},"content":" assertEquals(\"delete\", parser.getCommandWord(\"Delete 1 /type in\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"ChoonSiang"},"content":" void getDescription_validDescription_trimmedDescription() {","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"ChoonSiang"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"ChoonSiang"},"content":" assertEquals(\"part time job\",","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"ChoonSiang"},"content":" parser.getDescription(\"in part time job /amount 100 /goal car\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"ChoonSiang"},"content":" void getDescription_emptyDescription_emptyString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"ChoonSiang"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"ChoonSiang"},"content":" assertEquals(\"\",","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"ChoonSiang"},"content":" parser.getDescription(\"in\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"ChoonSiang"},"content":" void getDescription_emptyDescriptionWithArguments_emptyString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"ChoonSiang"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"ChoonSiang"},"content":" assertEquals(\"\",","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"ChoonSiang"},"content":" parser.getDescription(\"in /amount 100 /goal car\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"ChoonSiang"},"content":" void getArguments_validArguments_hashmapOfArguments() {","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"ChoonSiang"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"ChoonSiang"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(\"in part time job /amount 100 /goal car\");","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"ChoonSiang"},"content":" assertEquals(\"100\", args.get(\"amount\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"ChoonSiang"},"content":" assertEquals(\"car\", args.get(\"goal\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"ChoonSiang"},"content":" void getArguments_noArgument_emptyHashMap() {","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"ChoonSiang"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"ChoonSiang"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(\"in part time job\");","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"ChoonSiang"},"content":" assertEquals(0, args.size());","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"ChoonSiang"},"content":" void getArguments_argumentWithoutValue_nullValue() {","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"ChoonSiang"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"ChoonSiang"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(\"in part time job /amount /goal\");","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"ChoonSiang"},"content":" assertNull(args.get(\"amount\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"ChoonSiang"},"content":" assertNull(args.get(\"goal\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"ChoonSiang"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"ChoonSiang":81}},{"path":"src/test/java/seedu/duke/ui/UiTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"Jonoans"},"content":"package seedu.duke.ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Jonoans"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Jonoans"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Jonoans"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Jonoans"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Jonoans"},"content":"class UiTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Jonoans"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Jonoans"},"content":" public void printTestPrintTableRows() {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Jonoans"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Jonoans"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Jonoans"},"content":" String[] headers \u003d new String[]{\"Header 1\", \"Header 2\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cArrayList\u003cString\u003e\u003e rows \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cString\u003e row \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Jonoans"},"content":" row.add(\"Hi\");","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"Jonoans"},"content":" row.add(\"Test print\");","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"Jonoans"},"content":" rows.add(row);","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Jonoans"},"content":" ui.printTableRows(rows, headers);","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Jonoans"},"content":" assertEquals(","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Jonoans"},"content":" \"Header 1 Header 2\\n\" +","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Jonoans"},"content":" \"Hi Test print\\n\",","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Jonoans"},"content":" outputStream.toString()","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Jonoans"},"content":" );","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"Jonoans"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"Jonoans"},"content":" public void printTableWithCustomWidths() {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"Jonoans"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"Jonoans"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Jonoans"},"content":" String[] headers \u003d new String[]{\"Header 1\", \"Header 2\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Jonoans"},"content":" Integer[] widths \u003d new Integer[]{20, 20};","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cArrayList\u003cString\u003e\u003e rows \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cString\u003e row \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"Jonoans"},"content":" row.add(\"Hi\");","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"Jonoans"},"content":" row.add(\"Test print\");","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Jonoans"},"content":" rows.add(row);","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"Jonoans"},"content":" ui.printTableRows(rows, headers, widths);","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Jonoans"},"content":" assertEquals(","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Jonoans"},"content":" \"Header 1 Header 2\\n\" +","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"Jonoans"},"content":" \"Hi Test print\\n\",","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Jonoans"},"content":" outputStream.toString()","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Jonoans"},"content":" );","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"Jonoans"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"Jonoans"},"content":" public void printTableNoHeader() {","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"Jonoans"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"Jonoans"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cArrayList\u003cString\u003e\u003e rows \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cString\u003e row \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"Jonoans"},"content":" row.add(\"Hi\");","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"Jonoans"},"content":" row.add(\"Test print\");","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"Jonoans"},"content":" rows.add(row);","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"Jonoans"},"content":" ui.printTableRows(rows);","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"Jonoans"},"content":" assertEquals(","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"Jonoans"},"content":" \"Hi Test print\\n\",","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"Jonoans"},"content":" outputStream.toString()","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"Jonoans"},"content":" );","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"Jonoans"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"Jonoans"},"content":" public void printTableNoHeaderWithCustomWidths() {","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"Jonoans"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"Jonoans"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"Jonoans"},"content":" Integer[] widths \u003d new Integer[]{20, 20};","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cArrayList\u003cString\u003e\u003e rows \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cString\u003e row \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"Jonoans"},"content":" row.add(\"Hi\");","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"Jonoans"},"content":" row.add(\"Test print\");","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"Jonoans"},"content":" rows.add(row);","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"Jonoans"},"content":" ui.printTableRows(rows, null, widths);","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"Jonoans"},"content":" assertEquals(","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"Jonoans"},"content":" \"Hi Test print\\n\",","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"Jonoans"},"content":" outputStream.toString()","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"Jonoans"},"content":" );","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"Jonoans"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"Jonoans"},"content":" public void printTableNoHeaderWithCustomWidthsSmallerThanDefaultWidths() {","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"Jonoans"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"Jonoans"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"Jonoans"},"content":" Integer[] widths \u003d new Integer[]{5, 5};","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cArrayList\u003cString\u003e\u003e rows \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cString\u003e row \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"Jonoans"},"content":" row.add(\"Hi\");","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"Jonoans"},"content":" row.add(\"Test print\");","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"Jonoans"},"content":" rows.add(row);","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"Jonoans"},"content":" ui.printTableRows(rows, null, widths);","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"Jonoans"},"content":" assertEquals(","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"Jonoans"},"content":" \"Hi Te...\\n\",","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"Jonoans"},"content":" outputStream.toString()","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"Jonoans"},"content":" );","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"Jonoans"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Jonoans":98}}] +[{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"-"},"content":" mainClass.set(\"seedu.duke.Duke\")","lastModifiedDate":"2023-08-05"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"-"},"content":" archiveBaseName.set(\"duke\")","lastModifiedDate":"2023-09-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"sRanay"},"content":" enableAssertions \u003d true;","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"sRanay":1,"-":46}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Portfolio ","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"--------|:----:|:--------------:|:---------:","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"itayrefaely"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Itay Refaely | [Github](https://github.com/itayrefaely) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":6,"author":{"gitId":"ChoonSiang"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Chan Choon Siang | [Github](https://github.com/ChoonSiang) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"Jonoans"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Jonathan Tan | [Github](https://github.com/Jonoans) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":8,"author":{"gitId":"sRanay"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Jason Song Jun Jie | [Github](https://github.com/sRanay) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"hooami"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Jun Hong | [Github](https://github.com/hooami) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"Jonoans":1,"sRanay":1,"itayrefaely":1,"-":4,"hooami":1,"ChoonSiang":1}},{"path":"docs/DeveloperGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# Developer Guide","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Acknowledgements","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"{list here sources of all reused/adapted ideas, code, documentation, and third-party libraries -- include links to the original source as well}","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"sRanay"},"content":"## Design","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"sRanay"},"content":"### Architecture","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":11,"author":{"gitId":"sRanay"},"content":"The bulk of the app\u0027s work is done by the following three components:","lastModifiedDate":"2023-10-22"},{"lineNumber":12,"author":{"gitId":"sRanay"},"content":"- `UI`: The UI of the App.","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"sRanay"},"content":"- `Parser`: Formats the user\u0027s input","lastModifiedDate":"2023-10-22"},{"lineNumber":14,"author":{"gitId":"sRanay"},"content":"- `Command`: Command\u0027s logic and execution","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"sRanay"},"content":"### UI component","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"sRanay"},"content":"### Parser component","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"sRanay"},"content":"### Command component","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"-"},"content":"{Describe the design and implementation of the product. Use UML diagrams and short code snippets where applicable.}","lastModifiedDate":"2020-05-24"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":23,"author":{"gitId":"sRanay"},"content":"## Implementation","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"sRanay"},"content":"### [Proposed] Export feature","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"sRanay"},"content":"#### Proposed Implementation","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"sRanay"},"content":"The proposed export feature is facilitated by `File`. It implements the following operation:","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"sRanay"},"content":"- `File#exportTransaction()` - Exports all the transactions that is stored into a CSV format.","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"sRanay"},"content":"Given below is an example usage scenario and how the export features behaves at each step.","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"sRanay"},"content":"Step 1. The user launches the application for the first time. There would be no transactions available to be exported.","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"sRanay"},"content":"Step 2. The user executes `in part-time job /amount 500 /goal car` to create a transaction with the description of `part-time job`, with the `amount` set to `500` and `goal` set to `car` and stores it in the program","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"sRanay"},"content":"Step 3. So when the user executes `export`, it will get all the transactions that the program stored and exports to a CSV file using OpenCSV ","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":40,"author":{"gitId":"-"},"content":"## Product scope","lastModifiedDate":"2020-05-24"},{"lineNumber":41,"author":{"gitId":"-"},"content":"### Target user profile","lastModifiedDate":"2020-05-24"},{"lineNumber":42,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":43,"author":{"gitId":"-"},"content":"{Describe the target user profile}","lastModifiedDate":"2020-05-24"},{"lineNumber":44,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":45,"author":{"gitId":"-"},"content":"### Value proposition","lastModifiedDate":"2020-05-24"},{"lineNumber":46,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":47,"author":{"gitId":"-"},"content":"{Describe the value proposition: what problem does it solve?}","lastModifiedDate":"2020-05-24"},{"lineNumber":48,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":49,"author":{"gitId":"-"},"content":"## User Stories","lastModifiedDate":"2020-05-24"},{"lineNumber":50,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":51,"author":{"gitId":"-"},"content":"|Version| As a ... | I want to ... | So that I can ...|","lastModifiedDate":"2020-05-24"},{"lineNumber":52,"author":{"gitId":"-"},"content":"|--------|----------|---------------|------------------|","lastModifiedDate":"2020-05-24"},{"lineNumber":53,"author":{"gitId":"sRanay"},"content":"|v1.0|user|add a new income source|can keep track of my allowances and part-time job earnings|","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"sRanay"},"content":"|v1.0|user|add an expense|can monitor my purchases and stay within my budget|","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"sRanay"},"content":"|v1.0|user|delete a transaction|remove any duplicate or unwanted entries from my expenses|","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"sRanay"},"content":"|v1.0|user|view a list of all my transactions|review my income and expenses|","lastModifiedDate":"2023-10-22"},{"lineNumber":57,"author":{"gitId":"sRanay"},"content":"|v2.0|user|export financial data to a CSV file|use it for client presentations and analysis|","lastModifiedDate":"2023-10-22"},{"lineNumber":58,"author":{"gitId":"sRanay"},"content":"|v2.0|user|set up recurring transactions for mortgage payments and utility bulls|easily track and budget for regular home expenses|","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"sRanay"},"content":"|v2.0|user|set financial goals, such as saving for a down payment on a house|stay motivated and track my progress towards home ownership.|","lastModifiedDate":"2023-10-22"},{"lineNumber":60,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":61,"author":{"gitId":"-"},"content":"## Non-Functional Requirements","lastModifiedDate":"2020-05-24"},{"lineNumber":62,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":63,"author":{"gitId":"-"},"content":"{Give non-functional requirements}","lastModifiedDate":"2020-05-24"},{"lineNumber":64,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":65,"author":{"gitId":"-"},"content":"## Glossary","lastModifiedDate":"2020-05-24"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":67,"author":{"gitId":"-"},"content":"* *glossary item* - Definition","lastModifiedDate":"2020-05-24"},{"lineNumber":68,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":69,"author":{"gitId":"-"},"content":"## Instructions for manual testing","lastModifiedDate":"2020-05-24"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":71,"author":{"gitId":"-"},"content":"{Give instructions on how to do a manual product testing e.g., how to load sample data to be used for testing}","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"sRanay":36,"-":35}},{"path":"docs/README.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"hooami"},"content":"# FinText","lastModifiedDate":"2023-10-04"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":3,"author":{"gitId":"hooami"},"content":"FinText is a **Command Line Interface (CLI)-based personal finance tracker to make it easy for users to track and manage","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"hooami"},"content":"their spending,** and generate daily/weekly/monthly reports to break down how they spend.","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2019-07-29"},{"lineNumber":6,"author":{"gitId":"-"},"content":"Useful links:","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"* [User Guide](UserGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":8,"author":{"gitId":"-"},"content":"* [Developer Guide](DeveloperGuide.md)","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"* [About Us](AboutUs.md)","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"hooami":3,"-":6}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"hooami"},"content":"# FinText User Guide","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Introduction","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"hooami"},"content":"FinText is a **Command Line Interface (CLI)-based personal finance tracker to make it easy for users to track and manage","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"hooami"},"content":"their spending,** and generate daily/weekly/monthly reports to break down how they spend.","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"hooami"},"content":"* [Quick Start](#quick-start)","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"hooami"},"content":"* [Features](#features)","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"hooami"},"content":" * [Viewing Help: `help`](#viewing-help-help)","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"hooami"},"content":" * [Adding an income entry: `in`](#adding-an-income-entry-in)","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"hooami"},"content":" * [Adding an expense entry: `out`](#adding-an-expense-entry-out)","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"hooami"},"content":" * [Delete Transaction: `delete`](#delete-transaction-delete)","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"hooami"},"content":" * [List Transactions: `list`](#list-transactions-list)","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"hooami"},"content":" * [End Program: `bye`](#end-program-bye)","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"hooami"},"content":"* [Command Summary](#command-summary)","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":19,"author":{"gitId":"-"},"content":"## Quick Start","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":21,"author":{"gitId":"hooami"},"content":"1. Ensure that you have Java 11 installed on your computer.","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"hooami"},"content":"2. Download the latest version of `FinText` from [here](https://github.com/AY2324S1-CS2113-W12-3/tp/releases).","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":24,"author":{"gitId":"-"},"content":"## Features","lastModifiedDate":"2020-05-24"},{"lineNumber":25,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":26,"author":{"gitId":"hooami"},"content":"\u003e * `UPPER_CASE` denotes user-supplied parameters, and arguments with square brackets\u003cbr\u003e e.g. `[/date DATE]` denote","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"hooami"},"content":" optional arguments, while arguments not in square brackets are mandatory.","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"hooami"},"content":"\u003e * Any text e.g. `DESCRIPTION` has to come before arguments.\u003cbr\u003e","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"hooami"},"content":" `in Salary /amount 500 /goal Savings` is a valid command, while `in /amount 500 /goal Savings Salary` is not a valid","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"hooami"},"content":" command.","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"hooami"},"content":"\u003e * Arguments can be in any order. \u003cbr\u003e","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"hooami"},"content":" e.g. if a command has the arguments `/amount AMOUNT /goal GOAL`, `/goal GOAL /amount AMOUNT` is acceptable as well.","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"hooami"},"content":"### Viewing Help: `help`","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"hooami"},"content":"Shows a list of all the commands available to the user.","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"hooami"},"content":"### Adding an income entry: `in`","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"hooami"},"content":"Adds an income towards a goal.","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"hooami"},"content":"Format: `in DESCRIPTION /amount AMOUNT /goal GOAL [/date DATE]`","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"hooami"},"content":"* `DESCRIPTION` is case-sensitive, while the arguments are not.","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"hooami"},"content":"* `DATE` must be in format `DDMMYYYY`","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"hooami"},"content":"**Usage Example:**","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"hooami"},"content":"`in part-time job /amount 500 /goal car` \u003cbr\u003e","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"hooami"},"content":"Adds an income entry for \u0027part-time job\u0027 with an amount of 500 towards a goal called \u0027car\u0027.","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"hooami"},"content":"`in red packet money /amount 50 /goal PS5 /date 18092023`\u003cbr\u003e","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"hooami"},"content":"Adds an income entry that happened on 18 Sept 2023 for \u0027red packet money\u0027 for an amount of 50 towards","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"hooami"},"content":"a goal called \u0027PS5\u0027.","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"hooami"},"content":"### Adding an expense entry: `out`","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"hooami"},"content":"Adds an expense for a category.","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"hooami"},"content":"Format: `out DESCRIPTION /amount AMOUNT /category CATEGORY [/date DATE in DDMMYYYY]`","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"hooami"},"content":"* `DESCRIPTION` is case-sensitive, while the arguments are not.","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"hooami"},"content":"* `DATE` must be in format `DDMMYYYY`","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"hooami"},"content":"**Usage Example:**","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"hooami"},"content":"`out dinner /amount 10.50 /category food` \u003cbr\u003e","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"hooami"},"content":"Adds an expense entry for \u0027dinner\u0027 with an amount of 10.50 towards the \u0027food\u0027 category.","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"hooami"},"content":"`out pokemon card pack /amount 10.50 /category food /date 18092023`\u003cbr\u003e","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"hooami"},"content":"Adds an expense entry that happened on 18 Sept 2023 for \u0027pokemon card pack\u0027 for an amount of 10.50 towards","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"hooami"},"content":"the \u0027game\u0027 category.","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"hooami"},"content":"### Delete Transaction: `delete`","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"hooami"},"content":"Delete a specific transaction based on the index in the list.","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"hooami"},"content":"Format: `delete INDEX /type (in | out)`","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"hooami"},"content":"* `/type` only accepts `in` or `out`.","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"hooami"},"content":"* `INDEX` is based on the ID from the `list` command.","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"hooami"},"content":"**Usage Example:**","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"hooami"},"content":"`delete 1 /type in` - Deletes the first income entry.","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"hooami"},"content":"`delete 2 /type out` - Deletes the second expense entry.","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":85,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":86,"author":{"gitId":"hooami"},"content":"### List Transactions: `list`","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"hooami"},"content":"Shows a list of all added transactions based on type, with filters for goals and categories.","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":89,"author":{"gitId":"hooami"},"content":"Format: `list /type (in | out) [/goal GOAL] [/category CATEGORY]`","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"hooami"},"content":"* User must specify /type option to list either transactions added under income or expense","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"hooami"},"content":"* Deletion has to be based on the ID of the transaction without any filters.","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":93,"author":{"gitId":"hooami"},"content":"**Usage Example:**","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":95,"author":{"gitId":"hooami"},"content":"`list /type in` - List all income transactions","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":97,"author":{"gitId":"hooami"},"content":"`list /type out` - List all expense transactions","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":99,"author":{"gitId":"hooami"},"content":"`list /type in /goal Travel` - List all income transactions with the \u0027Travel\u0027 goal","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":101,"author":{"gitId":"hooami"},"content":"`list /type out /category Food` - List all expense transactions with the \u0027Food\u0027 category","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":103,"author":{"gitId":"hooami"},"content":"**Sample Output:**","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"hooami"},"content":"```","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"hooami"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d IN TRANSACTIONS \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"hooami"},"content":"ID Description Date Amount Goal","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"hooami"},"content":"1 Random 12 SEP 2023 $10 TRAVEL","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"hooami"},"content":"2 Hongbao 13 SEP 2023 $10 KOREA STUDIES","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"hooami"},"content":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d IN TRANSACTIONS \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"hooami"},"content":"```","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"hooami"},"content":"### End Program: `bye`","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"hooami"},"content":"Safely ends the program.","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":114,"author":{"gitId":"-"},"content":"## Command Summary","lastModifiedDate":"2020-05-24"},{"lineNumber":115,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":116,"author":{"gitId":"hooami"},"content":"| Action | Format | Example |","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"hooami"},"content":"|-------------------------|-----------------------------------------------------------------------------|-----------------------------------------------------------|","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"hooami"},"content":"| Help | `help` | |","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"hooami"},"content":"| Adding an income entry | `in DESCRIPTION /amount AMOUNT /goal GOAL [/date DATE in DDMMYYYY]` | `in part-time job /amount 500 /goal car` |","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"hooami"},"content":"| Adding an expense entry | `out DESCRIPTION /amount AMOUNT /category CATEGORY [/date DATE in DDMMYYYY]`| `out dinner /amount 10.50 /category food` |","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"hooami"},"content":"| Delete Transaction | `delete INDEX /type (in | out)` | `delete 1 /type in` |","lastModifiedDate":"2023-10-17"},{"lineNumber":122,"author":{"gitId":"hooami"},"content":"| List Transactions | `list /type (in | out) [/goal GOAL] [/category CATEGORY]` | `list /type in` |","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"hooami"},"content":"| End program | `bye` | |","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"hooami":98,"-":26}},{"path":"src/main/java/seedu/duke/Duke.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"package seedu.duke;","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.command.Command;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.command.ExitCommand;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.parser.Parser;","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"-"},"content":"public class Duke {","lastModifiedDate":"2019-07-29"},{"lineNumber":10,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"ChoonSiang"},"content":" private static Ui ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"ChoonSiang"},"content":" public Duke() {","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"ChoonSiang"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"ChoonSiang"},"content":" public void run() {","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"ChoonSiang"},"content":" ui.printGreeting();","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"ChoonSiang"},"content":" String userInput;","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"ChoonSiang"},"content":" while (true) {","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"Jonoans"},"content":" userInput \u003d ui.readUserInput();","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"ChoonSiang"},"content":" try {","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d new Parser().parse(userInput);","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"ChoonSiang"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":26,"author":{"gitId":"ChoonSiang"},"content":" if (command instanceof ExitCommand) {","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"ChoonSiang"},"content":" break;","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"ChoonSiang"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"ChoonSiang"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"Jonoans"},"content":" ui.close();","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":36,"author":{"gitId":"-"},"content":" /**","lastModifiedDate":"2020-05-24"},{"lineNumber":37,"author":{"gitId":"-"},"content":" * Main entry-point for the java.duke.Duke application.","lastModifiedDate":"2020-05-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":" */","lastModifiedDate":"2020-05-24"},{"lineNumber":39,"author":{"gitId":"-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2019-07-29"},{"lineNumber":40,"author":{"gitId":"ChoonSiang"},"content":" Duke duke \u003d new Duke();","lastModifiedDate":"2023-10-12"},{"lineNumber":41,"author":{"gitId":"ChoonSiang"},"content":" duke.run();","lastModifiedDate":"2023-10-12"},{"lineNumber":42,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2019-07-29"},{"lineNumber":43,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2019-07-29"}],"authorContributionMap":{"Jonoans":2,"-":10,"ChoonSiang":31}},{"path":"src/main/java/seedu/duke/classes/Category.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"sRanay"},"content":"package seedu.duke.classes;","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"sRanay"},"content":"public class Category {","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"sRanay"},"content":" private String name;","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"sRanay"},"content":" public Category(String name) {","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"sRanay"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"sRanay"},"content":" public String getName() {","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"sRanay"},"content":" return name;","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"sRanay"},"content":" public void setName(String name) {","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"sRanay"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"sRanay"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"sRanay":17}},{"path":"src/main/java/seedu/duke/classes/Expense.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Jonoans"},"content":"package seedu.duke.classes;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Jonoans"},"content":"public class Expense {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Jonoans"},"content":" private Transaction transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"hooami"},"content":" private Category category;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"hooami"},"content":" public Expense(Transaction transaction, Category category) {","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Jonoans"},"content":" this.transaction \u003d transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"hooami"},"content":" this.category \u003d category;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Jonoans"},"content":" public Transaction getTransaction() {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Jonoans"},"content":" return transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Jonoans"},"content":" public void setTransaction(Transaction transaction) {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Jonoans"},"content":" this.transaction \u003d transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"hooami"},"content":" public Category getCategory() {","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"hooami"},"content":" return category;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"hooami"},"content":" public void setCategory(Category category) {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"hooami"},"content":" this.category \u003d category;","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Jonoans"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Jonoans":20,"hooami":7}},{"path":"src/main/java/seedu/duke/classes/Goal.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"sRanay"},"content":"package seedu.duke.classes;","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"sRanay"},"content":"public class Goal {","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"sRanay"},"content":" private String description;","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"sRanay"},"content":" private int amount;","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"sRanay"},"content":" public Goal(String description, int amount) {","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"sRanay"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"sRanay"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"sRanay"},"content":" public int getAmount() {","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"sRanay"},"content":" return amount;","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"sRanay"},"content":" public void setAmount(int amount) {","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"sRanay"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"sRanay"},"content":" public String getDescription() {","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"sRanay"},"content":" return description;","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"sRanay"},"content":" public void setDescription(String description) {","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"sRanay"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"sRanay"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"sRanay":28}},{"path":"src/main/java/seedu/duke/classes/Income.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Jonoans"},"content":"package seedu.duke.classes;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Jonoans"},"content":"public class Income {","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Jonoans"},"content":" private Transaction transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"hooami"},"content":" private Goal goal;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"hooami"},"content":" public Income(Transaction transaction, Goal goal) {","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Jonoans"},"content":" this.transaction \u003d transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"hooami"},"content":" this.goal \u003d goal;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Jonoans"},"content":" public Transaction getTransaction() {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Jonoans"},"content":" return transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Jonoans"},"content":" public void setTransaction(Transaction transaction) {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Jonoans"},"content":" this.transaction \u003d transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"hooami"},"content":" public Goal getGoal() {","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"hooami"},"content":" return goal;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"hooami"},"content":" public void setGoal(Goal goal) {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"hooami"},"content":" this.goal \u003d goal;","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Jonoans"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Jonoans":20,"hooami":7}},{"path":"src/main/java/seedu/duke/classes/StateManager.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Jonoans"},"content":"package seedu.duke.classes;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Jonoans"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Jonoans"},"content":"public class StateManager {","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Jonoans"},"content":" private static StateManager stateManager \u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Jonoans"},"content":" private final ArrayList\u003cGoal\u003e goals \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Jonoans"},"content":" private final ArrayList\u003cCategory\u003e categories \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"Jonoans"},"content":" private final ArrayList\u003cIncome\u003e incomes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Jonoans"},"content":" private final ArrayList\u003cExpense\u003e expenses \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Jonoans"},"content":" private StateManager() {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Jonoans"},"content":" public static StateManager getStateManager() {","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Jonoans"},"content":" if (stateManager \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Jonoans"},"content":" stateManager \u003d new StateManager();","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Jonoans"},"content":" return stateManager;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Jonoans"},"content":" public void addGoal(Goal goal) {","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Jonoans"},"content":" assert goal !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Jonoans"},"content":" goals.add(goal);","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Jonoans"},"content":" public Goal getGoal(int idx) {","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Jonoans"},"content":" if (idx \u003c 0 || idx \u003e\u003d goals.size()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Jonoans"},"content":" return null;","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"Jonoans"},"content":" return goals.get(idx);","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Jonoans"},"content":" public boolean removeGoal(Goal goal) {","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Jonoans"},"content":" assert goal !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Jonoans"},"content":" return goals.remove(goal);","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"Jonoans"},"content":" public boolean removeGoal(int idx) {","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Jonoans"},"content":" Goal goal \u003d getGoal(idx);","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"Jonoans"},"content":" if (goal \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Jonoans"},"content":" return false;","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Jonoans"},"content":" return removeGoal(goal);","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Jonoans"},"content":" public void addCategory(Category category) {","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"Jonoans"},"content":" assert category !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"Jonoans"},"content":" categories.add(category);","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"Jonoans"},"content":" public Category getCategory(int idx) {","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"Jonoans"},"content":" if (idx \u003c 0 || idx \u003e\u003d categories.size()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"Jonoans"},"content":" return null;","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"Jonoans"},"content":" return categories.get(idx);","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"Jonoans"},"content":" public boolean removeCategory(Category category) {","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"Jonoans"},"content":" assert category !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"Jonoans"},"content":" return categories.remove(category);","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"Jonoans"},"content":" public boolean removeCategory(int idx) {","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"Jonoans"},"content":" Category category \u003d getCategory(idx);","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"Jonoans"},"content":" if (category \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"Jonoans"},"content":" return false;","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"Jonoans"},"content":" return removeCategory(category);","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"Jonoans"},"content":" public void addIncome(Income income) {","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"Jonoans"},"content":" assert income !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"Jonoans"},"content":" incomes.add(income);","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"Jonoans"},"content":" public Income getIncome(int idx) {","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"Jonoans"},"content":" if (idx \u003c 0 || idx \u003e\u003d incomes.size()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"Jonoans"},"content":" return null;","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"Jonoans"},"content":" return incomes.get(idx);","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"Jonoans"},"content":" public boolean removeIncome(Income income) {","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"Jonoans"},"content":" assert income !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"Jonoans"},"content":" return incomes.remove(income);","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"Jonoans"},"content":" public boolean removeIncome(int idx) {","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"Jonoans"},"content":" Income income \u003d getIncome(idx);","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"Jonoans"},"content":" if (income \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"Jonoans"},"content":" return false;","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"Jonoans"},"content":" return removeIncome(income);","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"Jonoans"},"content":" public void addExpense(Expense expense) {","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"Jonoans"},"content":" assert expense !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"Jonoans"},"content":" expenses.add(expense);","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"Jonoans"},"content":" public Expense getExpense(int idx) {","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"Jonoans"},"content":" if (idx \u003c 0 || idx \u003e\u003d expenses.size()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"Jonoans"},"content":" return null;","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"Jonoans"},"content":" return expenses.get(idx);","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"Jonoans"},"content":" public boolean removeExpense(Expense expense) {","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"Jonoans"},"content":" assert expense !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"Jonoans"},"content":" return expenses.remove(expense);","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"Jonoans"},"content":" public boolean removeExpense(int idx) {","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"Jonoans"},"content":" Expense expense \u003d getExpense(idx);","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"Jonoans"},"content":" if (expense \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"Jonoans"},"content":" return false;","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":122,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":123,"author":{"gitId":"Jonoans"},"content":" return removeExpense(expense);","lastModifiedDate":"2023-10-15"},{"lineNumber":124,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":125,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":126,"author":{"gitId":"hooami"},"content":" public ArrayList\u003cIncome\u003e getAllIncomes() {","lastModifiedDate":"2023-10-15"},{"lineNumber":127,"author":{"gitId":"hooami"},"content":" return incomes;","lastModifiedDate":"2023-10-15"},{"lineNumber":128,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"hooami"},"content":" public ArrayList\u003cExpense\u003e getAllExpenses() {","lastModifiedDate":"2023-10-15"},{"lineNumber":131,"author":{"gitId":"hooami"},"content":" return expenses;","lastModifiedDate":"2023-10-15"},{"lineNumber":132,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":133,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"ChoonSiang"},"content":" public int getIncomesSize() {","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"ChoonSiang"},"content":" return incomes.size();","lastModifiedDate":"2023-10-17"},{"lineNumber":136,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":137,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":138,"author":{"gitId":"ChoonSiang"},"content":" public int getExpensesSize() {","lastModifiedDate":"2023-10-17"},{"lineNumber":139,"author":{"gitId":"ChoonSiang"},"content":" return expenses.size();","lastModifiedDate":"2023-10-17"},{"lineNumber":140,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":141,"author":{"gitId":"Jonoans"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Jonoans":125,"hooami":7,"ChoonSiang":9}},{"path":"src/main/java/seedu/duke/classes/Transaction.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"sRanay"},"content":"package seedu.duke.classes;","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"sRanay"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"sRanay"},"content":"public class Transaction {","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"sRanay"},"content":" private String description;","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"Jonoans"},"content":" private Double amount;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"sRanay"},"content":" private LocalDate date;","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"Jonoans"},"content":" public Transaction(String description, Double amount, LocalDate date) {","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Jonoans"},"content":" if (date \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Jonoans"},"content":" date \u003d LocalDate.now();","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"sRanay"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"sRanay"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"sRanay"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"Jonoans"},"content":" public Double getAmount() {","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"sRanay"},"content":" return amount;","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"Jonoans"},"content":" public void setAmount(Double amount) {","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"sRanay"},"content":" this.amount \u003d amount;","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"sRanay"},"content":" public LocalDate getDate() {","lastModifiedDate":"2023-10-13"},{"lineNumber":29,"author":{"gitId":"sRanay"},"content":" return date;","lastModifiedDate":"2023-10-13"},{"lineNumber":30,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"sRanay"},"content":" public void setDate(LocalDate date) {","lastModifiedDate":"2023-10-13"},{"lineNumber":33,"author":{"gitId":"sRanay"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-13"},{"lineNumber":34,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"sRanay"},"content":" public String getDescription() {","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"sRanay"},"content":" return description;","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"sRanay"},"content":" public void setDescription(String description) {","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"sRanay"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":43,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":44,"author":{"gitId":"sRanay"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"Jonoans":8,"sRanay":36}},{"path":"src/main/java/seedu/duke/command/AddExpenseCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Jonoans"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.classes.Expense;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.classes.StateManager;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.classes.Transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.parser.Parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Jonoans"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Jonoans"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Jonoans"},"content":"public class AddExpenseCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Jonoans"},"content":" private static final String AMOUNT_ARG \u003d \"amount\";","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Jonoans"},"content":" private static final String[] HEADERS \u003d {\"Description\", \"Amount\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Jonoans"},"content":" private static final String SUCCESS_PRINT \u003d \"Nice! The following expense has been tracked:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Jonoans"},"content":" private static final String MISSING_DESC \u003d \"Description cannot be empty...\";","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Jonoans"},"content":" private static final String MISSING_AMOUNT \u003d \"Amount cannot be empty...\";","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"Jonoans"},"content":" private static final String BAD_AMOUNT \u003d \"Invalid amount value specified...\";","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Jonoans"},"content":" public AddExpenseCommand(String description, HashMap\u003cString, String\u003e args) {","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Jonoans"},"content":" super(description, args);","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Jonoans"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Jonoans"},"content":" public void execute(Ui ui) throws DukeException {","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Jonoans"},"content":" // TODO:","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Jonoans"},"content":" // Add dates arg to command","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"Jonoans"},"content":" throwIfInvalidDescOrArgs();","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"Jonoans"},"content":" Transaction transaction \u003d prepareTransaction();","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"Jonoans"},"content":" Expense expense \u003d addNewExpense(transaction);","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"Jonoans"},"content":" printSuccess(ui, expense);","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Jonoans"},"content":" private Expense addNewExpense(Transaction transaction) {","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Jonoans"},"content":" Expense expense \u003d new Expense(transaction, null);","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"Jonoans"},"content":" StateManager.getStateManager().addExpense(expense);","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"Jonoans"},"content":" return expense;","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Jonoans"},"content":" private Transaction prepareTransaction() {","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Jonoans"},"content":" String description \u003d getDescription();","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"Jonoans"},"content":" Double amount \u003d Parser.parseNonNegativeDouble(getArg(AMOUNT_ARG));","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Jonoans"},"content":" return new Transaction(description, amount, null);","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Jonoans"},"content":" private void printSuccess(Ui ui, Expense expense) {","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"Jonoans"},"content":" Transaction transaction \u003d expense.getTransaction();","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cString\u003e printValues \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"Jonoans"},"content":" printValues.add(transaction.getDescription());","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"Jonoans"},"content":" printValues.add(ui.formatAmount(transaction.getAmount()));","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"Jonoans"},"content":" ui.print(SUCCESS_PRINT);","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"Jonoans"},"content":" ui.printTableRow(printValues, HEADERS);","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"Jonoans"},"content":" private void throwIfInvalidDescOrArgs() throws DukeException {","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"Jonoans"},"content":" // TODO:","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"Jonoans"},"content":" // Ensure category is non-null - after V1.0","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"Jonoans"},"content":" assert getDescription() !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"Jonoans"},"content":" assert getArgs() !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"Jonoans"},"content":" if (getDescription().isBlank()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"Jonoans"},"content":" throw new DukeException(MISSING_DESC);","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"Jonoans"},"content":" String amountArg \u003d getArg(AMOUNT_ARG);","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"Jonoans"},"content":" if (amountArg \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"Jonoans"},"content":" throw new DukeException(MISSING_AMOUNT);","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"Jonoans"},"content":" Double amount \u003d Parser.parseNonNegativeDouble(amountArg);","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"Jonoans"},"content":" if (amount \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"Jonoans"},"content":" throw new DukeException(BAD_AMOUNT);","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"Jonoans"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Jonoans":77}},{"path":"src/main/java/seedu/duke/command/AddIncomeCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"Jonoans"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.classes.Income;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.classes.StateManager;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.classes.Transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.parser.Parser;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Jonoans"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Jonoans"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Jonoans"},"content":"public class AddIncomeCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Jonoans"},"content":" private static final String AMOUNT_ARG \u003d \"amount\";","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Jonoans"},"content":" private static final String[] HEADERS \u003d {\"Description\", \"Amount\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Jonoans"},"content":" private static final String SUCCESS_PRINT \u003d \"Nice! The following income has been tracked:\";","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Jonoans"},"content":" private static final String MISSING_DESC \u003d \"Description cannot be empty...\";","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Jonoans"},"content":" private static final String MISSING_AMOUNT \u003d \"Amount cannot be empty...\";","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"Jonoans"},"content":" private static final String BAD_AMOUNT \u003d \"Invalid amount value specified...\";","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Jonoans"},"content":" public AddIncomeCommand(String description, HashMap\u003cString, String\u003e args) {","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Jonoans"},"content":" super(description, args);","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Jonoans"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Jonoans"},"content":" public void execute(Ui ui) throws DukeException {","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Jonoans"},"content":" // TODO:","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Jonoans"},"content":" // Add dates arg to command","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"Jonoans"},"content":" throwIfInvalidDescOrArgs();","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"Jonoans"},"content":" Transaction transaction \u003d prepareTransaction();","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"Jonoans"},"content":" Income income \u003d addNewIncome(transaction);","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"Jonoans"},"content":" printSuccess(ui, income);","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Jonoans"},"content":" private Income addNewIncome(Transaction transaction) {","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Jonoans"},"content":" Income income \u003d new Income(transaction, null);","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"Jonoans"},"content":" StateManager.getStateManager().addIncome(income);","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"Jonoans"},"content":" return income;","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Jonoans"},"content":" private Transaction prepareTransaction() {","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Jonoans"},"content":" String description \u003d getDescription();","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"Jonoans"},"content":" Double amount \u003d Parser.parseNonNegativeDouble(getArg(AMOUNT_ARG));","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Jonoans"},"content":" return new Transaction(description, amount, null);","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Jonoans"},"content":" private void printSuccess(Ui ui, Income income) {","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"Jonoans"},"content":" Transaction transaction \u003d income.getTransaction();","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cString\u003e printValues \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"Jonoans"},"content":" printValues.add(transaction.getDescription());","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"Jonoans"},"content":" printValues.add(ui.formatAmount(transaction.getAmount()));","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"Jonoans"},"content":" ui.print(SUCCESS_PRINT);","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"Jonoans"},"content":" ui.printTableRow(printValues, HEADERS);","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"Jonoans"},"content":" private void throwIfInvalidDescOrArgs() throws DukeException {","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"Jonoans"},"content":" // TODO:","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"Jonoans"},"content":" // Ensure goal is non-null - after V1.0","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"Jonoans"},"content":" assert getDescription() !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"Jonoans"},"content":" assert getArgs() !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"Jonoans"},"content":" if (getDescription().isBlank()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"Jonoans"},"content":" throw new DukeException(MISSING_DESC);","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"Jonoans"},"content":" String amountArg \u003d getArg(AMOUNT_ARG);","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"Jonoans"},"content":" if (amountArg \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"Jonoans"},"content":" throw new DukeException(MISSING_AMOUNT);","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"Jonoans"},"content":" Double amount \u003d Parser.parseNonNegativeDouble(amountArg);","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"Jonoans"},"content":" if (amount \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"Jonoans"},"content":" throw new DukeException(BAD_AMOUNT);","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"Jonoans"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Jonoans":77}},{"path":"src/main/java/seedu/duke/command/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ChoonSiang"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"Jonoans"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"Jonoans"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"ChoonSiang"},"content":"public abstract class Command {","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"Jonoans"},"content":" private final String description;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Jonoans"},"content":" private final HashMap\u003cString, String\u003e args;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Jonoans"},"content":" public Command() {","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Jonoans"},"content":" description \u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Jonoans"},"content":" args \u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Jonoans"},"content":" public Command(String description, HashMap\u003cString, String\u003e args) {","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Jonoans"},"content":" this.description \u003d description;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Jonoans"},"content":" this.args \u003d args;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Jonoans"},"content":" protected String getDescription() {","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Jonoans"},"content":" return description;","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Jonoans"},"content":" protected String getArg(String key) {","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Jonoans"},"content":" assert args !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Jonoans"},"content":" return args.get(key);","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"Jonoans"},"content":" protected HashMap\u003cString, String\u003e getArgs() {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"Jonoans"},"content":" return args;","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"Jonoans"},"content":" public abstract void execute(Ui ui) throws DukeException;","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"ChoonSiang"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"Jonoans":29,"ChoonSiang":8}},{"path":"src/main/java/seedu/duke/command/ExitCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ChoonSiang"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"ChoonSiang"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"ChoonSiang"},"content":" @Override","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"ChoonSiang"},"content":" public void execute(Ui ui) {","lastModifiedDate":"2023-10-12"},{"lineNumber":9,"author":{"gitId":"ChoonSiang"},"content":" ui.printBye();","lastModifiedDate":"2023-10-12"},{"lineNumber":10,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"ChoonSiang"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"ChoonSiang":11}},{"path":"src/main/java/seedu/duke/command/HelpCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"sRanay"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"sRanay"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"sRanay"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"sRanay"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"sRanay"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"sRanay"},"content":" private static final String LINE_DIVIDER \u003d \"\";","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"sRanay"},"content":" private static final String[] FULL_LIST_HEADERS \u003d {\"Command\", \"Description\"};","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"sRanay"},"content":" private static final String[] FLAG_DESCRIPTION_HEADERS \u003d {\"Option\", \"Description\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"sRanay"},"content":" private static final Integer[] CUSTOM_COLUMN_WIDTH \u003d {10, 1000};","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"sRanay"},"content":" private static final String HELP_COMMAND \u003d \"help\";","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"sRanay"},"content":" private static final String HELP_DESCRIPTION \u003d \"Shows a list of all the commands available to the user\";","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"sRanay"},"content":" private static final String IN_COMMAND \u003d \"in\";","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"sRanay"},"content":" private static final String IN_DESCRIPTION \u003d \"Adds an income towards goal\";","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"sRanay"},"content":" private static final String IN_COMMAND_USAGE \u003d \" DESCRIPTION /amount AMOUNT /goal GOAL [/date DATE in DDMMYYYY]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"sRanay"},"content":" private static final String[] IN_COMMAND_FLAGS \u003d {\"/amount\", \"/goal\", \"/date\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"sRanay"},"content":" private static final String[] IN_COMMAND_FLAGS_DESCRIPTION \u003d {\"Amount to be added\", ","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"sRanay"},"content":" \"The goal to classify it under\", ","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"sRanay"},"content":" \"Date of the transaction\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"sRanay"},"content":" private static final String OUT_COMMAND \u003d \"out\";","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"sRanay"},"content":" private static final String OUT_DESCRIPTION \u003d \"Adds an expense for a category\";","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"sRanay"},"content":" private static final String OUT_COMMAND_USAGE \u003d \" DESCRIPTION /amount AMOUNT \" +","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"sRanay"},"content":" \"/category CATEGORY [/date DATE in DDMMYYYY]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"sRanay"},"content":" private static final String[] OUT_COMMAND_FLAGS \u003d {\"/amount\", \"/category\", \"/date\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"sRanay"},"content":" private static final String[] OUT_COMMAND_FLAGS_DESCRIPTION \u003d {\"Amount to be deducted\", ","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"sRanay"},"content":" \"The spending category to classify it under\", ","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"sRanay"},"content":" \"Date of the transaction\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"sRanay"},"content":" private static final String DELETE_COMMAND \u003d \"delete\";","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"sRanay"},"content":" private static final String DELETE_DESCRIPTION \u003d \"Delete a specific transaction based on the index in the list\";","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"sRanay"},"content":" private static final String DELETE_COMMAND_USAGE \u003d \" INDEX /type (in | out)\";","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"sRanay"},"content":" private static final String[] DELETE_COMMAND_FLAGS \u003d {\"/type\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"sRanay"},"content":" private static final String[] DELETE_COMMAND_FLAGS_DESCRIPTION \u003d {\"To set whether it is a in or out transaction\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"sRanay"},"content":" private static final String LIST_COMMAND \u003d \"list\";","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"sRanay"},"content":" private static final String LIST_DESCRIPTION \u003d \"Shows a list of all added transactions based on type\";","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"sRanay"},"content":" private static final String LIST_COMMAND_USAGE \u003d \" /type (in | out) [/goal GOAL] [/category CATEGORY]\";","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"sRanay"},"content":" private static final String[] LIST_COMMAND_FLAGS \u003d {\"/type\", \"/goal\", \"/category\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"sRanay"},"content":" private static final String[] LIST_COMMAND_FLAGS_DESCRIPTION \u003d {\"To set whether it is a in or out transaction\", ","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"sRanay"},"content":" \"The goal which it is classify under\", ","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"sRanay"},"content":" \"The spending category it is classify under\"};","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"sRanay"},"content":" private static final String USAGE_PREFIX \u003d \"Usage: \";","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"sRanay"},"content":" private static final String INVALID_COMMAND \u003d \"NO SUCH COMMAND\";","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"sRanay"},"content":" private ArrayList\u003cArrayList\u003cString\u003e\u003e helpList;","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"sRanay"},"content":" public HelpCommand(String command, HashMap\u003cString, String\u003e args) {","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"sRanay"},"content":" super(command, args);","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"sRanay"},"content":" helpList \u003d new ArrayList\u003cArrayList\u003cString\u003e\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"sRanay"},"content":" public ArrayList\u003cString\u003e convertCommandList(String command, String description) {","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"sRanay"},"content":" ArrayList\u003cString\u003e tableData \u003d new ArrayList\u003cString\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"sRanay"},"content":" tableData.add(command);","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"sRanay"},"content":" tableData.add(description);","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"sRanay"},"content":" return tableData;","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"sRanay"},"content":" public ArrayList\u003cString\u003e printHelpDescription() {","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"sRanay"},"content":" ArrayList\u003cString\u003e help \u003d convertCommandList(HELP_COMMAND, HELP_DESCRIPTION);","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"sRanay"},"content":" return help;","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"sRanay"},"content":" public ArrayList\u003cString\u003e printInDescription() {","lastModifiedDate":"2023-10-16"},{"lineNumber":64,"author":{"gitId":"sRanay"},"content":" ArrayList\u003cString\u003e in \u003d convertCommandList(IN_COMMAND, IN_DESCRIPTION);","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"sRanay"},"content":" return in;","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":68,"author":{"gitId":"sRanay"},"content":" public ArrayList\u003cString\u003e printOutDescription() {","lastModifiedDate":"2023-10-16"},{"lineNumber":69,"author":{"gitId":"sRanay"},"content":" ArrayList\u003cString\u003e out \u003d convertCommandList(OUT_COMMAND, OUT_DESCRIPTION);","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"sRanay"},"content":" return out; ","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"sRanay"},"content":" public ArrayList\u003cString\u003e printDeleteDescription() {","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"sRanay"},"content":" ArrayList\u003cString\u003e delete \u003d convertCommandList(DELETE_COMMAND, DELETE_DESCRIPTION);","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"sRanay"},"content":" return delete;","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"sRanay"},"content":" public ArrayList\u003cString\u003e printListDescription() {","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"sRanay"},"content":" ArrayList\u003cString\u003e list \u003d convertCommandList(LIST_COMMAND, LIST_DESCRIPTION);","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"sRanay"},"content":" return list;","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"sRanay"},"content":" public ArrayList\u003cArrayList\u003cString\u003e\u003e printFullList() {","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"sRanay"},"content":" this.helpList.add(printHelpDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"sRanay"},"content":" this.helpList.add(printInDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"sRanay"},"content":" this.helpList.add(printOutDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"sRanay"},"content":" this.helpList.add(printDeleteDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"sRanay"},"content":" this.helpList.add(printListDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"sRanay"},"content":" assert this.helpList !\u003d null;","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"sRanay"},"content":" return this.helpList;","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"sRanay"},"content":" public String helpUsage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"sRanay"},"content":" return USAGE_PREFIX + HELP_COMMAND;","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"sRanay"},"content":" public String inUsage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"sRanay"},"content":" return USAGE_PREFIX + IN_COMMAND + IN_COMMAND_USAGE;","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"sRanay"},"content":" public String outUsage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"sRanay"},"content":" return USAGE_PREFIX + OUT_COMMAND + OUT_COMMAND_USAGE;","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"sRanay"},"content":" public String deleteUsage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"sRanay"},"content":" return USAGE_PREFIX + DELETE_COMMAND + DELETE_COMMAND_USAGE;","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"sRanay"},"content":" public String listUsage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"sRanay"},"content":" return USAGE_PREFIX + LIST_COMMAND + LIST_COMMAND_USAGE;","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"sRanay"},"content":" public void convertIntoList(String[] flags, String[] description) {","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"sRanay"},"content":" for (int i \u003d 0; i \u003c flags.length; i++) {","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"sRanay"},"content":" ArrayList\u003cString\u003e row \u003d new ArrayList\u003cString\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"sRanay"},"content":" row.add(flags[i]);","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"sRanay"},"content":" row.add(description[i]);","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"sRanay"},"content":" this.helpList.add(row);","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":122,"author":{"gitId":"sRanay"},"content":" public void updateOutput(Ui ui) {","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"sRanay"},"content":" if (getDescription().isBlank()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":124,"author":{"gitId":"sRanay"},"content":" printFullList();","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"sRanay"},"content":" ui.printTableRows(this.helpList, FULL_LIST_HEADERS, CUSTOM_COLUMN_WIDTH);","lastModifiedDate":"2023-10-17"},{"lineNumber":126,"author":{"gitId":"sRanay"},"content":" return;","lastModifiedDate":"2023-10-17"},{"lineNumber":127,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"sRanay"},"content":" ","lastModifiedDate":"2023-10-17"},{"lineNumber":129,"author":{"gitId":"sRanay"},"content":" switch (getDescription().toLowerCase()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"sRanay"},"content":" case \"help\":","lastModifiedDate":"2023-10-16"},{"lineNumber":131,"author":{"gitId":"sRanay"},"content":" ui.print(helpUsage());","lastModifiedDate":"2023-10-17"},{"lineNumber":132,"author":{"gitId":"sRanay"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":133,"author":{"gitId":"sRanay"},"content":" case \"in\":","lastModifiedDate":"2023-10-16"},{"lineNumber":134,"author":{"gitId":"sRanay"},"content":" ui.print(inUsage());","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"sRanay"},"content":" convertIntoList(IN_COMMAND_FLAGS, IN_COMMAND_FLAGS_DESCRIPTION);","lastModifiedDate":"2023-10-17"},{"lineNumber":136,"author":{"gitId":"sRanay"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":137,"author":{"gitId":"sRanay"},"content":" case \"out\":","lastModifiedDate":"2023-10-16"},{"lineNumber":138,"author":{"gitId":"sRanay"},"content":" ui.print(outUsage());","lastModifiedDate":"2023-10-17"},{"lineNumber":139,"author":{"gitId":"sRanay"},"content":" convertIntoList(OUT_COMMAND_FLAGS, OUT_COMMAND_FLAGS_DESCRIPTION);","lastModifiedDate":"2023-10-17"},{"lineNumber":140,"author":{"gitId":"sRanay"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":141,"author":{"gitId":"sRanay"},"content":" case \"delete\":","lastModifiedDate":"2023-10-16"},{"lineNumber":142,"author":{"gitId":"sRanay"},"content":" ui.print(deleteUsage());","lastModifiedDate":"2023-10-17"},{"lineNumber":143,"author":{"gitId":"sRanay"},"content":" convertIntoList(DELETE_COMMAND_FLAGS, DELETE_COMMAND_FLAGS_DESCRIPTION);","lastModifiedDate":"2023-10-17"},{"lineNumber":144,"author":{"gitId":"sRanay"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":145,"author":{"gitId":"sRanay"},"content":" case \"list\":","lastModifiedDate":"2023-10-16"},{"lineNumber":146,"author":{"gitId":"sRanay"},"content":" ui.print(listUsage());","lastModifiedDate":"2023-10-17"},{"lineNumber":147,"author":{"gitId":"sRanay"},"content":" convertIntoList(LIST_COMMAND_FLAGS, LIST_COMMAND_FLAGS_DESCRIPTION);","lastModifiedDate":"2023-10-17"},{"lineNumber":148,"author":{"gitId":"sRanay"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":149,"author":{"gitId":"sRanay"},"content":" default:","lastModifiedDate":"2023-10-16"},{"lineNumber":150,"author":{"gitId":"sRanay"},"content":" ui.print(INVALID_COMMAND);","lastModifiedDate":"2023-10-17"},{"lineNumber":151,"author":{"gitId":"sRanay"},"content":" break;","lastModifiedDate":"2023-10-16"},{"lineNumber":152,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":153,"author":{"gitId":"sRanay"},"content":" ","lastModifiedDate":"2023-10-17"},{"lineNumber":154,"author":{"gitId":"sRanay"},"content":" if (!this.helpList.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":155,"author":{"gitId":"sRanay"},"content":" ui.printTableRows(this.helpList, FLAG_DESCRIPTION_HEADERS, CUSTOM_COLUMN_WIDTH);","lastModifiedDate":"2023-10-17"},{"lineNumber":156,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":157,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":158,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":159,"author":{"gitId":"sRanay"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":160,"author":{"gitId":"sRanay"},"content":" public void execute(Ui ui) {","lastModifiedDate":"2023-10-17"},{"lineNumber":161,"author":{"gitId":"sRanay"},"content":" ui.print(LINE_DIVIDER);","lastModifiedDate":"2023-10-17"},{"lineNumber":162,"author":{"gitId":"sRanay"},"content":" updateOutput(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":163,"author":{"gitId":"sRanay"},"content":" ui.print(LINE_DIVIDER);","lastModifiedDate":"2023-10-17"},{"lineNumber":164,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":165,"author":{"gitId":"sRanay"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"sRanay":165}},{"path":"src/main/java/seedu/duke/command/ListCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"hooami"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"hooami"},"content":"import seedu.duke.classes.Expense;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"hooami"},"content":"import seedu.duke.classes.Income;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"hooami"},"content":"import seedu.duke.classes.StateManager;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"hooami"},"content":"import seedu.duke.classes.Transaction;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"hooami"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"hooami"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"hooami"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"hooami"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"hooami"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"hooami"},"content":"public class ListCommand extends Command {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"hooami"},"content":" private static final String INVALID_TYPE_FORMAT \u003d \"I\u0027m sorry, you need to specify a type in the format \" +","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"hooami"},"content":" \"\u0027/type in\u0027 or \u0027/type out\u0027\";","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"hooami"},"content":" private static final String INVALID_GOAL_FORMAT \u003d \"You have entered /goal, but you did not enter anything\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"hooami"},"content":" \" after that\";","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"hooami"},"content":" private static final String INVALID_CATEGORY_FORMAT \u003d \"You have entered /category, but you did not enter\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"hooami"},"content":" \" anything after that\";","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"hooami"},"content":" private static final String EMPTY_LIST \u003d \"It appears that we have came up empty. Why not try adding some\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"hooami"},"content":" \" transactions first?\";","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"hooami"},"content":" private static final String[] HEADERS \u003d {\"ID\", \"Description\", \"Date\", \"Amount\", \"Goal\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"hooami"},"content":" private static final String IN \u003d \"IN TRANSACTIONS\";","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"hooami"},"content":" private static final String OUT \u003d \"OUT TRANSACTIONS\";","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"hooami"},"content":" private Ui ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"hooami"},"content":" public ListCommand(String description, HashMap\u003cString, String\u003e args) {","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"hooami"},"content":" super(description, args);","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"hooami"},"content":" @Override","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"hooami"},"content":" public void execute(Ui ui) throws DukeException {","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"hooami"},"content":" this.ui \u003d ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"hooami"},"content":" validateArgs();","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"hooami"},"content":" listTypeHandler();","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"hooami"},"content":" // Description gets ignored for list","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"hooami"},"content":" private void validateArgs() throws DukeException {","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"hooami"},"content":" if (!getArgs().containsKey(\"type\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"hooami"},"content":" throw new DukeException(INVALID_TYPE_FORMAT);","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"hooami"},"content":" String type \u003d getArg(\"type\");","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"hooami"},"content":" if (!type.equals(\"in\") \u0026\u0026 !type.equals(\"out\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"hooami"},"content":" throw new DukeException(INVALID_TYPE_FORMAT);","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"hooami"},"content":" if (getArgs().containsKey(\"goal\") \u0026\u0026 getArg(\"goal\").isBlank()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"hooami"},"content":" throw new DukeException(INVALID_GOAL_FORMAT);","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"hooami"},"content":" if (getArgs().containsKey(\"category\") \u0026\u0026 getArg(\"goal\").isBlank()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"hooami"},"content":" throw new DukeException(INVALID_CATEGORY_FORMAT);","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"hooami"},"content":" private void listTypeHandler() throws DukeException {","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"hooami"},"content":" ArrayList\u003cArrayList\u003cString\u003e\u003e returnArray;","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"hooami"},"content":" String type \u003d getArg(\"type\");","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"hooami"},"content":" assert type !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"hooami"},"content":" if (type.equals(\"in\")) {","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"hooami"},"content":" listIncome();","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"hooami"},"content":" } else {","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"hooami"},"content":" listExpenses();","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"hooami"},"content":" private void printList(ArrayList\u003cArrayList\u003cString\u003e\u003e listArray, String headerMessage) {","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"hooami"},"content":" ui.listTransactions(listArray, HEADERS, headerMessage);","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"hooami"},"content":" private void listIncome() throws DukeException {","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"hooami"},"content":" ArrayList\u003cIncome\u003e incomeArray \u003d StateManager.getStateManager().getAllIncomes();","lastModifiedDate":"2023-10-15"},{"lineNumber":75,"author":{"gitId":"hooami"},"content":" ArrayList\u003cArrayList\u003cString\u003e\u003e printIncomes \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"hooami"},"content":" if (incomeArray \u003d\u003d null || incomeArray.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"hooami"},"content":" throw new DukeException(EMPTY_LIST);","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"hooami"},"content":" int index \u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"hooami"},"content":" for (Income i : incomeArray) {","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"hooami"},"content":" Transaction currentTransaction \u003d i.getTransaction();","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"hooami"},"content":" String description \u003d currentTransaction.getDescription();","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"hooami"},"content":" String date \u003d currentTransaction.getDate().toString();","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"hooami"},"content":" String amount \u003d String.valueOf(ui.formatAmount(currentTransaction.getAmount()));","lastModifiedDate":"2023-10-16"},{"lineNumber":85,"author":{"gitId":"hooami"},"content":" String goal \u003d \"TBC\";","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"hooami"},"content":" // TODO uncomment once goal is implemented","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"hooami"},"content":" // String goal \u003d i.getGoal().getDescription();","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"hooami"},"content":" printIncomes.add(new ArrayList\u003c\u003e(Arrays.asList(String.valueOf(index), description, date, amount, goal)));","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"hooami"},"content":" index++;","lastModifiedDate":"2023-10-15"},{"lineNumber":90,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"hooami"},"content":" printList(printIncomes, IN);","lastModifiedDate":"2023-10-15"},{"lineNumber":92,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"hooami"},"content":" private void listExpenses() throws DukeException {","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"hooami"},"content":" ArrayList\u003cExpense\u003e expenseArray \u003d StateManager.getStateManager().getAllExpenses();","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"hooami"},"content":" ArrayList\u003cArrayList\u003cString\u003e\u003e printExpenses \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"hooami"},"content":" if (expenseArray \u003d\u003d null || expenseArray.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"hooami"},"content":" throw new DukeException(EMPTY_LIST);","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"hooami"},"content":" int index \u003d 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"hooami"},"content":" for (Expense i : expenseArray) {","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"hooami"},"content":" Transaction currentExpense \u003d i.getTransaction();","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"hooami"},"content":" String description \u003d currentExpense.getDescription();","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"hooami"},"content":" String date \u003d currentExpense.getDate().toString();","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"hooami"},"content":" String amount \u003d String.valueOf(currentExpense.getAmount());","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"hooami"},"content":" String category \u003d \"TBC\";","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"hooami"},"content":" // TODO uncomment once category is implemented","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"hooami"},"content":" // String category \u003d i.getCategory().getName();","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"hooami"},"content":" printExpenses.add(new ArrayList\u003c\u003e(Arrays.asList(String.valueOf(index), description, date,","lastModifiedDate":"2023-10-16"},{"lineNumber":111,"author":{"gitId":"hooami"},"content":" amount, category)));","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"hooami"},"content":" index++;","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"hooami"},"content":" printList(printExpenses, OUT);","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"hooami"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"hooami":116}},{"path":"src/main/java/seedu/duke/command/RemoveTransactionCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ChoonSiang"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.classes.StateManager;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"ChoonSiang"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"ChoonSiang"},"content":"public class RemoveTransactionCommand extends Command {","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"ChoonSiang"},"content":" private static final String MISSING_IDX \u003d \"Index cannot be empty...\";","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"ChoonSiang"},"content":" private static final String INVALID_IDX \u003d \"Please enter a valid index.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"ChoonSiang"},"content":" private static final String MISSING_TYPE \u003d \"Please indicate the transaction type.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"ChoonSiang"},"content":" private static final String INVALID_TYPE \u003d \"Please indicate either /type in or /type out.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"ChoonSiang"},"content":" private static final String ERROR_MSG \u003d \"Error encountered when removing transaction.\";","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"ChoonSiang"},"content":" public RemoveTransactionCommand(String description, HashMap\u003cString, String\u003e args) {","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"ChoonSiang"},"content":" super(description, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"ChoonSiang"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"ChoonSiang"},"content":" public void execute(Ui ui) throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"ChoonSiang"},"content":" throwIfInvalidDescOrArgs();","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"ChoonSiang"},"content":" removeTransaction(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"ChoonSiang"},"content":" private void throwIfInvalidDescOrArgs() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"ChoonSiang"},"content":" assert getDescription() !\u003d null;","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"ChoonSiang"},"content":" assert getArgs() !\u003d null;","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"ChoonSiang"},"content":" if (getDescription().isBlank()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"ChoonSiang"},"content":" throw new DukeException(MISSING_IDX);","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ChoonSiang"},"content":" String description \u003d getDescription();","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"ChoonSiang"},"content":" if (!isInteger(description)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"ChoonSiang"},"content":" throw new DukeException(INVALID_IDX);","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"ChoonSiang"},"content":" String typeArg \u003d getArg(\"type\");","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"ChoonSiang"},"content":" if (typeArg \u003d\u003d null) {","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"ChoonSiang"},"content":" throw new DukeException(MISSING_TYPE);","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"ChoonSiang"},"content":" if (!(typeArg.equalsIgnoreCase(\"in\") || typeArg.equalsIgnoreCase(\"out\"))) {","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"ChoonSiang"},"content":" throw new DukeException(INVALID_TYPE);","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"ChoonSiang"},"content":" private boolean isInteger(String description) {","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"ChoonSiang"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"ChoonSiang"},"content":" Integer.parseInt(description);","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"ChoonSiang"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"ChoonSiang"},"content":" return false;","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"ChoonSiang"},"content":" return true;","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"ChoonSiang"},"content":" private void removeTransaction(Ui ui) throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"ChoonSiang"},"content":" String type \u003d getArg(\"type\").toLowerCase();","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"ChoonSiang"},"content":" int maxSize \u003d getTransactionMaxSize(type);","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"ChoonSiang"},"content":" int idx \u003d parseIdx(maxSize) - 1; //-1 due to 0 based indexing for arraylist","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"ChoonSiang"},"content":" assert idx \u003e\u003d 0 : \"Index should be a valid integer greater than 0\";","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"ChoonSiang"},"content":" boolean isSuccess \u003d false;","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"ChoonSiang"},"content":" String transactionDescription \u003d \"\";","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"ChoonSiang"},"content":" if (type.equals(\"in\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"ChoonSiang"},"content":" transactionDescription \u003d StateManager.getStateManager().getIncome(idx)","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"ChoonSiang"},"content":" .getTransaction().getDescription();","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"ChoonSiang"},"content":" isSuccess \u003d StateManager.getStateManager().removeIncome(idx);","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"ChoonSiang"},"content":" } else if (type.equals(\"out\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"ChoonSiang"},"content":" transactionDescription \u003d StateManager.getStateManager().getExpense(idx)","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"ChoonSiang"},"content":" .getTransaction().getDescription();","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"ChoonSiang"},"content":" isSuccess \u003d StateManager.getStateManager().removeExpense(idx);","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"ChoonSiang"},"content":" if (!isSuccess) {","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"ChoonSiang"},"content":" throw new DukeException(ERROR_MSG);","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"ChoonSiang"},"content":" printSuccess(ui, transactionDescription, idx + 1); // idx + 1 for format to show to user","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"ChoonSiang"},"content":" private int getTransactionMaxSize(String type) {","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"ChoonSiang"},"content":" int maxSize \u003d 0;","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"ChoonSiang"},"content":" if (type.equals(\"in\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"ChoonSiang"},"content":" maxSize \u003d StateManager.getStateManager().getIncomesSize();","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"ChoonSiang"},"content":" } else if (type.equals(\"out\")) {","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"ChoonSiang"},"content":" maxSize \u003d StateManager.getStateManager().getExpensesSize();","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"ChoonSiang"},"content":" return maxSize;","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"ChoonSiang"},"content":" private int parseIdx(int maxSize) throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"ChoonSiang"},"content":" int index \u003d Integer.parseInt(getDescription());","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"ChoonSiang"},"content":" if (index \u003c 1 || index \u003e maxSize) {","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"ChoonSiang"},"content":" throw new DukeException(INVALID_IDX);","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"ChoonSiang"},"content":" return index;","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"ChoonSiang"},"content":" private void printSuccess(Ui ui, String description, int idx) {","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"ChoonSiang"},"content":" String type \u003d getArg(\"type\").toLowerCase();","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"ChoonSiang"},"content":" String transactionType \u003d type.equals(\"in\") ? \"income\" : \"expense\";","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"ChoonSiang"},"content":" String msg \u003d \"Successfully remove \" + transactionType + \" no.\" + idx + \": \" + description;","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"ChoonSiang"},"content":" ui.print(msg);","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"ChoonSiang"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"ChoonSiang":109}},{"path":"src/main/java/seedu/duke/exception/DukeException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ChoonSiang"},"content":"package seedu.duke.exception;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"ChoonSiang"},"content":"public class DukeException extends Exception {","lastModifiedDate":"2023-10-12"},{"lineNumber":4,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":5,"author":{"gitId":"ChoonSiang"},"content":" public DukeException(String message) {","lastModifiedDate":"2023-10-12"},{"lineNumber":6,"author":{"gitId":"ChoonSiang"},"content":" super(message);","lastModifiedDate":"2023-10-12"},{"lineNumber":7,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":8,"author":{"gitId":"ChoonSiang"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"ChoonSiang":8}},{"path":"src/main/java/seedu/duke/parser/Parser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ChoonSiang"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"hooami"},"content":"import seedu.duke.command.AddExpenseCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"hooami"},"content":"import seedu.duke.command.AddIncomeCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"hooami"},"content":"import seedu.duke.command.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"hooami"},"content":"import seedu.duke.command.ExitCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"sRanay"},"content":"import seedu.duke.command.HelpCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"hooami"},"content":"import seedu.duke.command.ListCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.command.RemoveTransactionCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-12"},{"lineNumber":11,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":12,"author":{"gitId":"ChoonSiang"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-12"},{"lineNumber":13,"author":{"gitId":"ChoonSiang"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-12"},{"lineNumber":14,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"ChoonSiang"},"content":"public class Parser {","lastModifiedDate":"2023-10-12"},{"lineNumber":16,"author":{"gitId":"ChoonSiang"},"content":" private static final String SPACE_WITH_ARG_PREFIX \u003d \" /\";","lastModifiedDate":"2023-10-12"},{"lineNumber":17,"author":{"gitId":"ChoonSiang"},"content":" private static final String ARG_PREFIX \u003d \"/\";","lastModifiedDate":"2023-10-12"},{"lineNumber":18,"author":{"gitId":"ChoonSiang"},"content":" private static final String DELIM \u003d \" \";","lastModifiedDate":"2023-10-12"},{"lineNumber":19,"author":{"gitId":"ChoonSiang"},"content":" private static final String EMPTY_STRING \u003d \"\";","lastModifiedDate":"2023-10-12"},{"lineNumber":20,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":21,"author":{"gitId":"ChoonSiang"},"content":" public Parser() {","lastModifiedDate":"2023-10-12"},{"lineNumber":22,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":23,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":24,"author":{"gitId":"ChoonSiang"},"content":" public Command parse(String userInput) throws DukeException {","lastModifiedDate":"2023-10-12"},{"lineNumber":25,"author":{"gitId":"ChoonSiang"},"content":" String trimmedInput \u003d userInput.trim();","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":27,"author":{"gitId":"ChoonSiang"},"content":" String commandWord \u003d getCommandWord(trimmedInput);","lastModifiedDate":"2023-10-12"},{"lineNumber":28,"author":{"gitId":"ChoonSiang"},"content":" String description \u003d getDescription(trimmedInput);","lastModifiedDate":"2023-10-12"},{"lineNumber":29,"author":{"gitId":"ChoonSiang"},"content":" HashMap\u003cString, String\u003e argsMap \u003d getArguments(trimmedInput);","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"ChoonSiang"},"content":" return getCommand(commandWord, description, argsMap);","lastModifiedDate":"2023-10-12"},{"lineNumber":32,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":33,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"ChoonSiang"},"content":" public Command getCommand(String commandWord, String description,","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"ChoonSiang"},"content":" HashMap\u003cString, String\u003e argsMap) throws DukeException {","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"ChoonSiang"},"content":" switch (commandWord) {","lastModifiedDate":"2023-10-12"},{"lineNumber":37,"author":{"gitId":"ChoonSiang"},"content":" case \"bye\":","lastModifiedDate":"2023-10-12"},{"lineNumber":38,"author":{"gitId":"ChoonSiang"},"content":" return new ExitCommand();","lastModifiedDate":"2023-10-12"},{"lineNumber":39,"author":{"gitId":"Jonoans"},"content":" case \"in\":","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Jonoans"},"content":" return new AddIncomeCommand(description, argsMap);","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"Jonoans"},"content":" case \"out\":","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Jonoans"},"content":" return new AddExpenseCommand(description, argsMap);","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"hooami"},"content":" case \"list\":","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"hooami"},"content":" return new ListCommand(description, argsMap);","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"ChoonSiang"},"content":" case \"delete\":","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"ChoonSiang"},"content":" return new RemoveTransactionCommand(description, argsMap);","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"sRanay"},"content":" case \"help\":","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"sRanay"},"content":" return new HelpCommand(description, argsMap);","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"ChoonSiang"},"content":" default:","lastModifiedDate":"2023-10-12"},{"lineNumber":50,"author":{"gitId":"ChoonSiang"},"content":" throw new DukeException(\"Sorry I do not understand your command\");","lastModifiedDate":"2023-10-12"},{"lineNumber":51,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":52,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":53,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":54,"author":{"gitId":"ChoonSiang"},"content":" public String getCommandWord(String userInput) {","lastModifiedDate":"2023-10-12"},{"lineNumber":55,"author":{"gitId":"ChoonSiang"},"content":" return userInput.split(DELIM, 2)[0].toLowerCase();","lastModifiedDate":"2023-10-12"},{"lineNumber":56,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":57,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":58,"author":{"gitId":"ChoonSiang"},"content":" public String getDescription(String userInput) {","lastModifiedDate":"2023-10-12"},{"lineNumber":59,"author":{"gitId":"ChoonSiang"},"content":" String[] splitInput \u003d userInput.split(DELIM, 2);","lastModifiedDate":"2023-10-12"},{"lineNumber":60,"author":{"gitId":"ChoonSiang"},"content":" if (splitInput.length \u003c\u003d 1) {","lastModifiedDate":"2023-10-12"},{"lineNumber":61,"author":{"gitId":"ChoonSiang"},"content":" return EMPTY_STRING;","lastModifiedDate":"2023-10-12"},{"lineNumber":62,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":63,"author":{"gitId":"ChoonSiang"},"content":" String description \u003d splitInput[1].split(SPACE_WITH_ARG_PREFIX, 2)[0].trim();","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"ChoonSiang"},"content":" if (description.startsWith(ARG_PREFIX)) {","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"ChoonSiang"},"content":" return EMPTY_STRING;","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"ChoonSiang"},"content":" return description;","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":69,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":70,"author":{"gitId":"ChoonSiang"},"content":" public HashMap\u003cString, String\u003e getArguments(String userInput) {","lastModifiedDate":"2023-10-12"},{"lineNumber":71,"author":{"gitId":"ChoonSiang"},"content":" String[] splitInput \u003d userInput.split(SPACE_WITH_ARG_PREFIX, 2);","lastModifiedDate":"2023-10-12"},{"lineNumber":72,"author":{"gitId":"ChoonSiang"},"content":" HashMap\u003cString, String\u003e argsMap \u003d new HashMap\u003c\u003e();","lastModifiedDate":"2023-10-12"},{"lineNumber":73,"author":{"gitId":"ChoonSiang"},"content":" if (splitInput.length \u003c\u003d 1) {","lastModifiedDate":"2023-10-12"},{"lineNumber":74,"author":{"gitId":"ChoonSiang"},"content":" return argsMap;","lastModifiedDate":"2023-10-12"},{"lineNumber":75,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":76,"author":{"gitId":"ChoonSiang"},"content":" String[] spitArgs \u003d splitInput[1].split(DELIM);","lastModifiedDate":"2023-10-12"},{"lineNumber":77,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":78,"author":{"gitId":"ChoonSiang"},"content":" String argName \u003d spitArgs[0];","lastModifiedDate":"2023-10-12"},{"lineNumber":79,"author":{"gitId":"ChoonSiang"},"content":" ArrayList\u003cString\u003e currentWords \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-12"},{"lineNumber":80,"author":{"gitId":"ChoonSiang"},"content":" for (int i \u003d 1; i \u003c spitArgs.length; i++) {","lastModifiedDate":"2023-10-12"},{"lineNumber":81,"author":{"gitId":"ChoonSiang"},"content":" String word \u003d spitArgs[i];","lastModifiedDate":"2023-10-12"},{"lineNumber":82,"author":{"gitId":"ChoonSiang"},"content":" if (word.startsWith(ARG_PREFIX)) {","lastModifiedDate":"2023-10-12"},{"lineNumber":83,"author":{"gitId":"ChoonSiang"},"content":" String argValue \u003d convertArgValueListToString(currentWords);","lastModifiedDate":"2023-10-12"},{"lineNumber":84,"author":{"gitId":"ChoonSiang"},"content":" argsMap.put(argName, argValue);","lastModifiedDate":"2023-10-12"},{"lineNumber":85,"author":{"gitId":"ChoonSiang"},"content":" argName \u003d word.substring(1);","lastModifiedDate":"2023-10-12"},{"lineNumber":86,"author":{"gitId":"ChoonSiang"},"content":" currentWords.clear();","lastModifiedDate":"2023-10-12"},{"lineNumber":87,"author":{"gitId":"ChoonSiang"},"content":" } else {","lastModifiedDate":"2023-10-12"},{"lineNumber":88,"author":{"gitId":"ChoonSiang"},"content":" currentWords.add(word);","lastModifiedDate":"2023-10-12"},{"lineNumber":89,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":90,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":91,"author":{"gitId":"ChoonSiang"},"content":" if (!currentWords.isEmpty()) {","lastModifiedDate":"2023-10-12"},{"lineNumber":92,"author":{"gitId":"ChoonSiang"},"content":" String argValue \u003d convertArgValueListToString(currentWords);","lastModifiedDate":"2023-10-12"},{"lineNumber":93,"author":{"gitId":"ChoonSiang"},"content":" argsMap.put(argName, argValue);","lastModifiedDate":"2023-10-12"},{"lineNumber":94,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":95,"author":{"gitId":"ChoonSiang"},"content":" return argsMap;","lastModifiedDate":"2023-10-12"},{"lineNumber":96,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":97,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":98,"author":{"gitId":"ChoonSiang"},"content":" public String convertArgValueListToString(ArrayList\u003cString\u003e argValues) {","lastModifiedDate":"2023-10-12"},{"lineNumber":99,"author":{"gitId":"ChoonSiang"},"content":" if (argValues.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"ChoonSiang"},"content":" return null;","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"ChoonSiang"},"content":" return String.join(DELIM, argValues).trim();","lastModifiedDate":"2023-10-12"},{"lineNumber":103,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":104,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"Jonoans"},"content":" public static Double parseDouble(String value) {","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"Jonoans"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"Jonoans"},"content":" return Double.parseDouble(value);","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"Jonoans"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"Jonoans"},"content":" return null;","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":112,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"Jonoans"},"content":" public static Double parseNonNegativeDouble(String value) {","lastModifiedDate":"2023-10-15"},{"lineNumber":114,"author":{"gitId":"Jonoans"},"content":" Double parsedValue \u003d parseDouble(value);","lastModifiedDate":"2023-10-15"},{"lineNumber":115,"author":{"gitId":"Jonoans"},"content":" if (parsedValue \u003d\u003d null || parsedValue \u003c 0) {","lastModifiedDate":"2023-10-15"},{"lineNumber":116,"author":{"gitId":"Jonoans"},"content":" return null;","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":118,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":119,"author":{"gitId":"Jonoans"},"content":" return parsedValue;","lastModifiedDate":"2023-10-15"},{"lineNumber":120,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":121,"author":{"gitId":"ChoonSiang"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"Jonoans":21,"sRanay":3,"hooami":7,"ChoonSiang":90}},{"path":"src/main/java/seedu/duke/ui/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ChoonSiang"},"content":"package seedu.duke.ui;","lastModifiedDate":"2023-10-12"},{"lineNumber":2,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":3,"author":{"gitId":"Jonoans"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Jonoans"},"content":"import java.io.OutputStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Jonoans"},"content":"import java.nio.charset.StandardCharsets;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Jonoans"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Jonoans"},"content":"import java.util.Arrays;","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Jonoans"},"content":"import java.util.List;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"Jonoans"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-22"},{"lineNumber":10,"author":{"gitId":"hooami"},"content":"import java.util.StringJoiner;","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Jonoans"},"content":"import java.util.stream.Collectors;","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Jonoans"},"content":"import java.util.stream.IntStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"ChoonSiang"},"content":"public class Ui {","lastModifiedDate":"2023-10-12"},{"lineNumber":15,"author":{"gitId":"Jonoans"},"content":" private static final String ELLIPSIS \u003d \"...\";","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"ChoonSiang"},"content":" private static final String PROGRAM_NAME \u003d \"FinText\";","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"Jonoans"},"content":" private static final char FILLER_CHAR \u003d \u0027 \u0027;","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"hooami"},"content":" private static final char LIST_SEPARATOR \u003d \u0027\u003d\u0027;","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Jonoans"},"content":" private static final int COLUMN_WIDTH \u003d 10;","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"hooami"},"content":" private static final int LIST_COLUMN_WIDTH \u003d 30;","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"hooami"},"content":" private static final int ID_COLUMN_WIDTH \u003d 3;","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Jonoans"},"content":" private static final int SPACE_BETWEEN_COLS \u003d 3;","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Jonoans"},"content":" private static final String AMOUNT_FORMAT \u003d \"%.2f\";","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Jonoans"},"content":" private static final char LINE_DELIMITER \u003d \u0027\\n\u0027;","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Jonoans"},"content":" private final Scanner scanner;","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"Jonoans"},"content":" private final OutputStream outputStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":30,"author":{"gitId":"ChoonSiang"},"content":" public Ui() {","lastModifiedDate":"2023-10-12"},{"lineNumber":31,"author":{"gitId":"Jonoans"},"content":" outputStream \u003d System.out;","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"Jonoans"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":34,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":35,"author":{"gitId":"Jonoans"},"content":" public Ui(OutputStream outputStream) {","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Jonoans"},"content":" this.outputStream \u003d outputStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Jonoans"},"content":" scanner \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Jonoans"},"content":" public void printTableRow(ArrayList\u003cString\u003e rowValues) {","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"Jonoans"},"content":" printTableRow(rowValues, null, null);","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"Jonoans"},"content":" public void printTableRow(ArrayList\u003cString\u003e rowValues, String[] headers) {","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Jonoans"},"content":" printTableRow(rowValues, headers, null);","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Jonoans"},"content":" public void printTableRow(ArrayList\u003cString\u003e rowValues, String[] headers, Integer[] customWidths) {","lastModifiedDate":"2023-10-15"},{"lineNumber":49,"author":{"gitId":"Jonoans"},"content":" assert rowValues !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":50,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cInteger\u003e colWidths \u003d printTableHeader(headers, customWidths);","lastModifiedDate":"2023-10-15"},{"lineNumber":51,"author":{"gitId":"Jonoans"},"content":" if (colWidths \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":52,"author":{"gitId":"Jonoans"},"content":" colWidths \u003d getDefaultColWidths(rowValues.size());","lastModifiedDate":"2023-10-15"},{"lineNumber":53,"author":{"gitId":"Jonoans"},"content":" colWidths \u003d mergeColWidths(colWidths, customWidths);","lastModifiedDate":"2023-10-15"},{"lineNumber":54,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":55,"author":{"gitId":"Jonoans"},"content":" print(formatColumnValues(colWidths, rowValues));","lastModifiedDate":"2023-10-15"},{"lineNumber":56,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":57,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":58,"author":{"gitId":"Jonoans"},"content":" public void printTableRows(ArrayList\u003cArrayList\u003cString\u003e\u003e rows) {","lastModifiedDate":"2023-10-15"},{"lineNumber":59,"author":{"gitId":"Jonoans"},"content":" printTableRows(rows, null);","lastModifiedDate":"2023-10-15"},{"lineNumber":60,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":61,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":62,"author":{"gitId":"Jonoans"},"content":" public void printTableRows(ArrayList\u003cArrayList\u003cString\u003e\u003e rows, String[] headers) {","lastModifiedDate":"2023-10-15"},{"lineNumber":63,"author":{"gitId":"Jonoans"},"content":" printTableRows(rows, headers, null);","lastModifiedDate":"2023-10-15"},{"lineNumber":64,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":65,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":66,"author":{"gitId":"Jonoans"},"content":" public void printTableRows(ArrayList\u003cArrayList\u003cString\u003e\u003e rows, String[] headers, Integer[] customWidths) {","lastModifiedDate":"2023-10-15"},{"lineNumber":67,"author":{"gitId":"Jonoans"},"content":" assert rows !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":68,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cInteger\u003e colWidths \u003d printTableHeader(headers, customWidths);","lastModifiedDate":"2023-10-15"},{"lineNumber":69,"author":{"gitId":"Jonoans"},"content":" if (rows.isEmpty()) {","lastModifiedDate":"2023-10-15"},{"lineNumber":70,"author":{"gitId":"Jonoans"},"content":" return;","lastModifiedDate":"2023-10-15"},{"lineNumber":71,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":72,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":73,"author":{"gitId":"Jonoans"},"content":" if (colWidths \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":74,"author":{"gitId":"Jonoans"},"content":" colWidths \u003d getPrintWidths(genColWidths(rows.get(0).size(), 0), customWidths);","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":76,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":77,"author":{"gitId":"Jonoans"},"content":" for (ArrayList\u003cString\u003e rowValues : rows) {","lastModifiedDate":"2023-10-15"},{"lineNumber":78,"author":{"gitId":"Jonoans"},"content":" print(formatColumnValues(colWidths, rowValues));","lastModifiedDate":"2023-10-15"},{"lineNumber":79,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":80,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":81,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":82,"author":{"gitId":"Jonoans"},"content":" public ArrayList\u003cInteger\u003e printTableHeader(String[] headers, Integer[] customWidths) {","lastModifiedDate":"2023-10-15"},{"lineNumber":83,"author":{"gitId":"Jonoans"},"content":" if (headers \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":84,"author":{"gitId":"Jonoans"},"content":" return null;","lastModifiedDate":"2023-10-15"},{"lineNumber":85,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":86,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":87,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cInteger\u003e colWidths \u003d (ArrayList\u003cInteger\u003e) Arrays.stream(headers)","lastModifiedDate":"2023-10-15"},{"lineNumber":88,"author":{"gitId":"Jonoans"},"content":" .parallel()","lastModifiedDate":"2023-10-15"},{"lineNumber":89,"author":{"gitId":"Jonoans"},"content":" .map(String::length)","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"Jonoans"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-10-15"},{"lineNumber":91,"author":{"gitId":"Jonoans"},"content":" colWidths \u003d getPrintWidths(colWidths, customWidths);","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"Jonoans"},"content":" List\u003cString\u003e headerList \u003d Arrays.asList(headers);","lastModifiedDate":"2023-10-15"},{"lineNumber":93,"author":{"gitId":"Jonoans"},"content":" print(formatColumnValues(colWidths, new ArrayList\u003c\u003e(headerList)));","lastModifiedDate":"2023-10-15"},{"lineNumber":94,"author":{"gitId":"Jonoans"},"content":" return colWidths;","lastModifiedDate":"2023-10-15"},{"lineNumber":95,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":96,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":97,"author":{"gitId":"Jonoans"},"content":" public String formatAmount(Double value) {","lastModifiedDate":"2023-10-15"},{"lineNumber":98,"author":{"gitId":"Jonoans"},"content":" return String.format(AMOUNT_FORMAT, value);","lastModifiedDate":"2023-10-15"},{"lineNumber":99,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":100,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":101,"author":{"gitId":"Jonoans"},"content":" public void print(String value) {","lastModifiedDate":"2023-10-15"},{"lineNumber":102,"author":{"gitId":"Jonoans"},"content":" try {","lastModifiedDate":"2023-10-15"},{"lineNumber":103,"author":{"gitId":"Jonoans"},"content":" outputStream.write(value.getBytes(StandardCharsets.UTF_8));","lastModifiedDate":"2023-10-15"},{"lineNumber":104,"author":{"gitId":"Jonoans"},"content":" outputStream.write(LINE_DELIMITER);","lastModifiedDate":"2023-10-15"},{"lineNumber":105,"author":{"gitId":"Jonoans"},"content":" outputStream.flush();","lastModifiedDate":"2023-10-15"},{"lineNumber":106,"author":{"gitId":"Jonoans"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-15"},{"lineNumber":107,"author":{"gitId":"Jonoans"},"content":" // Fail quietly for now","lastModifiedDate":"2023-10-15"},{"lineNumber":108,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":109,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":110,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":111,"author":{"gitId":"ChoonSiang"},"content":" public void printGreeting() {","lastModifiedDate":"2023-10-12"},{"lineNumber":112,"author":{"gitId":"Jonoans"},"content":" print(\"Welcome to \" + PROGRAM_NAME + \", your personal finance tracker.\");","lastModifiedDate":"2023-10-15"},{"lineNumber":113,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":114,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":115,"author":{"gitId":"ChoonSiang"},"content":" public void printBye() {","lastModifiedDate":"2023-10-12"},{"lineNumber":116,"author":{"gitId":"Jonoans"},"content":" print(\"Bye Bye!\");","lastModifiedDate":"2023-10-15"},{"lineNumber":117,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-12"},{"lineNumber":118,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-12"},{"lineNumber":119,"author":{"gitId":"Jonoans"},"content":" public String readUserInput() {","lastModifiedDate":"2023-10-22"},{"lineNumber":120,"author":{"gitId":"Jonoans"},"content":" return scanner.nextLine();","lastModifiedDate":"2023-10-22"},{"lineNumber":121,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":122,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":123,"author":{"gitId":"Jonoans"},"content":" public void close() {","lastModifiedDate":"2023-10-22"},{"lineNumber":124,"author":{"gitId":"Jonoans"},"content":" scanner.close();","lastModifiedDate":"2023-10-22"},{"lineNumber":125,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":126,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":127,"author":{"gitId":"Jonoans"},"content":" private ArrayList\u003cInteger\u003e genColWidths(int length, int width) {","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"Jonoans"},"content":" return (ArrayList\u003cInteger\u003e) IntStream.range(0, length)","lastModifiedDate":"2023-10-15"},{"lineNumber":129,"author":{"gitId":"Jonoans"},"content":" .mapToObj(i -\u003e width)","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"Jonoans"},"content":" .collect(Collectors.toList());","lastModifiedDate":"2023-10-15"},{"lineNumber":131,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":132,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":133,"author":{"gitId":"Jonoans"},"content":" private ArrayList\u003cInteger\u003e getDefaultColWidths(int length) {","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"Jonoans"},"content":" return genColWidths(length, COLUMN_WIDTH);","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":136,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":137,"author":{"gitId":"Jonoans"},"content":" private ArrayList\u003cInteger\u003e getPrintWidths(ArrayList\u003cInteger\u003e colWidths, Integer[] customWidths) {","lastModifiedDate":"2023-10-16"},{"lineNumber":138,"author":{"gitId":"Jonoans"},"content":" if (customWidths \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":139,"author":{"gitId":"Jonoans"},"content":" colWidths \u003d mergeColWidths(colWidths, getDefaultColWidths(colWidths.size()));","lastModifiedDate":"2023-10-16"},{"lineNumber":140,"author":{"gitId":"Jonoans"},"content":" } else {","lastModifiedDate":"2023-10-16"},{"lineNumber":141,"author":{"gitId":"Jonoans"},"content":" colWidths \u003d mergeColWidths(colWidths, customWidths);","lastModifiedDate":"2023-10-16"},{"lineNumber":142,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":143,"author":{"gitId":"Jonoans"},"content":" return colWidths;","lastModifiedDate":"2023-10-16"},{"lineNumber":144,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":145,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":146,"author":{"gitId":"Jonoans"},"content":" private ArrayList\u003cInteger\u003e mergeColWidths(ArrayList\u003cInteger\u003e colWidths, ArrayList\u003cInteger\u003e customWidths) {","lastModifiedDate":"2023-10-16"},{"lineNumber":147,"author":{"gitId":"Jonoans"},"content":" if (customWidths \u003d\u003d null) {","lastModifiedDate":"2023-10-16"},{"lineNumber":148,"author":{"gitId":"Jonoans"},"content":" return mergeColWidths(colWidths, (Integer[]) null);","lastModifiedDate":"2023-10-16"},{"lineNumber":149,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":150,"author":{"gitId":"Jonoans"},"content":" Integer[] customWidthArray \u003d new Integer[customWidths.size()];","lastModifiedDate":"2023-10-16"},{"lineNumber":151,"author":{"gitId":"Jonoans"},"content":" customWidths.toArray(customWidthArray);","lastModifiedDate":"2023-10-16"},{"lineNumber":152,"author":{"gitId":"Jonoans"},"content":" return mergeColWidths(colWidths, customWidthArray);","lastModifiedDate":"2023-10-16"},{"lineNumber":153,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":154,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":155,"author":{"gitId":"Jonoans"},"content":" private ArrayList\u003cInteger\u003e mergeColWidths(ArrayList\u003cInteger\u003e colWidths, Integer[] customWidths) {","lastModifiedDate":"2023-10-15"},{"lineNumber":156,"author":{"gitId":"Jonoans"},"content":" assert colWidths !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":157,"author":{"gitId":"Jonoans"},"content":" if (customWidths \u003d\u003d null) {","lastModifiedDate":"2023-10-15"},{"lineNumber":158,"author":{"gitId":"Jonoans"},"content":" return colWidths;","lastModifiedDate":"2023-10-15"},{"lineNumber":159,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":160,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":161,"author":{"gitId":"Jonoans"},"content":" assert colWidths.size() \u003c\u003d customWidths.length;","lastModifiedDate":"2023-10-15"},{"lineNumber":162,"author":{"gitId":"Jonoans"},"content":" int colCount \u003d colWidths.size();","lastModifiedDate":"2023-10-15"},{"lineNumber":163,"author":{"gitId":"Jonoans"},"content":" for (int i \u003d 0; i \u003c colCount; ++i) {","lastModifiedDate":"2023-10-15"},{"lineNumber":164,"author":{"gitId":"Jonoans"},"content":" colWidths.add(i, Math.max(colWidths.get(i), customWidths[i]));","lastModifiedDate":"2023-10-15"},{"lineNumber":165,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":166,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":167,"author":{"gitId":"Jonoans"},"content":" return colWidths;","lastModifiedDate":"2023-10-15"},{"lineNumber":168,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":169,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":170,"author":{"gitId":"Jonoans"},"content":" private String formatColumnValues(ArrayList\u003cInteger\u003e colWidths, ArrayList\u003cString\u003e colValues) {","lastModifiedDate":"2023-10-15"},{"lineNumber":171,"author":{"gitId":"Jonoans"},"content":" assert colWidths !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":172,"author":{"gitId":"Jonoans"},"content":" assert colValues !\u003d null;","lastModifiedDate":"2023-10-15"},{"lineNumber":173,"author":{"gitId":"Jonoans"},"content":" assert colWidths.size() \u003e\u003d colValues.size();","lastModifiedDate":"2023-10-15"},{"lineNumber":174,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":175,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cString\u003e finalValues \u003d new ArrayList\u003c\u003e(colValues.size());","lastModifiedDate":"2023-10-15"},{"lineNumber":176,"author":{"gitId":"Jonoans"},"content":" int lastIdx \u003d colValues.size() - 1;","lastModifiedDate":"2023-10-15"},{"lineNumber":177,"author":{"gitId":"Jonoans"},"content":" for (int i \u003d 0; i \u003c colValues.size(); ++i) {","lastModifiedDate":"2023-10-15"},{"lineNumber":178,"author":{"gitId":"Jonoans"},"content":" int maxWidth \u003d colWidths.get(i);","lastModifiedDate":"2023-10-15"},{"lineNumber":179,"author":{"gitId":"Jonoans"},"content":" String truncatedValue \u003d colValues.get(i);","lastModifiedDate":"2023-10-15"},{"lineNumber":180,"author":{"gitId":"Jonoans"},"content":" if (truncatedValue.length() \u003e maxWidth) {","lastModifiedDate":"2023-10-15"},{"lineNumber":181,"author":{"gitId":"Jonoans"},"content":" truncatedValue \u003d truncatedValue.substring(0, maxWidth - ELLIPSIS.length()) + ELLIPSIS;","lastModifiedDate":"2023-10-15"},{"lineNumber":182,"author":{"gitId":"Jonoans"},"content":" } else if (i !\u003d lastIdx) {","lastModifiedDate":"2023-10-15"},{"lineNumber":183,"author":{"gitId":"Jonoans"},"content":" char[] fillerChars \u003d new char[maxWidth - truncatedValue.length()];","lastModifiedDate":"2023-10-15"},{"lineNumber":184,"author":{"gitId":"Jonoans"},"content":" Arrays.fill(fillerChars, FILLER_CHAR);","lastModifiedDate":"2023-10-15"},{"lineNumber":185,"author":{"gitId":"Jonoans"},"content":" truncatedValue +\u003d new String(fillerChars);","lastModifiedDate":"2023-10-15"},{"lineNumber":186,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":187,"author":{"gitId":"Jonoans"},"content":" finalValues.add(i, truncatedValue);","lastModifiedDate":"2023-10-15"},{"lineNumber":188,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":189,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":190,"author":{"gitId":"Jonoans"},"content":" char[] spacer \u003d new char[SPACE_BETWEEN_COLS];","lastModifiedDate":"2023-10-15"},{"lineNumber":191,"author":{"gitId":"Jonoans"},"content":" Arrays.fill(spacer, FILLER_CHAR);","lastModifiedDate":"2023-10-15"},{"lineNumber":192,"author":{"gitId":"Jonoans"},"content":" return String.join(new String(spacer), finalValues);","lastModifiedDate":"2023-10-15"},{"lineNumber":193,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":194,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":195,"author":{"gitId":"hooami"},"content":" public void listTransactions(ArrayList\u003cArrayList\u003cString\u003e\u003e list, String[] headers, String headerMessage) {","lastModifiedDate":"2023-10-15"},{"lineNumber":196,"author":{"gitId":"hooami"},"content":" String end \u003d \" transactions.\";","lastModifiedDate":"2023-10-15"},{"lineNumber":197,"author":{"gitId":"hooami"},"content":" if (list.size() \u003d\u003d 1) {","lastModifiedDate":"2023-10-15"},{"lineNumber":198,"author":{"gitId":"hooami"},"content":" end \u003d \" transaction.\";","lastModifiedDate":"2023-10-15"},{"lineNumber":199,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":200,"author":{"gitId":"hooami"},"content":" print(\"Alright! Displaying \" + list.size() + end);","lastModifiedDate":"2023-10-15"},{"lineNumber":201,"author":{"gitId":"hooami"},"content":" Integer[] columnWidths \u003d {ID_COLUMN_WIDTH, LIST_COLUMN_WIDTH, COLUMN_WIDTH, COLUMN_WIDTH, COLUMN_WIDTH};","lastModifiedDate":"2023-10-15"},{"lineNumber":202,"author":{"gitId":"hooami"},"content":" int totalSpace \u003d Arrays.stream(columnWidths)","lastModifiedDate":"2023-10-15"},{"lineNumber":203,"author":{"gitId":"hooami"},"content":" .mapToInt(Integer::intValue)","lastModifiedDate":"2023-10-15"},{"lineNumber":204,"author":{"gitId":"hooami"},"content":" .sum();","lastModifiedDate":"2023-10-15"},{"lineNumber":205,"author":{"gitId":"hooami"},"content":" totalSpace \u003d totalSpace + (SPACE_BETWEEN_COLS * columnWidths.length) - headerMessage.length();","lastModifiedDate":"2023-10-15"},{"lineNumber":206,"author":{"gitId":"hooami"},"content":" int leftSide \u003d totalSpace / 2;","lastModifiedDate":"2023-10-15"},{"lineNumber":207,"author":{"gitId":"hooami"},"content":" int rightSide \u003d totalSpace - leftSide;","lastModifiedDate":"2023-10-15"},{"lineNumber":208,"author":{"gitId":"hooami"},"content":" String leftPad \u003d new String(new char[leftSide]).replace(\u0027\\0\u0027, LIST_SEPARATOR);","lastModifiedDate":"2023-10-16"},{"lineNumber":209,"author":{"gitId":"hooami"},"content":" String rightPad \u003d new String(new char[rightSide]).replace(\u0027\\0\u0027, LIST_SEPARATOR);","lastModifiedDate":"2023-10-16"},{"lineNumber":210,"author":{"gitId":"hooami"},"content":" StringJoiner wrapper \u003d new StringJoiner(\" \");","lastModifiedDate":"2023-10-15"},{"lineNumber":211,"author":{"gitId":"hooami"},"content":" wrapper.add(leftPad);","lastModifiedDate":"2023-10-15"},{"lineNumber":212,"author":{"gitId":"hooami"},"content":" wrapper.add(headerMessage);","lastModifiedDate":"2023-10-15"},{"lineNumber":213,"author":{"gitId":"hooami"},"content":" wrapper.add(rightPad);","lastModifiedDate":"2023-10-15"},{"lineNumber":214,"author":{"gitId":"hooami"},"content":" print(wrapper.toString());","lastModifiedDate":"2023-10-15"},{"lineNumber":215,"author":{"gitId":"hooami"},"content":" printTableRows(list, headers, columnWidths);","lastModifiedDate":"2023-10-16"},{"lineNumber":216,"author":{"gitId":"hooami"},"content":" print(wrapper.toString());","lastModifiedDate":"2023-10-15"},{"lineNumber":217,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":218,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":219,"author":{"gitId":"ChoonSiang"},"content":"}","lastModifiedDate":"2023-10-12"}],"authorContributionMap":{"Jonoans":174,"hooami":30,"ChoonSiang":15}},{"path":"src/test/java/seedu/duke/command/HelpCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"sRanay"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"sRanay"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"sRanay"},"content":"import seedu.duke.parser.Parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"sRanay"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"sRanay"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"sRanay"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"sRanay"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"sRanay"},"content":"public class HelpCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"sRanay"},"content":" ","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"sRanay"},"content":" void helpCommand_printFullList() {","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help\";","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nCommand Description\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"sRanay"},"content":" \"help Shows a list of all the commands available to the user\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"sRanay"},"content":" \"in Adds an income towards goal\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"sRanay"},"content":" \"out Adds an expense for a category\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"sRanay"},"content":" \"delete Delete a specific transaction based on the index in the list\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"sRanay"},"content":" \"list Shows a list of all added transactions based on type\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"sRanay"},"content":" void helpCommand_withEmptyCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help \";","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nCommand Description\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"sRanay"},"content":" \"help Shows a list of all the commands available to the user\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"sRanay"},"content":" \"in Adds an income towards goal\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"sRanay"},"content":" \"out Adds an expense for a category\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"sRanay"},"content":" \"delete Delete a specific transaction based on the index in the list\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"sRanay"},"content":" \"list Shows a list of all added transactions based on type\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"sRanay"},"content":" void helpCommand_withInvalidCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help asdasds\";","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nNO SUCH COMMAND\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"sRanay"},"content":" void helpCommand_withValidInCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help in\";","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nUsage: in DESCRIPTION /amount AMOUNT /goal GOAL [/date DATE in DDMMYYYY]\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"sRanay"},"content":" \"Option Description\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"sRanay"},"content":" \"/amount Amount to be added\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"sRanay"},"content":" \"/goal The goal to classify it under\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"sRanay"},"content":" \"/date Date of the transaction\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"sRanay"},"content":" void helpCommand_commandCaseSensitive() {","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help In\";","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nUsage: in DESCRIPTION /amount AMOUNT /goal GOAL [/date DATE in DDMMYYYY]\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"sRanay"},"content":" \"Option Description\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"sRanay"},"content":" \"/amount Amount to be added\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"sRanay"},"content":" \"/goal The goal to classify it under\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"sRanay"},"content":" \"/date Date of the transaction\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"sRanay"},"content":" void helpCommand_commandAllUpperCase() {","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":103,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help IN\";","lastModifiedDate":"2023-10-17"},{"lineNumber":104,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nUsage: in DESCRIPTION /amount AMOUNT /goal GOAL [/date DATE in DDMMYYYY]\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"sRanay"},"content":" \"Option Description\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":110,"author":{"gitId":"sRanay"},"content":" \"/amount Amount to be added\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"sRanay"},"content":" \"/goal The goal to classify it under\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"sRanay"},"content":" \"/date Date of the transaction\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":113,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":114,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":116,"author":{"gitId":"sRanay"},"content":" void helpCommand_withValidOutCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":117,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":118,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":119,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":120,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help out\";","lastModifiedDate":"2023-10-17"},{"lineNumber":121,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":122,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":123,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":124,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":125,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nUsage: out DESCRIPTION /amount AMOUNT /category CATEGORY [/date DATE in DDMMYYYY]\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":126,"author":{"gitId":"sRanay"},"content":" \"Option Description\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":127,"author":{"gitId":"sRanay"},"content":" \"/amount Amount to be deducted\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":128,"author":{"gitId":"sRanay"},"content":" \"/category The spending category to classify it under\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":129,"author":{"gitId":"sRanay"},"content":" \"/date Date of the transaction\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":130,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":131,"author":{"gitId":"sRanay"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":132,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":133,"author":{"gitId":"sRanay"},"content":" void helpCommand_withValidDeleteCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":134,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":135,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":136,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":137,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help delete\";","lastModifiedDate":"2023-10-17"},{"lineNumber":138,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":139,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":140,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":141,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":142,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nUsage: delete INDEX /type (in | out)\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":143,"author":{"gitId":"sRanay"},"content":" \"Option Description\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":144,"author":{"gitId":"sRanay"},"content":" \"/type To set whether it is a in or out transaction\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":145,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":146,"author":{"gitId":"sRanay"},"content":" ","lastModifiedDate":"2023-10-17"},{"lineNumber":147,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":148,"author":{"gitId":"sRanay"},"content":" void helpCommand_withValidListCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":149,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":150,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":151,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":152,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help list\";","lastModifiedDate":"2023-10-17"},{"lineNumber":153,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":154,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":155,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":156,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":157,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nUsage: list /type (in | out) [/goal GOAL] [/category CATEGORY]\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":158,"author":{"gitId":"sRanay"},"content":" \"Option Description\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":159,"author":{"gitId":"sRanay"},"content":" \"/type To set whether it is a in or out transaction\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":160,"author":{"gitId":"sRanay"},"content":" \"/goal The goal which it is classify under\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":161,"author":{"gitId":"sRanay"},"content":" \"/category The spending category it is classify under\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":162,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":163,"author":{"gitId":"sRanay"},"content":" ","lastModifiedDate":"2023-10-17"},{"lineNumber":164,"author":{"gitId":"sRanay"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":165,"author":{"gitId":"sRanay"},"content":" void helpCommand_withValidHelpCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":166,"author":{"gitId":"sRanay"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":167,"author":{"gitId":"sRanay"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":168,"author":{"gitId":"sRanay"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":169,"author":{"gitId":"sRanay"},"content":" String userInput \u003d \"help help\";","lastModifiedDate":"2023-10-17"},{"lineNumber":170,"author":{"gitId":"sRanay"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":171,"author":{"gitId":"sRanay"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":172,"author":{"gitId":"sRanay"},"content":" HelpCommand command \u003d new HelpCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":173,"author":{"gitId":"sRanay"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":174,"author":{"gitId":"sRanay"},"content":" assertEquals(\"\\nUsage: help\\n\\n\", outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":175,"author":{"gitId":"sRanay"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":176,"author":{"gitId":"sRanay"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"sRanay":176}},{"path":"src/test/java/seedu/duke/command/ListCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"hooami"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"hooami"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"hooami"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"hooami"},"content":"import seedu.duke.parser.Parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"hooami"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"hooami"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"Jonoans"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-20"},{"lineNumber":10,"author":{"gitId":"hooami"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"hooami"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"hooami"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"hooami"},"content":"class ListCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"hooami"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"hooami"},"content":" void invalidList() {","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"hooami"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"hooami"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"hooami"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"hooami"},"content":" String userInput \u003d \"list\";","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"hooami"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"hooami"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"hooami"},"content":" ListCommand command \u003d new ListCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"hooami"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"hooami"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"hooami"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"hooami"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"hooami"},"content":" void invalidListType() {","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"hooami"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"hooami"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"hooami"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"hooami"},"content":" String userInput \u003d \"list /type abc\";","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"hooami"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"hooami"},"content":" String commandWord \u003d parser.getDescription(userInput);","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"hooami"},"content":" ListCommand command \u003d new ListCommand(commandWord, args);","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"hooami"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"hooami"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"hooami"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"hooami"},"content":" private static void addInEntries() {","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"hooami"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"hooami"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"hooami"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"hooami"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"hooami"},"content":" parser.parse(\"in part-time job /amount 500 /goal car\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"hooami"},"content":" parser.parse(\"in red packet money /amount 50 /goal PS5 /date 18092023\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"hooami"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"hooami"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"hooami"},"content":" private static void addOutEntries() {","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"hooami"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"hooami"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"hooami"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"hooami"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"hooami"},"content":" parser.parse(\"out dinner /amount 10.50 /category food\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"hooami"},"content":" parser.parse(\"out pokemon card pack /amount 10.50 /category games /date 18092023\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"hooami"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"hooami"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"hooami"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"hooami"},"content":" void validInList() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"hooami"},"content":" addInEntries();","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"hooami"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"hooami"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"hooami"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"Jonoans"},"content":" LocalDate currentDate \u003d LocalDate.now();","lastModifiedDate":"2023-10-20"},{"lineNumber":78,"author":{"gitId":"hooami"},"content":" Command command \u003d parser.parse(\"list /type in\");","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"hooami"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"hooami"},"content":" assertEquals(\"Alright! Displaying 2 transactions.\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"hooami"},"content":" + \"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d IN TRANSACTIONS \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"hooami"},"content":" + \"ID Description Date Amount Goal\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"Jonoans"},"content":" + \"1 part-time job \" + currentDate.toString() + \" 500.00 TBC\\n\"","lastModifiedDate":"2023-10-20"},{"lineNumber":84,"author":{"gitId":"Jonoans"},"content":" + \"2 red packet money \" + currentDate.toString() + \" 50.00 TBC\\n\"","lastModifiedDate":"2023-10-20"},{"lineNumber":85,"author":{"gitId":"hooami"},"content":" + \"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d IN TRANSACTIONS \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"hooami"},"content":" , outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"hooami"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"hooami"},"content":" void validOutList() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"hooami"},"content":" addOutEntries();","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"hooami"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"hooami"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"hooami"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"Jonoans"},"content":" LocalDate currentDate \u003d LocalDate.now();","lastModifiedDate":"2023-10-20"},{"lineNumber":97,"author":{"gitId":"hooami"},"content":" Command command \u003d parser.parse(\"list /type out\");","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"hooami"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"hooami"},"content":" assertEquals(\"Alright! Displaying 2 transactions.\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"hooami"},"content":" + \"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d OUT TRANSACTIONS \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"hooami"},"content":" + \"ID Description Date Amount Goal\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"Jonoans"},"content":" + \"1 dinner \" + currentDate.toString() + \" 10.5 TBC\\n\"","lastModifiedDate":"2023-10-20"},{"lineNumber":103,"author":{"gitId":"Jonoans"},"content":" + \"2 pokemon card pack \" + currentDate.toString() + \" 10.5 TBC\\n\"","lastModifiedDate":"2023-10-20"},{"lineNumber":104,"author":{"gitId":"hooami"},"content":" + \"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d OUT TRANSACTIONS \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\\n\"","lastModifiedDate":"2023-10-17"},{"lineNumber":105,"author":{"gitId":"hooami"},"content":" , outputStream.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":106,"author":{"gitId":"hooami"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":107,"author":{"gitId":"hooami"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":108,"author":{"gitId":"hooami"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"Jonoans":7,"hooami":101}},{"path":"src/test/java/seedu/duke/command/RemoveTransactionCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ChoonSiang"},"content":"package seedu.duke.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"ChoonSiang"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.classes.StateManager;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.parser.Parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.ui.Ui;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"ChoonSiang"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"ChoonSiang"},"content":"import static org.junit.jupiter.api.Assertions.assertNotEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"ChoonSiang"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"ChoonSiang"},"content":"class RemoveTransactionCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"ChoonSiang"},"content":" private static Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"ChoonSiang"},"content":" private static ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"ChoonSiang"},"content":" private static Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"ChoonSiang"},"content":" public static void populateStateManager() {","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ChoonSiang"},"content":" try {","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"ChoonSiang"},"content":" parser.parse(\"in part-time job /amount 1000 /goal car\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"ChoonSiang"},"content":" parser.parse(\"in allowance /amount 500 /goal car\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"ChoonSiang"},"content":" parser.parse(\"in sell stuff /amount 50 /goal ps5\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"ChoonSiang"},"content":" parser.parse(\"out buy dinner /amount 15 /category food\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"ChoonSiang"},"content":" parser.parse(\"out popmart /amount 12 /category toy\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"ChoonSiang"},"content":" parser.parse(\"out grab /amount 20 /category transport\").execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"ChoonSiang"},"content":" } catch (DukeException e) {","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"ChoonSiang"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"ChoonSiang"},"content":" void execute_missingIdx_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"ChoonSiang"},"content":" populateStateManager();","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d parser.parse(\"delete /type in\");","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"ChoonSiang"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"ChoonSiang"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"ChoonSiang"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"ChoonSiang"},"content":" void execute_missingTypeArgument_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"ChoonSiang"},"content":" populateStateManager();","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d parser.parse(\"delete 1\");","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"ChoonSiang"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"ChoonSiang"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"ChoonSiang"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"ChoonSiang"},"content":" void execute_missingTypeValue_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"ChoonSiang"},"content":" populateStateManager();","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d parser.parse(\"delete 1 /type\");","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"ChoonSiang"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"ChoonSiang"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"ChoonSiang"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"ChoonSiang"},"content":" void execute_negativeIdx_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"ChoonSiang"},"content":" populateStateManager();","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d parser.parse(\"delete -1 /type in\");","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"ChoonSiang"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"ChoonSiang"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"ChoonSiang"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"ChoonSiang"},"content":" void execute_outOfRangeIdx_exceptionThrown() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"ChoonSiang"},"content":" populateStateManager();","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d parser.parse(\"delete 1000 /type in\");","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"ChoonSiang"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"ChoonSiang"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"ChoonSiang"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"ChoonSiang"},"content":" void execute_validIncomeIdx_removedFromStateManager() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"ChoonSiang"},"content":" populateStateManager();","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d parser.parse(\"delete 1 /type in\");","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"ChoonSiang"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"ChoonSiang"},"content":" String transactionDescription \u003d StateManager.getStateManager().getIncome(0) // 0-based indexing","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"ChoonSiang"},"content":" .getTransaction().getDescription();","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"ChoonSiang"},"content":" assertNotEquals(\"part-time job\", transactionDescription);","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"ChoonSiang"},"content":" void execute_validExpenseIdx_removedFromStateManager() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"ChoonSiang"},"content":" populateStateManager();","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d parser.parse(\"delete 2 /type out\");","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"ChoonSiang"},"content":" command.execute(ui);","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"ChoonSiang"},"content":" String transactionDescription \u003d StateManager.getStateManager().getExpense(1) // 0-based indexing","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"ChoonSiang"},"content":" .getTransaction().getDescription();","lastModifiedDate":"2023-10-17"},{"lineNumber":99,"author":{"gitId":"ChoonSiang"},"content":" assertNotEquals(\"popmart\", transactionDescription);","lastModifiedDate":"2023-10-17"},{"lineNumber":100,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":101,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":102,"author":{"gitId":"ChoonSiang"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"ChoonSiang":102}},{"path":"src/test/java/seedu/duke/parser/ParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ChoonSiang"},"content":"package seedu.duke.parser;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"ChoonSiang"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.command.AddIncomeCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.command.Command;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"ChoonSiang"},"content":"import seedu.duke.exception.DukeException;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"ChoonSiang"},"content":"import java.util.HashMap;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ChoonSiang"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"ChoonSiang"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"ChoonSiang"},"content":"import static org.junit.jupiter.api.Assertions.assertNull;","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"ChoonSiang"},"content":"class ParserTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"ChoonSiang"},"content":" void parse_validIncome_incomeCommand() throws DukeException {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"ChoonSiang"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d parser.parse(\"in job /amount 100 /goal car\");","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"ChoonSiang"},"content":" assertEquals(AddIncomeCommand.class, command.getClass());","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"ChoonSiang"},"content":" void parse_invalidCommand_exceptionThrown() {","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"ChoonSiang"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"ChoonSiang"},"content":" assertThrows(DukeException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"ChoonSiang"},"content":" Command command \u003d parser.parse(\"invalid command\");","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"ChoonSiang"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"ChoonSiang"},"content":" void getCommandWord_validCommand_commandInLowerCase() {","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"ChoonSiang"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"ChoonSiang"},"content":" assertEquals(\"delete\", parser.getCommandWord(\"Delete 1 /type in\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"ChoonSiang"},"content":" void getDescription_validDescription_trimmedDescription() {","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"ChoonSiang"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"ChoonSiang"},"content":" assertEquals(\"part time job\",","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"ChoonSiang"},"content":" parser.getDescription(\"in part time job /amount 100 /goal car\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"ChoonSiang"},"content":" void getDescription_emptyDescription_emptyString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"ChoonSiang"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"ChoonSiang"},"content":" assertEquals(\"\",","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"ChoonSiang"},"content":" parser.getDescription(\"in\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"ChoonSiang"},"content":" void getDescription_emptyDescriptionWithArguments_emptyString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"ChoonSiang"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"ChoonSiang"},"content":" assertEquals(\"\",","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"ChoonSiang"},"content":" parser.getDescription(\"in /amount 100 /goal car\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"ChoonSiang"},"content":" void getArguments_validArguments_hashmapOfArguments() {","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"ChoonSiang"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"ChoonSiang"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(\"in part time job /amount 100 /goal car\");","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"ChoonSiang"},"content":" assertEquals(\"100\", args.get(\"amount\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"ChoonSiang"},"content":" assertEquals(\"car\", args.get(\"goal\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"ChoonSiang"},"content":" void getArguments_noArgument_emptyHashMap() {","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"ChoonSiang"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"ChoonSiang"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(\"in part time job\");","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"ChoonSiang"},"content":" assertEquals(0, args.size());","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"ChoonSiang"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"ChoonSiang"},"content":" void getArguments_argumentWithoutValue_nullValue() {","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"ChoonSiang"},"content":" Parser parser \u003d new Parser();","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"ChoonSiang"},"content":" HashMap\u003cString, String\u003e args \u003d parser.getArguments(\"in part time job /amount /goal\");","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"ChoonSiang"},"content":" assertNull(args.get(\"amount\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"ChoonSiang"},"content":" assertNull(args.get(\"goal\"));","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"ChoonSiang"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"ChoonSiang"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"ChoonSiang"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"ChoonSiang":81}},{"path":"src/test/java/seedu/duke/ui/UiTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"Jonoans"},"content":"package seedu.duke.ui;","lastModifiedDate":"2023-10-15"},{"lineNumber":2,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":3,"author":{"gitId":"Jonoans"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-15"},{"lineNumber":4,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":5,"author":{"gitId":"Jonoans"},"content":"import java.io.ByteArrayOutputStream;","lastModifiedDate":"2023-10-15"},{"lineNumber":6,"author":{"gitId":"Jonoans"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-15"},{"lineNumber":7,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":8,"author":{"gitId":"Jonoans"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-15"},{"lineNumber":9,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":10,"author":{"gitId":"Jonoans"},"content":"class UiTest {","lastModifiedDate":"2023-10-15"},{"lineNumber":11,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":12,"author":{"gitId":"Jonoans"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":13,"author":{"gitId":"Jonoans"},"content":" public void printTestPrintTableRows() {","lastModifiedDate":"2023-10-15"},{"lineNumber":14,"author":{"gitId":"Jonoans"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-15"},{"lineNumber":15,"author":{"gitId":"Jonoans"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-15"},{"lineNumber":16,"author":{"gitId":"Jonoans"},"content":" String[] headers \u003d new String[]{\"Header 1\", \"Header 2\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":17,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cArrayList\u003cString\u003e\u003e rows \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":18,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cString\u003e row \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":19,"author":{"gitId":"Jonoans"},"content":" row.add(\"Hi\");","lastModifiedDate":"2023-10-15"},{"lineNumber":20,"author":{"gitId":"Jonoans"},"content":" row.add(\"Test print\");","lastModifiedDate":"2023-10-15"},{"lineNumber":21,"author":{"gitId":"Jonoans"},"content":" rows.add(row);","lastModifiedDate":"2023-10-15"},{"lineNumber":22,"author":{"gitId":"Jonoans"},"content":" ui.printTableRows(rows, headers);","lastModifiedDate":"2023-10-15"},{"lineNumber":23,"author":{"gitId":"Jonoans"},"content":" assertEquals(","lastModifiedDate":"2023-10-15"},{"lineNumber":24,"author":{"gitId":"Jonoans"},"content":" \"Header 1 Header 2\\n\" +","lastModifiedDate":"2023-10-15"},{"lineNumber":25,"author":{"gitId":"Jonoans"},"content":" \"Hi Test print\\n\",","lastModifiedDate":"2023-10-15"},{"lineNumber":26,"author":{"gitId":"Jonoans"},"content":" outputStream.toString()","lastModifiedDate":"2023-10-15"},{"lineNumber":27,"author":{"gitId":"Jonoans"},"content":" );","lastModifiedDate":"2023-10-15"},{"lineNumber":28,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":29,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-15"},{"lineNumber":30,"author":{"gitId":"Jonoans"},"content":" @Test","lastModifiedDate":"2023-10-15"},{"lineNumber":31,"author":{"gitId":"Jonoans"},"content":" public void printTableWithCustomWidths() {","lastModifiedDate":"2023-10-15"},{"lineNumber":32,"author":{"gitId":"Jonoans"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-15"},{"lineNumber":33,"author":{"gitId":"Jonoans"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-15"},{"lineNumber":34,"author":{"gitId":"Jonoans"},"content":" String[] headers \u003d new String[]{\"Header 1\", \"Header 2\"};","lastModifiedDate":"2023-10-15"},{"lineNumber":35,"author":{"gitId":"Jonoans"},"content":" Integer[] widths \u003d new Integer[]{20, 20};","lastModifiedDate":"2023-10-15"},{"lineNumber":36,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cArrayList\u003cString\u003e\u003e rows \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":37,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cString\u003e row \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-15"},{"lineNumber":38,"author":{"gitId":"Jonoans"},"content":" row.add(\"Hi\");","lastModifiedDate":"2023-10-15"},{"lineNumber":39,"author":{"gitId":"Jonoans"},"content":" row.add(\"Test print\");","lastModifiedDate":"2023-10-15"},{"lineNumber":40,"author":{"gitId":"Jonoans"},"content":" rows.add(row);","lastModifiedDate":"2023-10-15"},{"lineNumber":41,"author":{"gitId":"Jonoans"},"content":" ui.printTableRows(rows, headers, widths);","lastModifiedDate":"2023-10-15"},{"lineNumber":42,"author":{"gitId":"Jonoans"},"content":" assertEquals(","lastModifiedDate":"2023-10-15"},{"lineNumber":43,"author":{"gitId":"Jonoans"},"content":" \"Header 1 Header 2\\n\" +","lastModifiedDate":"2023-10-15"},{"lineNumber":44,"author":{"gitId":"Jonoans"},"content":" \"Hi Test print\\n\",","lastModifiedDate":"2023-10-15"},{"lineNumber":45,"author":{"gitId":"Jonoans"},"content":" outputStream.toString()","lastModifiedDate":"2023-10-15"},{"lineNumber":46,"author":{"gitId":"Jonoans"},"content":" );","lastModifiedDate":"2023-10-15"},{"lineNumber":47,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-15"},{"lineNumber":48,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"Jonoans"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"Jonoans"},"content":" public void printTableNoHeader() {","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"Jonoans"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"Jonoans"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cArrayList\u003cString\u003e\u003e rows \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cString\u003e row \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":55,"author":{"gitId":"Jonoans"},"content":" row.add(\"Hi\");","lastModifiedDate":"2023-10-17"},{"lineNumber":56,"author":{"gitId":"Jonoans"},"content":" row.add(\"Test print\");","lastModifiedDate":"2023-10-17"},{"lineNumber":57,"author":{"gitId":"Jonoans"},"content":" rows.add(row);","lastModifiedDate":"2023-10-17"},{"lineNumber":58,"author":{"gitId":"Jonoans"},"content":" ui.printTableRows(rows);","lastModifiedDate":"2023-10-17"},{"lineNumber":59,"author":{"gitId":"Jonoans"},"content":" assertEquals(","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"Jonoans"},"content":" \"Hi Test print\\n\",","lastModifiedDate":"2023-10-17"},{"lineNumber":61,"author":{"gitId":"Jonoans"},"content":" outputStream.toString()","lastModifiedDate":"2023-10-17"},{"lineNumber":62,"author":{"gitId":"Jonoans"},"content":" );","lastModifiedDate":"2023-10-17"},{"lineNumber":63,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":65,"author":{"gitId":"Jonoans"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":66,"author":{"gitId":"Jonoans"},"content":" public void printTableNoHeaderWithCustomWidths() {","lastModifiedDate":"2023-10-17"},{"lineNumber":67,"author":{"gitId":"Jonoans"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":68,"author":{"gitId":"Jonoans"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":69,"author":{"gitId":"Jonoans"},"content":" Integer[] widths \u003d new Integer[]{20, 20};","lastModifiedDate":"2023-10-17"},{"lineNumber":70,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cArrayList\u003cString\u003e\u003e rows \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":71,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cString\u003e row \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":72,"author":{"gitId":"Jonoans"},"content":" row.add(\"Hi\");","lastModifiedDate":"2023-10-17"},{"lineNumber":73,"author":{"gitId":"Jonoans"},"content":" row.add(\"Test print\");","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"Jonoans"},"content":" rows.add(row);","lastModifiedDate":"2023-10-17"},{"lineNumber":75,"author":{"gitId":"Jonoans"},"content":" ui.printTableRows(rows, null, widths);","lastModifiedDate":"2023-10-17"},{"lineNumber":76,"author":{"gitId":"Jonoans"},"content":" assertEquals(","lastModifiedDate":"2023-10-17"},{"lineNumber":77,"author":{"gitId":"Jonoans"},"content":" \"Hi Test print\\n\",","lastModifiedDate":"2023-10-17"},{"lineNumber":78,"author":{"gitId":"Jonoans"},"content":" outputStream.toString()","lastModifiedDate":"2023-10-17"},{"lineNumber":79,"author":{"gitId":"Jonoans"},"content":" );","lastModifiedDate":"2023-10-17"},{"lineNumber":80,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":81,"author":{"gitId":"Jonoans"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":82,"author":{"gitId":"Jonoans"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":83,"author":{"gitId":"Jonoans"},"content":" public void printTableNoHeaderWithCustomWidthsSmallerThanDefaultWidths() {","lastModifiedDate":"2023-10-17"},{"lineNumber":84,"author":{"gitId":"Jonoans"},"content":" ByteArrayOutputStream outputStream \u003d new ByteArrayOutputStream();","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"Jonoans"},"content":" Ui ui \u003d new Ui(outputStream);","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"Jonoans"},"content":" Integer[] widths \u003d new Integer[]{5, 5};","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cArrayList\u003cString\u003e\u003e rows \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":88,"author":{"gitId":"Jonoans"},"content":" ArrayList\u003cString\u003e row \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":89,"author":{"gitId":"Jonoans"},"content":" row.add(\"Hi\");","lastModifiedDate":"2023-10-17"},{"lineNumber":90,"author":{"gitId":"Jonoans"},"content":" row.add(\"Test print\");","lastModifiedDate":"2023-10-17"},{"lineNumber":91,"author":{"gitId":"Jonoans"},"content":" rows.add(row);","lastModifiedDate":"2023-10-17"},{"lineNumber":92,"author":{"gitId":"Jonoans"},"content":" ui.printTableRows(rows, null, widths);","lastModifiedDate":"2023-10-17"},{"lineNumber":93,"author":{"gitId":"Jonoans"},"content":" assertEquals(","lastModifiedDate":"2023-10-17"},{"lineNumber":94,"author":{"gitId":"Jonoans"},"content":" \"Hi Te...\\n\",","lastModifiedDate":"2023-10-17"},{"lineNumber":95,"author":{"gitId":"Jonoans"},"content":" outputStream.toString()","lastModifiedDate":"2023-10-17"},{"lineNumber":96,"author":{"gitId":"Jonoans"},"content":" );","lastModifiedDate":"2023-10-17"},{"lineNumber":97,"author":{"gitId":"Jonoans"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":98,"author":{"gitId":"Jonoans"},"content":"}","lastModifiedDate":"2023-10-15"}],"authorContributionMap":{"Jonoans":98}}] diff --git a/AY2324S1-CS2113-W12-3_tp_master/commits.json b/AY2324S1-CS2113-W12-3_tp_master/commits.json index 66d14cf..93990bb 100644 --- a/AY2324S1-CS2113-W12-3_tp_master/commits.json +++ b/AY2324S1-CS2113-W12-3_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"Jonoans":[{"date":"2023-10-04","commitResults":[{"hash":"ef4b021f95f8b9e181886cac55adb368f52017da","isMergeCommit":false,"messageTitle":"Add name and github profile in table","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"c7ac1c499a99bd29e9ea9d8383ac4a7c0fd5e798","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Itay-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8d196dc524d6c49dd948c6e5b8eeedae48064f2d","isMergeCommit":true,"messageTitle":"Merge pull request #3 from itayrefaely/Itay-AboutUs","messageBody":"Itay","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"9cc0ee4d48b718ea18e5133db17fae20ec1be5eb","isMergeCommit":false,"messageTitle":"Add income and expense models","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":55,"deletions":0}}},{"hash":"dd43e447553e0a48efe1da33c5f68f2202d8ac57","isMergeCommit":false,"messageTitle":"Remove extra line","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"7bb6b90ce52c2e8601f13ad2c0a9080a2d08e4ed","isMergeCommit":false,"messageTitle":"Add feature to insert new income entries","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":329,"deletions":7}}},{"hash":"7f40f45902235c0b1b9630a402bf06a447f4b57f","isMergeCommit":false,"messageTitle":"Refactor some variables and move table header printing to printTableHeader method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":9}}},{"hash":"1474a119c8340c143fc2bd9eb0dd85bb9f43f79e","isMergeCommit":false,"messageTitle":"Add printTableRows method and add outputstream member variable to Ui","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":68,"deletions":7}}},{"hash":"9c2f61766e02cf5c5a34ecc01714845ffe3182c0","isMergeCommit":false,"messageTitle":"Fix typo","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"32cdcd3c4b8afaa791341d901ca07da45cba1b73","isMergeCommit":false,"messageTitle":"Add test for Ui class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0},"test-code":{"insertions":29,"deletions":0}}},{"hash":"a59ac146ac5c9cb6162838544fcfb60aaa003af8","isMergeCommit":false,"messageTitle":"Add expense tracking command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":80,"deletions":0}}},{"hash":"2e82999c6a579046ecb5eb8b3f399f08dde10d2e","isMergeCommit":false,"messageTitle":"Remove padding for last item in table row","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1},"test-code":{"insertions":1,"deletions":1}}},{"hash":"ddd1fa81e294438e4e451be6eb4462fcf92fd864","isMergeCommit":true,"messageTitle":"Merge pull request #8 from Jonoans/feat-transaction-models","messageBody":"Add income and expense models","fileTypesAndContributionMap":{}},{"hash":"97e1cf066a0f47c6d8b1bad1860b96ededa115e0","isMergeCommit":false,"messageTitle":"Fix index out of bound bug in mergeColWidths","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1},"test-code":{"insertions":19,"deletions":0}}},{"hash":"fac8bb732586ffa6dce194d347c45baaccccb5cf","isMergeCommit":true,"messageTitle":"Merge pull request #9 from Jonoans/feat-add-remove-transactions","messageBody":"Feature: Add \u0026 remove transactions","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"c8f1790f7a5d139d09cb5478a18604c23dbc5a5b","isMergeCommit":true,"messageTitle":"Merge pull request #10 from hooami/feat-list","messageBody":"Added List feature ","fileTypesAndContributionMap":{}},{"hash":"67de7cf9c4fdffec95a415b000e53ce5087fed81","isMergeCommit":false,"messageTitle":"Fix table printer - Table printer now ignores default column widths if custom widths are specified - Printer will still take max of column header and stated width - i.e. column headers will never be truncated - Correct other minor formatting issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":6}}}]},{"date":"2023-10-17","commitResults":[{"hash":"04a347ee3b490ae56695eea57033ef2a085e9165","isMergeCommit":true,"messageTitle":"Merge pull request #12 from Jonoans/fix-table-print","messageBody":"Fix table printer","fileTypesAndContributionMap":{}},{"hash":"3e456fdf7725e64554baf0ba4b16ff4b35f67c08","isMergeCommit":false,"messageTitle":"Add test cases for table printer - Case for print without header - Case for print without header, with custom widths specified - Case for print without header, with custom widths specified that are smaller than default widths","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":3},"test-code":{"insertions":50,"deletions":0}}},{"hash":"5c7593f1ef01d2cb6dbe47f460e4040b1b23594a","isMergeCommit":true,"messageTitle":"Merge pull request #29 from sRanay/Jason-JUnit-Test-Help-Command","messageBody":"Change the directory for HelpCommandTest.java","fileTypesAndContributionMap":{}},{"hash":"37a52c1cd98293c0c4e4e6154322a1f6a1b51e04","isMergeCommit":true,"messageTitle":"Merge pull request #33 from hooami/feat-UG","messageBody":"Fixed typo in UserGuide.md","fileTypesAndContributionMap":{}},{"hash":"65a5f3352f8a4d38445e84f73ea408cf4f0c633f","isMergeCommit":true,"messageTitle":"Merge pull request #35 from hooami/unit-test-List","messageBody":"Added unit testing for List Command","tags":["v1.0"],"fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"1461551d033bf6c8e48b742ad20d54955e076cec","isMergeCommit":false,"messageTitle":"Fix failing test","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":7,"deletions":4}}}]}],"sRanay":[{"date":"2023-10-04","commitResults":[{"hash":"432fb4b7b27f1f55e828430634b5f8b93ad4e13a","isMergeCommit":false,"messageTitle":"Modify AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-13","commitResults":[{"hash":"850d0eead8d175081a263218cdf2670acd7a2321","isMergeCommit":true,"messageTitle":"Merge pull request #6 from ChoonSiang/ChoonSiang-Parser","messageBody":"Add Ui, Exception, Command and Parser class","fileTypesAndContributionMap":{}},{"hash":"ed55adec9aabec1d92f9dde34177e284c69e55ee","isMergeCommit":false,"messageTitle":"Add Transaction class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":0}}},{"hash":"160ab9d5811b42ba9c1eea6cc9f37d36cef7b662","isMergeCommit":false,"messageTitle":"Add Goal Class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":0}}},{"hash":"88b55b6c2329c254c203615b87c749854d2e0cbb","isMergeCommit":false,"messageTitle":"Add Category class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":0}}},{"hash":"72c70969e0705ccbff0ce683a0120287e6d491b5","isMergeCommit":false,"messageTitle":"Add constructor for for Category class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":1}}},{"hash":"3aa3f428ac90fb7808094ec0521057d971016eac","isMergeCommit":true,"messageTitle":"Merge pull request #7 from sRanay/Jason-ClassCreation","messageBody":"Class Creation for Transaction, Goal and Category","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"45589a916577c5b3e36a6c98ce2281879442a45e","isMergeCommit":true,"messageTitle":"Merge branch \u0027Jason-feat-help-command\u0027 of https://github.com/sRanay/tp into Jason-feat-help-command","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0a0f00cc657760ee4ac55e0e2add2ba86a8ff3da","isMergeCommit":false,"messageTitle":"Add full list help command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":120,"deletions":0}}}]},{"date":"2023-10-17","commitResults":[{"hash":"3c84d10e1aa646371926f198513a39028316e162","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S1-CS2113-W12-3:master\u0027 into Jason-feat-help-command","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b54f6a3a7dd00296f642cf1074ab200991d1843b","isMergeCommit":false,"messageTitle":"Add help command for specific commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":81,"deletions":33}}},{"hash":"30b063ff4e7dcbff662de53ca81a30065022c169","isMergeCommit":false,"messageTitle":"Change code format","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":6}}},{"hash":"768d1a10dd3c0c412fe7247a390110a392912180","isMergeCommit":false,"messageTitle":"Change the code format","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":7}}},{"hash":"c4f3f68b1f244f127dee55f36f35ed31c633bd3a","isMergeCommit":false,"messageTitle":"Update updateOutput function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":6}}},{"hash":"7f2d76c214e6d9974d173d87f0c0422ab116bde7","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S1-CS2113-W12-3:master\u0027 into Jason-feat-help-command","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bb0c81c0d8927d33ad26eae7931996a96b6621ff","isMergeCommit":true,"messageTitle":"Merge pull request #24 from ChoonSiang/Choonsiang-JUnit-Parser","messageBody":"Add JUnit tests for Parser class","fileTypesAndContributionMap":{}},{"hash":"e787b35840e95660a8aff9dc46667c21b857c6d1","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S1-CS2113-W12-3:master\u0027 into Jason-feat-help-command","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"dbcd487745647af8cccca27c910e874e32da7cdd","isMergeCommit":false,"messageTitle":"Modify logic for updateOutput function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":28}}},{"hash":"149427e10c48916c29c495d8e8f3a04170abed46","isMergeCommit":false,"messageTitle":"Create JUnit test for help","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":25,"deletions":0}}},{"hash":"531b611fe7c8d51a703bee109ab5590437952531","isMergeCommit":true,"messageTitle":"Merge pull request #11 from sRanay/Jason-feat-help-command","messageBody":"Add help command feature","fileTypesAndContributionMap":{}},{"hash":"6b5ee6f05ddfe6b6a9b43c1b436bb888c1647eca","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S1-CS2113-W12-3:master\u0027 into Jason-JUnit-Test-Help-Command","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ecf036b660eb403e189f28016d835c2fcd777720","isMergeCommit":false,"messageTitle":"Add test case for valid command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":17,"deletions":3}}},{"hash":"2b7c371f0e528f650273afb2dd52cdcdd8a0aabb","isMergeCommit":false,"messageTitle":"Add more test cases for help command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":111,"deletions":7}}},{"hash":"4bcd083cbb2e22c2861c26d963084d7404da52d6","isMergeCommit":false,"messageTitle":"Add in test case where commands are Case sensitive","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":34,"deletions":0}}},{"hash":"87cf6c3b913ca98a20816e18ce4f5cf88110601c","isMergeCommit":false,"messageTitle":"Fix bug where valid command in uppercase not detected","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":5}}},{"hash":"afba94765ac684c7fbdc0a0ba9e4fa44b3a422a1","isMergeCommit":false,"messageTitle":"Fix code format","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"a31f53ccfffd05106f06b08dc66c5159d216d4b1","isMergeCommit":true,"messageTitle":"Merge pull request #26 from sRanay/Jason-JUnit-Test-Help-Command","messageBody":"Add JUnit test for HelpCommand Class","fileTypesAndContributionMap":{}},{"hash":"7575b485abedd305f566a580f3fe504f347c9610","isMergeCommit":false,"messageTitle":"Change the directory for HelpCommandTest.java","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":2}}},{"hash":"8d8b0f9aa7d7ff33a278a7600b26369bf22ac707","isMergeCommit":true,"messageTitle":"Merge pull request #27 from Jonoans/test-ui","messageBody":"Add more test cases for table printer","fileTypesAndContributionMap":{}},{"hash":"0818be8d3df97c4baa623bd3cd90f2f4d55273de","isMergeCommit":true,"messageTitle":"Merge pull request #31 from ChoonSiang/unit-test-RemoveTransactionCommand","messageBody":"Add unit tests for RemoveTransactionCommnad","fileTypesAndContributionMap":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"6a7dd3148e9249206b07b653d33c0c2667c98eb6","isMergeCommit":false,"messageTitle":"Enable assertion on gradle","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":0}}}]}],"itayrefaely":[{"date":"2023-10-04","commitResults":[{"hash":"9267dd8a7057b39618d0d09faf93a29dde8d3a51","isMergeCommit":false,"messageTitle":"Itay","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"9a791fd395fe0025b5ad3179fb6a641a15175c3b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into ChoonSiang-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ab2c4b6200d58c654fe730f96434eb54fb7fc1c2","isMergeCommit":true,"messageTitle":"Merge pull request #2 from ChoonSiang/ChoonSiang-AboutUs","messageBody":"Update AboutUs.md to include name","fileTypesAndContributionMap":{}}]}],"hooami":[{"date":"2023-10-04","commitResults":[{"hash":"8f0ad01668b3d4188ccf28a7f9b150f687dcd14d","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"0f20ce716034420955215f135e3ef3dd7e180a66","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"0dba94ff83f3615fe69acb4df5e0197c4a5f3961","isMergeCommit":true,"messageTitle":"Merge pull request #5 from sRanay/Jason-AboutUs","messageBody":"Modify AboutUs","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"2134a9aa87ad5516dfb71bc5036e9acdf7f9023b","isMergeCommit":false,"messageTitle":"Added List feature and replace category with goal in Income and vice-versa","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":167,"deletions":18}}},{"hash":"c178981922b69962933adb39c0d666244666bbe5","isMergeCommit":true,"messageTitle":"Merge branch \u0027feat-add-remove-transactions\u0027 of https://github.com/jonoans/tp into feat-list","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"50485ba04a5e5f14f5a6df675ba5fb4f8092d763","isMergeCommit":false,"messageTitle":"Added custom width for table and fixed checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":12}}}]},{"date":"2023-10-17","commitResults":[{"hash":"c2f7f1e8ce67913acf49fd1a15ec14ca0c544048","isMergeCommit":false,"messageTitle":"Added v1.0 user guide and theme","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":102,"deletions":20}}},{"hash":"ecb48a114a785f2bacb9e853eb4f7f43cadfc7fa","isMergeCommit":false,"messageTitle":"Edited README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}},{"hash":"d270a28fe45c581de28b9d419ef13e81f8a91033","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"578c32cae311f2542dd2370d96fda28b512df796","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"b65c9461926d6699d43cec125c96e706557f1384","isMergeCommit":false,"messageTitle":"Fixed typo in UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"beaa9f29afcc99d32fa631717d85acdcafff34e3","isMergeCommit":false,"messageTitle":"Fixed UserGuide.md typo","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"5a289a7cb3142b65a33d555f6586440974611ced","isMergeCommit":false,"messageTitle":"Fixed typo and formatting issues","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":10,"deletions":10}}},{"hash":"daa159a337cda36687a3172637445394b24e5afb","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027JH/feat-UG\u0027 into feat-UG","messageBody":"# Conflicts:\n#\tdocs/UserGuide.md\n","fileTypesAndContributionMap":{}},{"hash":"bc5bf17a10e7c1d9318a7b3bf52ee88d62726131","isMergeCommit":false,"messageTitle":"Added unit testing for List Command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":121,"deletions":0}}},{"hash":"c01e28d04c6ca7a5ee82ccc195d3478b2d01eaa9","isMergeCommit":false,"messageTitle":"Added unit testing for List Command and corrected output for UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3},"test-code":{"insertions":15,"deletions":31}}},{"hash":"8c4d5117fddd6bf6eee61a3295d158a4dc072222","isMergeCommit":false,"messageTitle":"Edited UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-21","commitResults":[{"hash":"84edddea23a94d0a9ee44eadb109fbc156b491b1","isMergeCommit":true,"messageTitle":"Merge pull request #38 from Jonoans/fix-list-test","messageBody":"Fix ListCommand test","fileTypesAndContributionMap":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"944bd7cc91f592f9ca226c932b4042969e04b218","isMergeCommit":true,"messageTitle":"Merge pull request #40 from sRanay/Jason-enable-assertion-gradle","messageBody":"Enable assertion on gradle","fileTypesAndContributionMap":{}}]}],"ChoonSiang":[{"date":"2023-10-04","commitResults":[{"hash":"6c4c010e13269bf72b24b6e5ddcc4362be7633c6","isMergeCommit":false,"messageTitle":"Update AboutUs.md to include name.","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"0c1d93f827a571c2070a992ce72ffa3fc476c9ee","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Jonoans/jonathantan-AboutUs","messageBody":"Add name and github profile in table","fileTypesAndContributionMap":{}},{"hash":"d73a0438bcd76d5892d5cb396e136595e26c81df","isMergeCommit":true,"messageTitle":"Merge pull request #4 from hooami/JunHong-AboutUs","messageBody":"Update AboutUs.md to include name","fileTypesAndContributionMap":{}}]},{"date":"2023-10-12","commitResults":[{"hash":"5b28ba4d649ac66daf65f8d00c5d5e24b6a72273","isMergeCommit":false,"messageTitle":"Add DukeExecption class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0}}},{"hash":"97e5c68c99187af92ff48c10052c1db47002bd34","isMergeCommit":false,"messageTitle":"Add Command, ExitCommand and Ui class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":39,"deletions":0}}},{"hash":"1bebffb9a45f56d1058fbbdbbe4308abf69cce02","isMergeCommit":false,"messageTitle":"Add Parser class to parse user command and arguments","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":82,"deletions":0}}},{"hash":"338578486585441e41fde23c3bd9084802ff6008","isMergeCommit":false,"messageTitle":"Modify Duke to continuously get user input in a loop and parse command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":10}}},{"hash":"7d5e476a6e6a64e6f40faad4dfd45389719effc0","isMergeCommit":false,"messageTitle":"Remove unused variable and format to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":5}}}]},{"date":"2023-10-13","commitResults":[{"hash":"5cddfe3651f75443e1d474e8b574bc1d417111f3","isMergeCommit":false,"messageTitle":"Wrap line to prevent long lines and add private access modifier to PROGRAM_NAME","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"03ef2bdb48d910b3977c2ade4a4024297f792d67","isMergeCommit":false,"messageTitle":"Remove unnecessary strip when parsing user input","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-17","commitResults":[{"hash":"26d351cc466ea6f2a1c5b67b6c0a22e6f6aa981c","isMergeCommit":false,"messageTitle":"Add remove transaction feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":0}}},{"hash":"f12c4ad85a417f163569951103b8bd760f7e86e3","isMergeCommit":false,"messageTitle":"Add remove transaction feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":109,"deletions":0}}},{"hash":"d2efeb8010c0ca88e7777bfa576161d517b2204c","isMergeCommit":false,"messageTitle":"Format to add a space after function declaration","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"fb44b430360a128bd4a92a7ae503687caef6d8ed","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"12fa2afa2a73a7de9967ecfa30974f8a9b0ee8f6","isMergeCommit":false,"messageTitle":"Add assertion to RemoveTransactionCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":0}}},{"hash":"0d35c543b12a74b6b9c63f9b1d323b45e277c227","isMergeCommit":false,"messageTitle":"Fix parser not returning correct value when description is empty","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":1}}},{"hash":"83a542bad81905c34c24a1f2e6ea859e8b70f616","isMergeCommit":false,"messageTitle":"Fix parser not storing null when argument value is empty","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"5cb278d16d53ddc78b514f901a1a8bb550dda0fd","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":1},"test-code":{"insertions":81,"deletions":0}}},{"hash":"2bc8b18a58ce7761821181851f4719eb329c9884","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into choonsiang-remove-transaction","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"05f680e60ade11696dc0726ce30abec396ffbece","isMergeCommit":true,"messageTitle":"Merge pull request #14 from ChoonSiang/choonsiang-remove-transaction","messageBody":"Add remove transaction feature","fileTypesAndContributionMap":{}},{"hash":"adca307dee9a225b9338d48e0b99187dff59dfdb","isMergeCommit":true,"messageTitle":"Merge pull request #23 from ChoonSiang/choonsiang-fix-parser","messageBody":"Fix parser not returning correct value when description is empty","fileTypesAndContributionMap":{}},{"hash":"5a3f74ff91d7bc026fa325a39c8ce221b6b93845","isMergeCommit":false,"messageTitle":"Move HelpCommandTest to correct directory","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"c90b6f30c2229345293ff3759bb7e6fe4c55275d","isMergeCommit":false,"messageTitle":"Remove unused import","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"042c2f6d0448e15d1b2b80f66ecdb88a671a9fe0","isMergeCommit":false,"messageTitle":"Add unit tests for RemoveTransactionCommand","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":102,"deletions":0}}},{"hash":"a6c2942524941aa815b188692f21c4c31a0c8065","isMergeCommit":true,"messageTitle":"Merge pull request #32 from hooami/feat-UG","messageBody":"Added UserGuide v1.0","fileTypesAndContributionMap":{}},{"hash":"0fa91a93a429aa4480f56146e2ad8e49af12f03b","isMergeCommit":true,"messageTitle":"Merge pull request #34 from hooami/feat-UG","messageBody":"Fixed UserGuide","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Jonoans":{"docs":1,"functional-code":539,"test-code":105},"sRanay":{"docs":1,"functional-code":250,"test-code":176,"other":1},"itayrefaely":{"docs":1,"functional-code":0,"test-code":0},"hooami":{"docs":102,"functional-code":174,"test-code":101},"ChoonSiang":{"docs":1,"functional-code":284,"test-code":183}},"authorContributionVariance":{"Jonoans":12510.966,"sRanay":6115.863,"itayrefaely":0.12486992,"hooami":4455.6743,"ChoonSiang":4350.345},"authorDisplayNameMap":{"Jonoans":"CS2113-W12-3 TAN ..THAN","sRanay":"CS2113-W12-3 JASO.. JIE","itayrefaely":"CS2113-W12-3 REFA..ITAY","hooami":"CS2113-W12-3 HOO ..HONG","ChoonSiang":"CS2113-W12-3 CHAN..IANG"}} +{"authorDailyContributionsMap":{"Jonoans":[{"date":"2023-10-04","commitResults":[{"hash":"ef4b021f95f8b9e181886cac55adb368f52017da","isMergeCommit":false,"messageTitle":"Add name and github profile in table","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"c7ac1c499a99bd29e9ea9d8383ac4a7c0fd5e798","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into Itay-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"8d196dc524d6c49dd948c6e5b8eeedae48064f2d","isMergeCommit":true,"messageTitle":"Merge pull request #3 from itayrefaely/Itay-AboutUs","messageBody":"Itay","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"9cc0ee4d48b718ea18e5133db17fae20ec1be5eb","isMergeCommit":false,"messageTitle":"Add income and expense models","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":55,"deletions":0}}},{"hash":"dd43e447553e0a48efe1da33c5f68f2202d8ac57","isMergeCommit":false,"messageTitle":"Remove extra line","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"7bb6b90ce52c2e8601f13ad2c0a9080a2d08e4ed","isMergeCommit":false,"messageTitle":"Add feature to insert new income entries","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":329,"deletions":7}}},{"hash":"7f40f45902235c0b1b9630a402bf06a447f4b57f","isMergeCommit":false,"messageTitle":"Refactor some variables and move table header printing to printTableHeader method","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":9}}},{"hash":"1474a119c8340c143fc2bd9eb0dd85bb9f43f79e","isMergeCommit":false,"messageTitle":"Add printTableRows method and add outputstream member variable to Ui","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":68,"deletions":7}}},{"hash":"9c2f61766e02cf5c5a34ecc01714845ffe3182c0","isMergeCommit":false,"messageTitle":"Fix typo","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"32cdcd3c4b8afaa791341d901ca07da45cba1b73","isMergeCommit":false,"messageTitle":"Add test for Ui class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0},"test-code":{"insertions":29,"deletions":0}}},{"hash":"a59ac146ac5c9cb6162838544fcfb60aaa003af8","isMergeCommit":false,"messageTitle":"Add expense tracking command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":80,"deletions":0}}},{"hash":"2e82999c6a579046ecb5eb8b3f399f08dde10d2e","isMergeCommit":false,"messageTitle":"Remove padding for last item in table row","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1},"test-code":{"insertions":1,"deletions":1}}},{"hash":"ddd1fa81e294438e4e451be6eb4462fcf92fd864","isMergeCommit":true,"messageTitle":"Merge pull request #8 from Jonoans/feat-transaction-models","messageBody":"Add income and expense models","fileTypesAndContributionMap":{}},{"hash":"97e1cf066a0f47c6d8b1bad1860b96ededa115e0","isMergeCommit":false,"messageTitle":"Fix index out of bound bug in mergeColWidths","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1},"test-code":{"insertions":19,"deletions":0}}},{"hash":"fac8bb732586ffa6dce194d347c45baaccccb5cf","isMergeCommit":true,"messageTitle":"Merge pull request #9 from Jonoans/feat-add-remove-transactions","messageBody":"Feature: Add \u0026 remove transactions","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"c8f1790f7a5d139d09cb5478a18604c23dbc5a5b","isMergeCommit":true,"messageTitle":"Merge pull request #10 from hooami/feat-list","messageBody":"Added List feature ","fileTypesAndContributionMap":{}},{"hash":"67de7cf9c4fdffec95a415b000e53ce5087fed81","isMergeCommit":false,"messageTitle":"Fix table printer - Table printer now ignores default column widths if custom widths are specified - Printer will still take max of column header and stated width - i.e. column headers will never be truncated - Correct other minor formatting issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":24,"deletions":6}}}]},{"date":"2023-10-17","commitResults":[{"hash":"04a347ee3b490ae56695eea57033ef2a085e9165","isMergeCommit":true,"messageTitle":"Merge pull request #12 from Jonoans/fix-table-print","messageBody":"Fix table printer","fileTypesAndContributionMap":{}},{"hash":"3e456fdf7725e64554baf0ba4b16ff4b35f67c08","isMergeCommit":false,"messageTitle":"Add test cases for table printer - Case for print without header - Case for print without header, with custom widths specified - Case for print without header, with custom widths specified that are smaller than default widths","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":3},"test-code":{"insertions":50,"deletions":0}}},{"hash":"5c7593f1ef01d2cb6dbe47f460e4040b1b23594a","isMergeCommit":true,"messageTitle":"Merge pull request #29 from sRanay/Jason-JUnit-Test-Help-Command","messageBody":"Change the directory for HelpCommandTest.java","fileTypesAndContributionMap":{}},{"hash":"37a52c1cd98293c0c4e4e6154322a1f6a1b51e04","isMergeCommit":true,"messageTitle":"Merge pull request #33 from hooami/feat-UG","messageBody":"Fixed typo in UserGuide.md","fileTypesAndContributionMap":{}},{"hash":"65a5f3352f8a4d38445e84f73ea408cf4f0c633f","isMergeCommit":true,"messageTitle":"Merge pull request #35 from hooami/unit-test-List","messageBody":"Added unit testing for List Command","tags":["v1.0"],"fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"1461551d033bf6c8e48b742ad20d54955e076cec","isMergeCommit":false,"messageTitle":"Fix failing test","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":7,"deletions":4}}}]},{"date":"2023-10-22","commitResults":[{"hash":"e4357d435b8a59088f6c275fee9bbc2554ea0731","isMergeCommit":false,"messageTitle":"Move user input retrieval functionality to UI","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":14,"deletions":5}}}]}],"sRanay":[{"date":"2023-10-04","commitResults":[{"hash":"432fb4b7b27f1f55e828430634b5f8b93ad4e13a","isMergeCommit":false,"messageTitle":"Modify AboutUs","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-13","commitResults":[{"hash":"850d0eead8d175081a263218cdf2670acd7a2321","isMergeCommit":true,"messageTitle":"Merge pull request #6 from ChoonSiang/ChoonSiang-Parser","messageBody":"Add Ui, Exception, Command and Parser class","fileTypesAndContributionMap":{}},{"hash":"ed55adec9aabec1d92f9dde34177e284c69e55ee","isMergeCommit":false,"messageTitle":"Add Transaction class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":40,"deletions":0}}},{"hash":"160ab9d5811b42ba9c1eea6cc9f37d36cef7b662","isMergeCommit":false,"messageTitle":"Add Goal Class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":28,"deletions":0}}},{"hash":"88b55b6c2329c254c203615b87c749854d2e0cbb","isMergeCommit":false,"messageTitle":"Add Category class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":13,"deletions":0}}},{"hash":"72c70969e0705ccbff0ce683a0120287e6d491b5","isMergeCommit":false,"messageTitle":"Add constructor for for Category class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":1}}},{"hash":"3aa3f428ac90fb7808094ec0521057d971016eac","isMergeCommit":true,"messageTitle":"Merge pull request #7 from sRanay/Jason-ClassCreation","messageBody":"Class Creation for Transaction, Goal and Category","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"45589a916577c5b3e36a6c98ce2281879442a45e","isMergeCommit":true,"messageTitle":"Merge branch \u0027Jason-feat-help-command\u0027 of https://github.com/sRanay/tp into Jason-feat-help-command","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"0a0f00cc657760ee4ac55e0e2add2ba86a8ff3da","isMergeCommit":false,"messageTitle":"Add full list help command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":120,"deletions":0}}}]},{"date":"2023-10-17","commitResults":[{"hash":"3c84d10e1aa646371926f198513a39028316e162","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S1-CS2113-W12-3:master\u0027 into Jason-feat-help-command","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"b54f6a3a7dd00296f642cf1074ab200991d1843b","isMergeCommit":false,"messageTitle":"Add help command for specific commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":81,"deletions":33}}},{"hash":"30b063ff4e7dcbff662de53ca81a30065022c169","isMergeCommit":false,"messageTitle":"Change code format","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":6}}},{"hash":"768d1a10dd3c0c412fe7247a390110a392912180","isMergeCommit":false,"messageTitle":"Change the code format","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":7}}},{"hash":"c4f3f68b1f244f127dee55f36f35ed31c633bd3a","isMergeCommit":false,"messageTitle":"Update updateOutput function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":6}}},{"hash":"7f2d76c214e6d9974d173d87f0c0422ab116bde7","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S1-CS2113-W12-3:master\u0027 into Jason-feat-help-command","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"bb0c81c0d8927d33ad26eae7931996a96b6621ff","isMergeCommit":true,"messageTitle":"Merge pull request #24 from ChoonSiang/Choonsiang-JUnit-Parser","messageBody":"Add JUnit tests for Parser class","fileTypesAndContributionMap":{}},{"hash":"e787b35840e95660a8aff9dc46667c21b857c6d1","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S1-CS2113-W12-3:master\u0027 into Jason-feat-help-command","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"dbcd487745647af8cccca27c910e874e32da7cdd","isMergeCommit":false,"messageTitle":"Modify logic for updateOutput function","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":28}}},{"hash":"149427e10c48916c29c495d8e8f3a04170abed46","isMergeCommit":false,"messageTitle":"Create JUnit test for help","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":25,"deletions":0}}},{"hash":"531b611fe7c8d51a703bee109ab5590437952531","isMergeCommit":true,"messageTitle":"Merge pull request #11 from sRanay/Jason-feat-help-command","messageBody":"Add help command feature","fileTypesAndContributionMap":{}},{"hash":"6b5ee6f05ddfe6b6a9b43c1b436bb888c1647eca","isMergeCommit":true,"messageTitle":"Merge branch \u0027AY2324S1-CS2113-W12-3:master\u0027 into Jason-JUnit-Test-Help-Command","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ecf036b660eb403e189f28016d835c2fcd777720","isMergeCommit":false,"messageTitle":"Add test case for valid command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":17,"deletions":3}}},{"hash":"2b7c371f0e528f650273afb2dd52cdcdd8a0aabb","isMergeCommit":false,"messageTitle":"Add more test cases for help command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":111,"deletions":7}}},{"hash":"4bcd083cbb2e22c2861c26d963084d7404da52d6","isMergeCommit":false,"messageTitle":"Add in test case where commands are Case sensitive","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":34,"deletions":0}}},{"hash":"87cf6c3b913ca98a20816e18ce4f5cf88110601c","isMergeCommit":false,"messageTitle":"Fix bug where valid command in uppercase not detected","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":5}}},{"hash":"afba94765ac684c7fbdc0a0ba9e4fa44b3a422a1","isMergeCommit":false,"messageTitle":"Fix code format","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"a31f53ccfffd05106f06b08dc66c5159d216d4b1","isMergeCommit":true,"messageTitle":"Merge pull request #26 from sRanay/Jason-JUnit-Test-Help-Command","messageBody":"Add JUnit test for HelpCommand Class","fileTypesAndContributionMap":{}},{"hash":"7575b485abedd305f566a580f3fe504f347c9610","isMergeCommit":false,"messageTitle":"Change the directory for HelpCommandTest.java","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":2}}},{"hash":"8d8b0f9aa7d7ff33a278a7600b26369bf22ac707","isMergeCommit":true,"messageTitle":"Merge pull request #27 from Jonoans/test-ui","messageBody":"Add more test cases for table printer","fileTypesAndContributionMap":{}},{"hash":"0818be8d3df97c4baa623bd3cd90f2f4d55273de","isMergeCommit":true,"messageTitle":"Merge pull request #31 from ChoonSiang/unit-test-RemoveTransactionCommand","messageBody":"Add unit tests for RemoveTransactionCommnad","fileTypesAndContributionMap":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"6a7dd3148e9249206b07b653d33c0c2667c98eb6","isMergeCommit":false,"messageTitle":"Enable assertion on gradle","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":0}}},{"hash":"2fe4898d675771c7689042e88d5fc74619af098d","isMergeCommit":false,"messageTitle":"Add user stories to DG","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":2}}},{"hash":"c40356b4bb8075116acb108b1a6d02e56ff8508f","isMergeCommit":false,"messageTitle":"Add proposed implementation for exporting data","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":24,"deletions":1}}},{"hash":"b514c891ac18424bf31b9e805e1a013dda06e6f8","isMergeCommit":false,"messageTitle":"Add component summary under architecture","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":5,"deletions":0}}}]}],"itayrefaely":[{"date":"2023-10-04","commitResults":[{"hash":"9267dd8a7057b39618d0d09faf93a29dde8d3a51","isMergeCommit":false,"messageTitle":"Itay","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"9a791fd395fe0025b5ad3179fb6a641a15175c3b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into ChoonSiang-AboutUs","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"ab2c4b6200d58c654fe730f96434eb54fb7fc1c2","isMergeCommit":true,"messageTitle":"Merge pull request #2 from ChoonSiang/ChoonSiang-AboutUs","messageBody":"Update AboutUs.md to include name","fileTypesAndContributionMap":{}}]}],"hooami":[{"date":"2023-10-04","commitResults":[{"hash":"8f0ad01668b3d4188ccf28a7f9b150f687dcd14d","isMergeCommit":false,"messageTitle":"Update README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"0f20ce716034420955215f135e3ef3dd7e180a66","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"0dba94ff83f3615fe69acb4df5e0197c4a5f3961","isMergeCommit":true,"messageTitle":"Merge pull request #5 from sRanay/Jason-AboutUs","messageBody":"Modify AboutUs","fileTypesAndContributionMap":{}}]},{"date":"2023-10-15","commitResults":[{"hash":"2134a9aa87ad5516dfb71bc5036e9acdf7f9023b","isMergeCommit":false,"messageTitle":"Added List feature and replace category with goal in Income and vice-versa","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":167,"deletions":18}}},{"hash":"c178981922b69962933adb39c0d666244666bbe5","isMergeCommit":true,"messageTitle":"Merge branch \u0027feat-add-remove-transactions\u0027 of https://github.com/jonoans/tp into feat-list","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"50485ba04a5e5f14f5a6df675ba5fb4f8092d763","isMergeCommit":false,"messageTitle":"Added custom width for table and fixed checkstyle errors","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":12}}}]},{"date":"2023-10-17","commitResults":[{"hash":"c2f7f1e8ce67913acf49fd1a15ec14ca0c544048","isMergeCommit":false,"messageTitle":"Added v1.0 user guide and theme","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":102,"deletions":20}}},{"hash":"ecb48a114a785f2bacb9e853eb4f7f43cadfc7fa","isMergeCommit":false,"messageTitle":"Edited README.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}},{"hash":"d270a28fe45c581de28b9d419ef13e81f8a91033","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"578c32cae311f2542dd2370d96fda28b512df796","isMergeCommit":false,"messageTitle":"Update UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"b65c9461926d6699d43cec125c96e706557f1384","isMergeCommit":false,"messageTitle":"Fixed typo in UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":2}}},{"hash":"beaa9f29afcc99d32fa631717d85acdcafff34e3","isMergeCommit":false,"messageTitle":"Fixed UserGuide.md typo","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":4,"deletions":4}}},{"hash":"5a289a7cb3142b65a33d555f6586440974611ced","isMergeCommit":false,"messageTitle":"Fixed typo and formatting issues","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":10,"deletions":10}}},{"hash":"daa159a337cda36687a3172637445394b24e5afb","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027JH/feat-UG\u0027 into feat-UG","messageBody":"# Conflicts:\n#\tdocs/UserGuide.md\n","fileTypesAndContributionMap":{}},{"hash":"bc5bf17a10e7c1d9318a7b3bf52ee88d62726131","isMergeCommit":false,"messageTitle":"Added unit testing for List Command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":121,"deletions":0}}},{"hash":"c01e28d04c6ca7a5ee82ccc195d3478b2d01eaa9","isMergeCommit":false,"messageTitle":"Added unit testing for List Command and corrected output for UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":3,"deletions":3},"test-code":{"insertions":15,"deletions":31}}},{"hash":"8c4d5117fddd6bf6eee61a3295d158a4dc072222","isMergeCommit":false,"messageTitle":"Edited UserGuide.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-21","commitResults":[{"hash":"84edddea23a94d0a9ee44eadb109fbc156b491b1","isMergeCommit":true,"messageTitle":"Merge pull request #38 from Jonoans/fix-list-test","messageBody":"Fix ListCommand test","fileTypesAndContributionMap":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"944bd7cc91f592f9ca226c932b4042969e04b218","isMergeCommit":true,"messageTitle":"Merge pull request #40 from sRanay/Jason-enable-assertion-gradle","messageBody":"Enable assertion on gradle","fileTypesAndContributionMap":{}},{"hash":"3050104017596a95b9f49c6cf9ed869e055179ec","isMergeCommit":true,"messageTitle":"Merge pull request #41 from sRanay/Jason-dev-guide","messageBody":"Update DG","fileTypesAndContributionMap":{}},{"hash":"e7a071c8478a969161a9e83a13323d97e1be6fb1","isMergeCommit":true,"messageTitle":"Merge pull request #42 from Jonoans/feat-ui","messageBody":"Move user input retrieval functionality to UI","fileTypesAndContributionMap":{}}]}],"ChoonSiang":[{"date":"2023-10-04","commitResults":[{"hash":"6c4c010e13269bf72b24b6e5ddcc4362be7633c6","isMergeCommit":false,"messageTitle":"Update AboutUs.md to include name.","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"0c1d93f827a571c2070a992ce72ffa3fc476c9ee","isMergeCommit":true,"messageTitle":"Merge pull request #1 from Jonoans/jonathantan-AboutUs","messageBody":"Add name and github profile in table","fileTypesAndContributionMap":{}},{"hash":"d73a0438bcd76d5892d5cb396e136595e26c81df","isMergeCommit":true,"messageTitle":"Merge pull request #4 from hooami/JunHong-AboutUs","messageBody":"Update AboutUs.md to include name","fileTypesAndContributionMap":{}}]},{"date":"2023-10-12","commitResults":[{"hash":"5b28ba4d649ac66daf65f8d00c5d5e24b6a72273","isMergeCommit":false,"messageTitle":"Add DukeExecption class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":0}}},{"hash":"97e5c68c99187af92ff48c10052c1db47002bd34","isMergeCommit":false,"messageTitle":"Add Command, ExitCommand and Ui class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":39,"deletions":0}}},{"hash":"1bebffb9a45f56d1058fbbdbbe4308abf69cce02","isMergeCommit":false,"messageTitle":"Add Parser class to parse user command and arguments","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":82,"deletions":0}}},{"hash":"338578486585441e41fde23c3bd9084802ff6008","isMergeCommit":false,"messageTitle":"Modify Duke to continuously get user input in a loop and parse command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":10}}},{"hash":"7d5e476a6e6a64e6f40faad4dfd45389719effc0","isMergeCommit":false,"messageTitle":"Remove unused variable and format to comply with coding standard","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":5}}}]},{"date":"2023-10-13","commitResults":[{"hash":"5cddfe3651f75443e1d474e8b574bc1d417111f3","isMergeCommit":false,"messageTitle":"Wrap line to prevent long lines and add private access modifier to PROGRAM_NAME","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":3}}},{"hash":"03ef2bdb48d910b3977c2ade4a4024297f792d67","isMergeCommit":false,"messageTitle":"Remove unnecessary strip when parsing user input","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-17","commitResults":[{"hash":"26d351cc466ea6f2a1c5b67b6c0a22e6f6aa981c","isMergeCommit":false,"messageTitle":"Add remove transaction feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":0}}},{"hash":"f12c4ad85a417f163569951103b8bd760f7e86e3","isMergeCommit":false,"messageTitle":"Add remove transaction feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":109,"deletions":0}}},{"hash":"d2efeb8010c0ca88e7777bfa576161d517b2204c","isMergeCommit":false,"messageTitle":"Format to add a space after function declaration","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"fb44b430360a128bd4a92a7ae503687caef6d8ed","isMergeCommit":false,"messageTitle":"Remove unused imports","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":2}}},{"hash":"12fa2afa2a73a7de9967ecfa30974f8a9b0ee8f6","isMergeCommit":false,"messageTitle":"Add assertion to RemoveTransactionCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":0}}},{"hash":"0d35c543b12a74b6b9c63f9b1d323b45e277c227","isMergeCommit":false,"messageTitle":"Fix parser not returning correct value when description is empty","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":1}}},{"hash":"83a542bad81905c34c24a1f2e6ea859e8b70f616","isMergeCommit":false,"messageTitle":"Fix parser not storing null when argument value is empty","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0}}},{"hash":"5cb278d16d53ddc78b514f901a1a8bb550dda0fd","isMergeCommit":false,"messageTitle":"Add JUnit tests for Parser class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":1},"test-code":{"insertions":81,"deletions":0}}},{"hash":"2bc8b18a58ce7761821181851f4719eb329c9884","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into choonsiang-remove-transaction","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"05f680e60ade11696dc0726ce30abec396ffbece","isMergeCommit":true,"messageTitle":"Merge pull request #14 from ChoonSiang/choonsiang-remove-transaction","messageBody":"Add remove transaction feature","fileTypesAndContributionMap":{}},{"hash":"adca307dee9a225b9338d48e0b99187dff59dfdb","isMergeCommit":true,"messageTitle":"Merge pull request #23 from ChoonSiang/choonsiang-fix-parser","messageBody":"Fix parser not returning correct value when description is empty","fileTypesAndContributionMap":{}},{"hash":"5a3f74ff91d7bc026fa325a39c8ce221b6b93845","isMergeCommit":false,"messageTitle":"Move HelpCommandTest to correct directory","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"c90b6f30c2229345293ff3759bb7e6fe4c55275d","isMergeCommit":false,"messageTitle":"Remove unused import","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":0,"deletions":1}}},{"hash":"042c2f6d0448e15d1b2b80f66ecdb88a671a9fe0","isMergeCommit":false,"messageTitle":"Add unit tests for RemoveTransactionCommand","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":102,"deletions":0}}},{"hash":"a6c2942524941aa815b188692f21c4c31a0c8065","isMergeCommit":true,"messageTitle":"Merge pull request #32 from hooami/feat-UG","messageBody":"Added UserGuide v1.0","fileTypesAndContributionMap":{}},{"hash":"0fa91a93a429aa4480f56146e2ad8e49af12f03b","isMergeCommit":true,"messageTitle":"Merge pull request #34 from hooami/feat-UG","messageBody":"Fixed UserGuide","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"Jonoans":{"docs":1,"functional-code":553,"test-code":105},"sRanay":{"docs":37,"functional-code":249,"test-code":176,"other":1},"itayrefaely":{"docs":1,"functional-code":0,"test-code":0},"hooami":{"docs":102,"functional-code":174,"test-code":101},"ChoonSiang":{"docs":1,"functional-code":281,"test-code":183}},"authorContributionVariance":{"Jonoans":12493.131,"sRanay":6114.3213,"itayrefaely":0.12486992,"hooami":4455.6743,"ChoonSiang":4350.345},"authorDisplayNameMap":{"Jonoans":"CS2113-W12-3 TAN ..THAN","sRanay":"CS2113-W12-3 JASO.. JIE","itayrefaely":"CS2113-W12-3 REFA..ITAY","hooami":"CS2113-W12-3 HOO ..HONG","ChoonSiang":"CS2113-W12-3 CHAN..IANG"}} diff --git a/AY2324S1-CS2113-W12-4_tp_master/authorship.json b/AY2324S1-CS2113-W12-4_tp_master/authorship.json index 94b728b..3c4585b 100644 --- a/AY2324S1-CS2113-W12-4_tp_master/authorship.json +++ b/AY2324S1-CS2113-W12-4_tp_master/authorship.json @@ -1 +1 @@ -[{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" mainClass.set(\"fittrack.FitTrack\")","lastModifiedDate":"2023-10-09"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" archiveBaseName.set(\"fittrack\")","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"ICubE-"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ICubE-":3,"-":44}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Portfolio ","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"J0shuaLeong"},"content":"--------|:------------:|:----------------------------------------:|:---------:","lastModifiedDate":"2023-10-06"},{"lineNumber":5,"author":{"gitId":"farissirraj"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Faris Sirraj | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Yeon Jeho | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":"\u003cimg src\u003d\"images/joshua.jpg\" width \u003d 25% height \u003d 25%\u003e | Joshua Leong | [Github](https://github.com/J0shuaLeong) | [Portfolio](docs/team/joshua.md)","lastModifiedDate":"2023-10-07"},{"lineNumber":8,"author":{"gitId":"NgLixuanNixon"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Ng Lixuan Nixon | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"marklin2234"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Mark Lin | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"NgLixuanNixon":2,"J0shuaLeong":2,"ICubE-":1,"marklin2234":1,"-":3,"farissirraj":1}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# User Guide","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Introduction","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"Are you ready to embark on a journey towards a healthier, ","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":"more active lifestyle? Introducing FitTrack, ","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":"your ultimate fitness and nutrition companion. ","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"J0shuaLeong"},"content":"FitTrack is more than just an app; ","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"J0shuaLeong"},"content":"it\u0027s your personal guide to achieving your health and fitness goals.","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"## Quick Start","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"1. Ensure that you have Java 11 or above installed.","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":"2. Down the latest version of `FitTrack` from [here](https://github.com/AY2324S1-CS2113-W12-4/tp/releases).","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"J0shuaLeong"},"content":"3. You should find the jar file in your default downloads folder. Please place the jar file into a separate folder that will be used as your `home folder`.","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":"4. Open a command terminal, and change the current working directory to the `home folder`.","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":"5. Type ```java -jar fittrack.jar``` in the terminal to open the application. You should see the welcome message \"Hi!\" on the next line.","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":"6. The application is now ready for you to use! Type `help` to see a list of commands that you will be able to use in the application.","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2020-05-24"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":"* [Viewing help : `help`](#View-Help-Guide-help)","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"J0shuaLeong"},"content":"* [Exiting the application : `exit`](#Exiting-the-application-exit)","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"J0shuaLeong"},"content":"* [Editing your profile : `editprofile`](#editing-your-profile-editprofile)","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"J0shuaLeong"},"content":"* [Viewing your profile : `viewprofile`](#viewing-your-profile-viewprofile)","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"J0shuaLeong"},"content":"* [Adding a Meal : `addmeal`](#adding-a-meal-addmeal)","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"J0shuaLeong"},"content":"* [Viewing list of all meals : `viewmeals`](#viewing-list-of-all-meals-viewmeals)","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"J0shuaLeong"},"content":"* [Checking your current bmi : `bmi`](#checking-your-current-bmi-bmi)","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"J0shuaLeong"},"content":"* [Delete a Meal : `deletemeal`](#delete-a-meal-deletemeal)","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"J0shuaLeong"},"content":"* [Adding a workout : `addworkout`](#adding-a-workout-addworkout)","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"J0shuaLeong"},"content":"* [Viewing list of workout : `viewWorkout`](#viewing-list-of-all-workouts-viewworkouts)","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"J0shuaLeong"},"content":"* [Delete a Workout : `deletework`](#delete-a-workout-deleteworkout)","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"J0shuaLeong"},"content":"### View Help Guide: `help`","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"J0shuaLeong"},"content":"Shows the list of commands with the command format and short explanation.","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"J0shuaLeong"},"content":"**Example of usage:**","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"J0shuaLeong"},"content":"help","lastModifiedDate":"2023-10-13"},{"lineNumber":43,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":44,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":45,"author":{"gitId":"J0shuaLeong"},"content":"**Expected output:**","lastModifiedDate":"2023-10-13"},{"lineNumber":46,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"J0shuaLeong"},"content":"`help` shows help message of the command.","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"J0shuaLeong"},"content":"Existing commands:","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"J0shuaLeong"},"content":"help, exit, editprofile, viewprofileaddmeal, deletemeal, viewmealsaddworkout, deleteworkout, viewworkouts","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"J0shuaLeong"},"content":"Type `help` or `help \u003cCOMMAND\u003e` to view help.","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":52,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":53,"author":{"gitId":"J0shuaLeong"},"content":"### Exiting the application: `exit`","lastModifiedDate":"2023-10-13"},{"lineNumber":54,"author":{"gitId":"J0shuaLeong"},"content":"Exits Skippy Chat Bot application.","lastModifiedDate":"2023-10-13"},{"lineNumber":55,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":56,"author":{"gitId":"J0shuaLeong"},"content":"**Example of usage:**","lastModifiedDate":"2023-10-13"},{"lineNumber":57,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":58,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":59,"author":{"gitId":"J0shuaLeong"},"content":"exit","lastModifiedDate":"2023-10-13"},{"lineNumber":60,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":61,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":62,"author":{"gitId":"J0shuaLeong"},"content":"**Expected output:**","lastModifiedDate":"2023-10-13"},{"lineNumber":63,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":64,"author":{"gitId":"J0shuaLeong"},"content":"Goodbye! Hope to see you again soon!","lastModifiedDate":"2023-10-13"},{"lineNumber":65,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":66,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":67,"author":{"gitId":"J0shuaLeong"},"content":"### Editing Your Profile: `editprofile`","lastModifiedDate":"2023-10-19"},{"lineNumber":68,"author":{"gitId":"J0shuaLeong"},"content":"Allows user to edit their profile details.","lastModifiedDate":"2023-10-13"},{"lineNumber":69,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":70,"author":{"gitId":"J0shuaLeong"},"content":"Format: `editprofile h/\u003cheight\u003e w/\u003cweight\u003e l/\u003ccalories\u003e`","lastModifiedDate":"2023-10-19"},{"lineNumber":71,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":72,"author":{"gitId":"-"},"content":"Example of usage: ","lastModifiedDate":"2020-05-24"},{"lineNumber":73,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":74,"author":{"gitId":"J0shuaLeong"},"content":"editprofile h/170 w/70 l/100","lastModifiedDate":"2023-10-19"},{"lineNumber":75,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":76,"author":{"gitId":"J0shuaLeong"},"content":"Expected output:","lastModifiedDate":"2023-10-13"},{"lineNumber":77,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":78,"author":{"gitId":"J0shuaLeong"},"content":"I\u0027ve edited the following:","lastModifiedDate":"2023-10-18"},{"lineNumber":79,"author":{"gitId":"J0shuaLeong"},"content":"Height: 170.0","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"J0shuaLeong"},"content":"Weight: 70.0","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"J0shuaLeong"},"content":"Daily calorie limit: 100.0","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":83,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":84,"author":{"gitId":"J0shuaLeong"},"content":"### Viewing your profile: `viewprofile`","lastModifiedDate":"2023-10-19"},{"lineNumber":85,"author":{"gitId":"J0shuaLeong"},"content":"Lists all profile settings and details.","lastModifiedDate":"2023-10-19"},{"lineNumber":86,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":87,"author":{"gitId":"J0shuaLeong"},"content":"Format: `viewprofile`","lastModifiedDate":"2023-10-19"},{"lineNumber":88,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":89,"author":{"gitId":"J0shuaLeong"},"content":"**Example of usage:**","lastModifiedDate":"2023-10-19"},{"lineNumber":90,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":91,"author":{"gitId":"J0shuaLeong"},"content":"viewprofile","lastModifiedDate":"2023-10-19"},{"lineNumber":92,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":93,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":94,"author":{"gitId":"J0shuaLeong"},"content":"**Expected output:**","lastModifiedDate":"2023-10-19"},{"lineNumber":95,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":96,"author":{"gitId":"J0shuaLeong"},"content":"Your Profile:","lastModifiedDate":"2023-10-19"},{"lineNumber":97,"author":{"gitId":"J0shuaLeong"},"content":"Height: 180.0","lastModifiedDate":"2023-10-19"},{"lineNumber":98,"author":{"gitId":"J0shuaLeong"},"content":"Weight: 80.0","lastModifiedDate":"2023-10-19"},{"lineNumber":99,"author":{"gitId":"J0shuaLeong"},"content":"Daily calorie limit: 3000.0","lastModifiedDate":"2023-10-19"},{"lineNumber":100,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":101,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":102,"author":{"gitId":"J0shuaLeong"},"content":"### Checking your current BMI: `bmi`","lastModifiedDate":"2023-10-20"},{"lineNumber":103,"author":{"gitId":"J0shuaLeong"},"content":"Calculates your bmi based on your current height and weight","lastModifiedDate":"2023-10-20"},{"lineNumber":104,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":105,"author":{"gitId":"J0shuaLeong"},"content":"Format: `bmi`","lastModifiedDate":"2023-10-20"},{"lineNumber":106,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":107,"author":{"gitId":"J0shuaLeong"},"content":"**Example of usage:**","lastModifiedDate":"2023-10-20"},{"lineNumber":108,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":109,"author":{"gitId":"J0shuaLeong"},"content":"bmi","lastModifiedDate":"2023-10-20"},{"lineNumber":110,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":111,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":112,"author":{"gitId":"J0shuaLeong"},"content":"**Expected output:**","lastModifiedDate":"2023-10-20"},{"lineNumber":113,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":114,"author":{"gitId":"J0shuaLeong"},"content":"Your current BMI is 24.22","lastModifiedDate":"2023-10-20"},{"lineNumber":115,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":116,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":117,"author":{"gitId":"J0shuaLeong"},"content":"### Adding a Meal: `addmeal`","lastModifiedDate":"2023-10-13"},{"lineNumber":118,"author":{"gitId":"J0shuaLeong"},"content":"Allows user to add meals they have consumed.","lastModifiedDate":"2023-10-13"},{"lineNumber":119,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":120,"author":{"gitId":"J0shuaLeong"},"content":"Format: `addmeal \u003cmeal\u003e c/ \u003ccalories\u003e`","lastModifiedDate":"2023-10-19"},{"lineNumber":121,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":122,"author":{"gitId":"J0shuaLeong"},"content":"Example of usage:","lastModifiedDate":"2023-10-13"},{"lineNumber":123,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":124,"author":{"gitId":"J0shuaLeong"},"content":"addmeal pasta c/ 200","lastModifiedDate":"2023-10-19"},{"lineNumber":125,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":126,"author":{"gitId":"J0shuaLeong"},"content":"Expected output:","lastModifiedDate":"2023-10-13"},{"lineNumber":127,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":128,"author":{"gitId":"J0shuaLeong"},"content":"I\u0027ve added the following meal:","lastModifiedDate":"2023-10-18"},{"lineNumber":129,"author":{"gitId":"J0shuaLeong"},"content":"Meal name: pasta ","lastModifiedDate":"2023-10-18"},{"lineNumber":130,"author":{"gitId":"J0shuaLeong"},"content":"Calories: 200.0","lastModifiedDate":"2023-10-18"},{"lineNumber":131,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":132,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":133,"author":{"gitId":"J0shuaLeong"},"content":"### Viewing List of All Meals: `viewmeals`","lastModifiedDate":"2023-10-19"},{"lineNumber":134,"author":{"gitId":"J0shuaLeong"},"content":"Lists all the meals.","lastModifiedDate":"2023-10-19"},{"lineNumber":135,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":136,"author":{"gitId":"J0shuaLeong"},"content":"Format: `viewmeals`","lastModifiedDate":"2023-10-19"},{"lineNumber":137,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":138,"author":{"gitId":"J0shuaLeong"},"content":"**Example of usage:**","lastModifiedDate":"2023-10-19"},{"lineNumber":139,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":140,"author":{"gitId":"J0shuaLeong"},"content":"viewwmeals","lastModifiedDate":"2023-10-19"},{"lineNumber":141,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":142,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":143,"author":{"gitId":"J0shuaLeong"},"content":"**Expected output:**","lastModifiedDate":"2023-10-19"},{"lineNumber":144,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":145,"author":{"gitId":"J0shuaLeong"},"content":"These are the meals you have consumed: ","lastModifiedDate":"2023-10-19"},{"lineNumber":146,"author":{"gitId":"J0shuaLeong"},"content":"1.Meal name: pasta","lastModifiedDate":"2023-10-19"},{"lineNumber":147,"author":{"gitId":"J0shuaLeong"},"content":"Calories: 200.0","lastModifiedDate":"2023-10-19"},{"lineNumber":148,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":149,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":150,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":151,"author":{"gitId":"J0shuaLeong"},"content":"### Delete a Meal: `deletemeal`","lastModifiedDate":"2023-10-13"},{"lineNumber":152,"author":{"gitId":"J0shuaLeong"},"content":"Allows user to delete a meal they have added.","lastModifiedDate":"2023-10-13"},{"lineNumber":153,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":154,"author":{"gitId":"J0shuaLeong"},"content":"Format: `deletemeal \u003cindex of meal\u003e`","lastModifiedDate":"2023-10-13"},{"lineNumber":155,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":156,"author":{"gitId":"J0shuaLeong"},"content":"Example of usage:","lastModifiedDate":"2023-10-13"},{"lineNumber":157,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":158,"author":{"gitId":"J0shuaLeong"},"content":"deletemeal 1","lastModifiedDate":"2023-10-13"},{"lineNumber":159,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":160,"author":{"gitId":"J0shuaLeong"},"content":"Expected output:","lastModifiedDate":"2023-10-13"},{"lineNumber":161,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":162,"author":{"gitId":"J0shuaLeong"},"content":"I\u0027ve deleted the following meal:","lastModifiedDate":"2023-10-18"},{"lineNumber":163,"author":{"gitId":"J0shuaLeong"},"content":"Meal name: pasta ","lastModifiedDate":"2023-10-18"},{"lineNumber":164,"author":{"gitId":"J0shuaLeong"},"content":"Calories: 200.0","lastModifiedDate":"2023-10-18"},{"lineNumber":165,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":166,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":167,"author":{"gitId":"J0shuaLeong"},"content":"### Adding a Workout: `addworkout`","lastModifiedDate":"2023-10-19"},{"lineNumber":168,"author":{"gitId":"J0shuaLeong"},"content":"Allows user to add workouts they have done.","lastModifiedDate":"2023-10-19"},{"lineNumber":169,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":170,"author":{"gitId":"J0shuaLeong"},"content":"Format: `addworkout \u003cworkout\u003e c/ \u003ccalories\u003e`","lastModifiedDate":"2023-10-19"},{"lineNumber":171,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":172,"author":{"gitId":"J0shuaLeong"},"content":"Example of usage:","lastModifiedDate":"2023-10-19"},{"lineNumber":173,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":174,"author":{"gitId":"J0shuaLeong"},"content":"addworkout running c/ 180","lastModifiedDate":"2023-10-19"},{"lineNumber":175,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":176,"author":{"gitId":"J0shuaLeong"},"content":"Expected output:","lastModifiedDate":"2023-10-19"},{"lineNumber":177,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":178,"author":{"gitId":"J0shuaLeong"},"content":"I\u0027ve added the following workout:","lastModifiedDate":"2023-10-19"},{"lineNumber":179,"author":{"gitId":"J0shuaLeong"},"content":"Workout name: running ","lastModifiedDate":"2023-10-19"},{"lineNumber":180,"author":{"gitId":"J0shuaLeong"},"content":"Calories: 180.0","lastModifiedDate":"2023-10-19"},{"lineNumber":181,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":182,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":183,"author":{"gitId":"J0shuaLeong"},"content":"### Viewing List of All Workouts: `viewworkouts`","lastModifiedDate":"2023-10-19"},{"lineNumber":184,"author":{"gitId":"J0shuaLeong"},"content":"Lists all the workouts.","lastModifiedDate":"2023-10-19"},{"lineNumber":185,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":186,"author":{"gitId":"J0shuaLeong"},"content":"Format: `viewworkouts`","lastModifiedDate":"2023-10-19"},{"lineNumber":187,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":188,"author":{"gitId":"J0shuaLeong"},"content":"**Example of usage:**","lastModifiedDate":"2023-10-19"},{"lineNumber":189,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":190,"author":{"gitId":"J0shuaLeong"},"content":"viewworkouts","lastModifiedDate":"2023-10-19"},{"lineNumber":191,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":192,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":193,"author":{"gitId":"J0shuaLeong"},"content":"**Expected output:**","lastModifiedDate":"2023-10-19"},{"lineNumber":194,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":195,"author":{"gitId":"J0shuaLeong"},"content":"These are the workouts you have done: ","lastModifiedDate":"2023-10-19"},{"lineNumber":196,"author":{"gitId":"J0shuaLeong"},"content":"1.Workout name: running","lastModifiedDate":"2023-10-19"},{"lineNumber":197,"author":{"gitId":"J0shuaLeong"},"content":"Calories: 400.0","lastModifiedDate":"2023-10-19"},{"lineNumber":198,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":199,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":200,"author":{"gitId":"J0shuaLeong"},"content":"### Delete a Workout: `deleteworkout`","lastModifiedDate":"2023-10-18"},{"lineNumber":201,"author":{"gitId":"J0shuaLeong"},"content":"Allows user to delete a workout they have added.","lastModifiedDate":"2023-10-13"},{"lineNumber":202,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":203,"author":{"gitId":"J0shuaLeong"},"content":"Format: `deleteworkout \u003cindex of workout\u003e`","lastModifiedDate":"2023-10-18"},{"lineNumber":204,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":205,"author":{"gitId":"J0shuaLeong"},"content":"Example of usage:","lastModifiedDate":"2023-10-13"},{"lineNumber":206,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":207,"author":{"gitId":"J0shuaLeong"},"content":"deleteworkout 1","lastModifiedDate":"2023-10-18"},{"lineNumber":208,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":209,"author":{"gitId":"J0shuaLeong"},"content":"Expected output:","lastModifiedDate":"2023-10-13"},{"lineNumber":210,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":211,"author":{"gitId":"J0shuaLeong"},"content":"I\u0027ve deleted workout 1","lastModifiedDate":"2023-10-18"},{"lineNumber":212,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":213,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":214,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-24"},{"lineNumber":215,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":216,"author":{"gitId":"J0shuaLeong"},"content":"**Q**: How do I edit my profile? ","lastModifiedDate":"2023-10-13"},{"lineNumber":217,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":218,"author":{"gitId":"J0shuaLeong"},"content":"**A**: Simply type editprofile, specify your height, weight and daily calories and hit enter. The App will update your details accordingly.","lastModifiedDate":"2023-10-19"},{"lineNumber":219,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":220,"author":{"gitId":"-"},"content":"## Command Summary","lastModifiedDate":"2020-05-24"},{"lineNumber":221,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":222,"author":{"gitId":"J0shuaLeong"},"content":"* Help List `help`","lastModifiedDate":"2023-10-19"},{"lineNumber":223,"author":{"gitId":"J0shuaLeong"},"content":"* Exit Application `exit`","lastModifiedDate":"2023-10-19"},{"lineNumber":224,"author":{"gitId":"J0shuaLeong"},"content":"* Edit Profile `editprofile`","lastModifiedDate":"2023-10-19"},{"lineNumber":225,"author":{"gitId":"J0shuaLeong"},"content":"* View profile `viewprofile`","lastModifiedDate":"2023-10-19"},{"lineNumber":226,"author":{"gitId":"J0shuaLeong"},"content":"* Check BMI `bmi`","lastModifiedDate":"2023-10-20"},{"lineNumber":227,"author":{"gitId":"J0shuaLeong"},"content":"* Add Meal `addmeal`","lastModifiedDate":"2023-10-13"},{"lineNumber":228,"author":{"gitId":"J0shuaLeong"},"content":"* View all meals consumed `viewmeals`","lastModifiedDate":"2023-10-19"},{"lineNumber":229,"author":{"gitId":"J0shuaLeong"},"content":"* Delete Meal `deletemeal`","lastModifiedDate":"2023-10-13"},{"lineNumber":230,"author":{"gitId":"J0shuaLeong"},"content":"* Add Work `addworkout`","lastModifiedDate":"2023-10-19"},{"lineNumber":231,"author":{"gitId":"J0shuaLeong"},"content":"* View all workouts `viewworkouts`","lastModifiedDate":"2023-10-19"},{"lineNumber":232,"author":{"gitId":"J0shuaLeong"},"content":"* Delete Work `deleteworkout`","lastModifiedDate":"2023-10-19"},{"lineNumber":233,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"J0shuaLeong":202,"-":31}},{"path":"docs/team/joshua.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"J0shuaLeong"},"content":"# Joshua - Project Portfolio Page","lastModifiedDate":"2023-10-06"},{"lineNumber":2,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":3,"author":{"gitId":"J0shuaLeong"},"content":"## Overview","lastModifiedDate":"2023-10-06"},{"lineNumber":4,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-06"}],"authorContributionMap":{"J0shuaLeong":6}},{"path":"src/main/java/fittrack/FitTrack.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.Command;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.CommandResult;","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.ExitCommand;","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.parser.NegativeNumberException;","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.NumberFormatException;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.PatternMatchFailException;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.storage.Storage;","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" * Represents the main part of FitTrack.","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" * Referenced","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" * \u003ca href\u003d\"https://github.com/se-edu/addressbook-level2/blob/master/src/seedu/addressbook/Main.java\"\u003ehere\u003c/a\u003e","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" * to build main structure of this class.","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":"public class FitTrack {","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" private final UserProfile userProfile;","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"NgLixuanNixon"},"content":" private final MealList mealList;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" private final WorkoutList workoutList;","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" private final Ui ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":25,"author":{"gitId":"J0shuaLeong"},"content":" private final Storage storage;","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" private FitTrack() {","lastModifiedDate":"2023-10-09"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-10-09"},{"lineNumber":29,"author":{"gitId":"J0shuaLeong"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" userProfile \u003d new UserProfile();","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"NgLixuanNixon"},"content":" mealList \u003d new MealList();","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" workoutList \u003d new WorkoutList();","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":" * Main entry-point for the FitTrack application.","lastModifiedDate":"2023-10-09"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-09"},{"lineNumber":40,"author":{"gitId":"ICubE-"},"content":" new FitTrack().run();","lastModifiedDate":"2023-10-09"},{"lineNumber":41,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":42,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":43,"author":{"gitId":"ICubE-"},"content":" private void run() {","lastModifiedDate":"2023-10-09"},{"lineNumber":44,"author":{"gitId":"ICubE-"},"content":" start();","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"ICubE-"},"content":" loopCommandExecution();","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"ICubE-"},"content":" end();","lastModifiedDate":"2023-10-09"},{"lineNumber":47,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":48,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":49,"author":{"gitId":"ICubE-"},"content":" private void start() {","lastModifiedDate":"2023-10-09"},{"lineNumber":50,"author":{"gitId":"ICubE-"},"content":" ui.printWelcome();","lastModifiedDate":"2023-10-09"},{"lineNumber":51,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":52,"author":{"gitId":"ICubE-"},"content":" boolean isValidInput \u003d false;","lastModifiedDate":"2023-10-20"},{"lineNumber":53,"author":{"gitId":"ICubE-"},"content":" while (!isValidInput) {","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"ICubE-"},"content":" try {","lastModifiedDate":"2023-10-20"},{"lineNumber":55,"author":{"gitId":"J0shuaLeong"},"content":" profileSettings();","lastModifiedDate":"2023-10-13"},{"lineNumber":56,"author":{"gitId":"J0shuaLeong"},"content":" isValidInput \u003d true;","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"ICubE-"},"content":" } catch (PatternMatchFailException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"ICubE-"},"content":" System.out.println(\"Wrong format. Please enter h/\u003cheight\u003e w/\u003cweight\u003e l/\u003cdailyCalorieLimit\u003e\");","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"ICubE-"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"ICubE-"},"content":" System.out.println(\"Please enter numbers for height, weight, and daily calorie limit.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"J0shuaLeong"},"content":" } catch (NegativeNumberException e) {","lastModifiedDate":"2023-10-20"},{"lineNumber":62,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(\"Please enter a number greater than 0\");","lastModifiedDate":"2023-10-20"},{"lineNumber":63,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":64,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":65,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":66,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":67,"author":{"gitId":"ICubE-"},"content":" private void loopCommandExecution() {","lastModifiedDate":"2023-10-09"},{"lineNumber":68,"author":{"gitId":"ICubE-"},"content":" Command command;","lastModifiedDate":"2023-10-09"},{"lineNumber":69,"author":{"gitId":"ICubE-"},"content":" do {","lastModifiedDate":"2023-10-09"},{"lineNumber":70,"author":{"gitId":"ICubE-"},"content":" String userCommandLine \u003d ui.scanCommandLine();","lastModifiedDate":"2023-10-09"},{"lineNumber":71,"author":{"gitId":"ICubE-"},"content":" command \u003d new CommandParser().parseCommand(userCommandLine);","lastModifiedDate":"2023-10-09"},{"lineNumber":72,"author":{"gitId":"ICubE-"},"content":" CommandResult commandResult \u003d executeCommand(command);","lastModifiedDate":"2023-10-09"},{"lineNumber":73,"author":{"gitId":"ICubE-"},"content":" ui.printCommandResult(commandResult);","lastModifiedDate":"2023-10-09"},{"lineNumber":74,"author":{"gitId":"ICubE-"},"content":" } while (!ExitCommand.isExit(command));","lastModifiedDate":"2023-10-09"},{"lineNumber":75,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":76,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":77,"author":{"gitId":"ICubE-"},"content":" private CommandResult executeCommand(Command command) {","lastModifiedDate":"2023-10-09"},{"lineNumber":78,"author":{"gitId":"J0shuaLeong"},"content":" command.setData(userProfile, mealList, workoutList, storage);","lastModifiedDate":"2023-10-22"},{"lineNumber":79,"author":{"gitId":"ICubE-"},"content":" return command.execute();","lastModifiedDate":"2023-10-09"},{"lineNumber":80,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":81,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":82,"author":{"gitId":"J0shuaLeong"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":83,"author":{"gitId":"J0shuaLeong"},"content":" * Gets user profile details when program starts.","lastModifiedDate":"2023-10-13"},{"lineNumber":84,"author":{"gitId":"J0shuaLeong"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"J0shuaLeong"},"content":" * @throws PatternMatchFailException if regex match fails","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"J0shuaLeong"},"content":" * @throws NumberFormatException if one of arguments is not double","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"J0shuaLeong"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":88,"author":{"gitId":"J0shuaLeong"},"content":" private void profileSettings()","lastModifiedDate":"2023-10-20"},{"lineNumber":89,"author":{"gitId":"J0shuaLeong"},"content":" throws PatternMatchFailException, NumberFormatException, NegativeNumberException {","lastModifiedDate":"2023-10-20"},{"lineNumber":90,"author":{"gitId":"ICubE-"},"content":" System.out.println(","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"ICubE-"},"content":" \"Please enter your height (in cm), weight (in kg), and daily calorie limit (in kcal):\"","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"ICubE-"},"content":" );","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"ICubE-"},"content":" String input \u003d ui.scanNextLine();","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"J0shuaLeong"},"content":" assert (input !\u003d null) : \"Profile cannot be null\";","lastModifiedDate":"2023-10-19"},{"lineNumber":96,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"ICubE-"},"content":" UserProfile profile \u003d new CommandParser().parseProfile(input);","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"ICubE-"},"content":" userProfile.setHeight(profile.getHeight());","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"ICubE-"},"content":" userProfile.setWeight(profile.getWeight());","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"ICubE-"},"content":" userProfile.setDailyCalorieLimit(profile.getDailyCalorieLimit());","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":102,"author":{"gitId":"ICubE-"},"content":" ui.printProfileDetails(userProfile);","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":104,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":105,"author":{"gitId":"ICubE-"},"content":" private void end() {","lastModifiedDate":"2023-10-09"},{"lineNumber":106,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":107,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"NgLixuanNixon":3,"J0shuaLeong":25,"ICubE-":79}},{"path":"src/main/java/fittrack/MealList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.data.Meal;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"NgLixuanNixon"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"public class MealList {","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" private ArrayList\u003cMeal\u003e mealList;","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"NgLixuanNixon"},"content":" public MealList() {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"NgLixuanNixon"},"content":" mealList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"J0shuaLeong"},"content":" // For loading of file contents into meal list","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":" //TODO Load file content into meal list","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":" public MealList(ArrayList\u003cMeal\u003e mealList) {","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":" this.mealList \u003d mealList;","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"J0shuaLeong"},"content":" public ArrayList\u003cMeal\u003e getMealList() {","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"J0shuaLeong"},"content":" return this.mealList;","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" public void addToList(Meal newMeal) {","lastModifiedDate":"2023-10-21"},{"lineNumber":26,"author":{"gitId":"NgLixuanNixon"},"content":" mealList.add(newMeal);","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" public void deleteMeal(int mealIndex) {","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"NgLixuanNixon"},"content":" mealList.remove((mealIndex - 1));","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"NgLixuanNixon"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"NgLixuanNixon"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"NgLixuanNixon"},"content":" int counter \u003d 1;","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"NgLixuanNixon"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"NgLixuanNixon"},"content":" for (Meal meal : mealList) {","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"NgLixuanNixon"},"content":" output.append(counter).append(\".\").append(meal.toString()).append(\"\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"NgLixuanNixon"},"content":" counter +\u003d 1;","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"NgLixuanNixon"},"content":" return output.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"NgLixuanNixon"},"content":" public Meal getMeal(int mealIndex) {","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"NgLixuanNixon"},"content":" return mealList.get(mealIndex - 1);","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"NgLixuanNixon":28,"J0shuaLeong":10,"ICubE-":9}},{"path":"src/main/java/fittrack/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.CommandResult;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" * Represents the user interface of FitTrack.","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":"public class Ui {","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"J0shuaLeong"},"content":" private static final String LOGO \u003d \"___________.__ __ ___________ __\\n\"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"J0shuaLeong"},"content":" + \"\\\\_ _____/|__|/ |\\\\__ ___/___________ ____ | | __\\n\"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"J0shuaLeong"},"content":" + \" | __) | \\\\ __\\\\| | \\\\_ __ \\\\__ \\\\ _/ ___\\\\| |/ /\\n\"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":" + \" | \\\\ | || | | | | | \\\\/ __ \\\\ \\\\___| \u003c\\n\"","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"J0shuaLeong"},"content":" + \" \\\\___ / |__||__| |____| |__| (____ /\\\\___ \u003e__|_ \\\\\";","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":" private static final String LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" private final Scanner in;","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" * Constructs UI of FitTrack.","lastModifiedDate":"2023-10-09"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" public Ui() {","lastModifiedDate":"2023-10-09"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" in \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-09"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" * Scans a line from the user input.","lastModifiedDate":"2023-10-09"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" * @return user input as a line of string","lastModifiedDate":"2023-10-09"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":34,"author":{"gitId":"J0shuaLeong"},"content":" public String scanNextLine() {","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" return in.nextLine();","lastModifiedDate":"2023-10-09"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" * Scans a command line from the user input.","lastModifiedDate":"2023-10-09"},{"lineNumber":40,"author":{"gitId":"ICubE-"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":41,"author":{"gitId":"ICubE-"},"content":" * @return command line as a line of string","lastModifiedDate":"2023-10-09"},{"lineNumber":42,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":43,"author":{"gitId":"ICubE-"},"content":" public String scanCommandLine() {","lastModifiedDate":"2023-10-09"},{"lineNumber":44,"author":{"gitId":"ICubE-"},"content":" return scanNextLine();","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":47,"author":{"gitId":"ICubE-"},"content":" public void printBlankLine() {","lastModifiedDate":"2023-10-10"},{"lineNumber":48,"author":{"gitId":"ICubE-"},"content":" System.out.println();","lastModifiedDate":"2023-10-10"},{"lineNumber":49,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":50,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":51,"author":{"gitId":"J0shuaLeong"},"content":" public void printLine() {","lastModifiedDate":"2023-10-19"},{"lineNumber":52,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"ICubE-"},"content":" public void printWelcome() {","lastModifiedDate":"2023-10-09"},{"lineNumber":56,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(\"Welcome to FitTrack!\");","lastModifiedDate":"2023-10-13"},{"lineNumber":57,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(LOGO);","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"J0shuaLeong"},"content":" printLine();","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":60,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":61,"author":{"gitId":"ICubE-"},"content":" public void printCommandResult(CommandResult commandResult) {","lastModifiedDate":"2023-10-09"},{"lineNumber":62,"author":{"gitId":"ICubE-"},"content":" System.out.println(commandResult.getFeedback());","lastModifiedDate":"2023-10-09"},{"lineNumber":63,"author":{"gitId":"ICubE-"},"content":" printBlankLine();","lastModifiedDate":"2023-10-10"},{"lineNumber":64,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":65,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":66,"author":{"gitId":"J0shuaLeong"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":67,"author":{"gitId":"J0shuaLeong"},"content":" * Prints the profile details of the user after user has","lastModifiedDate":"2023-10-19"},{"lineNumber":68,"author":{"gitId":"J0shuaLeong"},"content":" * entered details for the first time.","lastModifiedDate":"2023-10-19"},{"lineNumber":69,"author":{"gitId":"J0shuaLeong"},"content":" *","lastModifiedDate":"2023-10-13"},{"lineNumber":70,"author":{"gitId":"ICubE-"},"content":" * @param profile user profile","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"J0shuaLeong"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":72,"author":{"gitId":"ICubE-"},"content":" public void printProfileDetails(UserProfile profile) {","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"ICubE-"},"content":" System.out.println(\"Here are your profile settings.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(\"Height: \" + profile.toString());","lastModifiedDate":"2023-10-20"},{"lineNumber":75,"author":{"gitId":"J0shuaLeong"},"content":" printLine();","lastModifiedDate":"2023-10-19"},{"lineNumber":76,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":77,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"J0shuaLeong":25,"ICubE-":52}},{"path":"src/main/java/fittrack/UserProfile.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"J0shuaLeong"},"content":"import java.text.DecimalFormat;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.data.Height;","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.data.Weight;","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.data.Calories;","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"public class UserProfile {","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" private final DecimalFormat df \u003d new DecimalFormat(\"0.00\");","lastModifiedDate":"2023-10-20"},{"lineNumber":10,"author":{"gitId":"J0shuaLeong"},"content":" private Height height;","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"J0shuaLeong"},"content":" private Weight weight;","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"J0shuaLeong"},"content":" private Calories dailyCalorieLimit;","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" private double bmi;","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" public UserProfile() {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" this(new Height(1), new Weight(0), new Calories(0));","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":" public UserProfile(Height height, Weight weight, Calories dailyCalorieLimit) {","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" this.height \u003d height;","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" this.weight \u003d weight;","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" this.dailyCalorieLimit \u003d dailyCalorieLimit;","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" updateBmi();","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"J0shuaLeong"},"content":" public Height getHeight() {","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" return height;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"J0shuaLeong"},"content":" public void setHeight(Height height) {","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"J0shuaLeong"},"content":" this.height \u003d height;","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" updateBmi();","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"J0shuaLeong"},"content":" public Weight getWeight() {","lastModifiedDate":"2023-10-20"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" return weight;","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"J0shuaLeong"},"content":" public void setWeight(Weight weight) {","lastModifiedDate":"2023-10-20"},{"lineNumber":40,"author":{"gitId":"J0shuaLeong"},"content":" this.weight \u003d weight;","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"ICubE-"},"content":" updateBmi();","lastModifiedDate":"2023-10-21"},{"lineNumber":42,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":43,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"J0shuaLeong"},"content":" public Calories getDailyCalorieLimit() {","lastModifiedDate":"2023-10-20"},{"lineNumber":45,"author":{"gitId":"ICubE-"},"content":" return dailyCalorieLimit;","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"J0shuaLeong"},"content":" public void setDailyCalorieLimit(Calories dailyCalorieLimit) {","lastModifiedDate":"2023-10-20"},{"lineNumber":49,"author":{"gitId":"ICubE-"},"content":" this.dailyCalorieLimit \u003d dailyCalorieLimit;","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"ICubE-"},"content":" public double getBmi() {","lastModifiedDate":"2023-10-20"},{"lineNumber":53,"author":{"gitId":"ICubE-"},"content":" return bmi;","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":55,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":56,"author":{"gitId":"ICubE-"},"content":" private void updateBmi() {","lastModifiedDate":"2023-10-21"},{"lineNumber":57,"author":{"gitId":"ICubE-"},"content":" this.bmi \u003d calculateBmi(height, weight);","lastModifiedDate":"2023-10-21"},{"lineNumber":58,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":59,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":60,"author":{"gitId":"ICubE-"},"content":" public double calculateBmi(Height height, Weight weight) {","lastModifiedDate":"2023-10-21"},{"lineNumber":61,"author":{"gitId":"ICubE-"},"content":" assert (height !\u003d null \u0026\u0026 height.value \u003e 0 \u0026\u0026 weight !\u003d null);","lastModifiedDate":"2023-10-21"},{"lineNumber":62,"author":{"gitId":"ICubE-"},"content":" double heightInMetres \u003d height.value / 100;","lastModifiedDate":"2023-10-21"},{"lineNumber":63,"author":{"gitId":"ICubE-"},"content":" return weight.value / heightInMetres / heightInMetres;","lastModifiedDate":"2023-10-21"},{"lineNumber":64,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":65,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"ICubE-"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"J0shuaLeong"},"content":" return \"Height: \" + height.toString() + \"\\n\" +","lastModifiedDate":"2023-10-20"},{"lineNumber":68,"author":{"gitId":"J0shuaLeong"},"content":" \"Weight: \" + weight.toString() + \"\\n\" +","lastModifiedDate":"2023-10-20"},{"lineNumber":69,"author":{"gitId":"J0shuaLeong"},"content":" \"Daily calorie limit: \" + dailyCalorieLimit.toString() + \"\\n\" +","lastModifiedDate":"2023-10-20"},{"lineNumber":70,"author":{"gitId":"ICubE-"},"content":" \"BMI: \" + df.format(bmi);","lastModifiedDate":"2023-10-21"},{"lineNumber":71,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"J0shuaLeong":28,"ICubE-":44}},{"path":"src/main/java/fittrack/WorkoutList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.data.Workout;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"farissirraj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"public class WorkoutList {","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"marklin2234"},"content":" private int workoutListSize \u003d 0;","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" private ArrayList\u003cWorkout\u003e workoutList;","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"farissirraj"},"content":" public WorkoutList() {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"farissirraj"},"content":" workoutList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"J0shuaLeong"},"content":" public WorkoutList(ArrayList\u003cWorkout\u003e workoutList) {","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":" this.workoutList \u003d workoutList;","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":" public ArrayList\u003cWorkout\u003e getWorkoutList() {","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"J0shuaLeong"},"content":" return this.workoutList;","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" public void addToList(Workout newWorkout) {","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"farissirraj"},"content":" workoutList.add(newWorkout);","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"marklin2234"},"content":" workoutListSize++;","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" public void deleteWorkout(int workoutIndex) {","lastModifiedDate":"2023-10-21"},{"lineNumber":29,"author":{"gitId":"farissirraj"},"content":" workoutList.remove((workoutIndex - 1));","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"marklin2234"},"content":" workoutListSize--;","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"marklin2234"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"marklin2234"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"marklin2234"},"content":" public int getWorkoutListSize() {","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"marklin2234"},"content":" return workoutListSize;","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"farissirraj"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"farissirraj"},"content":" public String toString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"farissirraj"},"content":" int counter \u003d 1;","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"farissirraj"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"farissirraj"},"content":" for (Workout workout : workoutList) {","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"farissirraj"},"content":" output.append(counter).append(\".\").append(workout.toString()).append(\"\\n\");","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"farissirraj"},"content":" counter +\u003d 1;","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"farissirraj"},"content":" return output.toString();","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"farissirraj"},"content":" public Workout getWorkout(int workoutIndex) {","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"farissirraj"},"content":" return workoutList.get(workoutIndex - 1);","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"J0shuaLeong":8,"ICubE-":9,"marklin2234":7,"farissirraj":28}},{"path":"src/main/java/fittrack/command/AddMealCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.data.Meal;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"NgLixuanNixon"},"content":"import fittrack.parser.NumberFormatException;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"NgLixuanNixon"},"content":"import fittrack.parser.PatternMatchFailException;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"public class AddMealCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" public static final String COMMAND_WORD \u003d \"addmeal\";","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"NgLixuanNixon"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" String.format(\"`%s` adds your daily meal data to the list.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" private static final String USAGE \u003d String.format(","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" \"Type `%s \u003cMEAL_NAME\u003e c/\u003cCALORIES\u003e` to add today\u0027s meal.\\n\" +","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" \"Type `%s \u003cMEAL_NAME\u003e c/\u003cCALORIES\u003e d/\u003cDATE\u003e` to add a meal.\\n\" +","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" \"You should type \u003cDATE\u003e in format of `yyyy-MM-dd`.\",","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" COMMAND_WORD, COMMAND_WORD","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" );","lastModifiedDate":"2023-10-21"},{"lineNumber":18,"author":{"gitId":"NgLixuanNixon"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" private Meal newMeal;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-09"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" mealList.addToList(newMeal);","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"NgLixuanNixon"},"content":" return new CommandResult(\"I\u0027ve added the following meal:\" + \"\\n\" + newMeal.toString());","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"NgLixuanNixon"},"content":" public void setArguments(String args, CommandParser parser)","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" throws PatternMatchFailException, NumberFormatException {","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" newMeal \u003d parser.parseMeal(args);","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-10"},{"lineNumber":36,"author":{"gitId":"NgLixuanNixon"},"content":" return HELP;","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"NgLixuanNixon":9,"ICubE-":29}},{"path":"src/main/java/fittrack/command/AddWorkoutCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.data.Workout;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.NumberFormatException;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.PatternMatchFailException;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"public class AddWorkoutCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" public static final String COMMAND_WORD \u003d \"addworkout\";","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"farissirraj"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" String.format(\"`%s` adds your daily workout data to the list.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" private static final String USAGE \u003d String.format(","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" \"Type `%s \u003cWORKOUT_NAME\u003e c/\u003cCALORIES\u003e` to add today\u0027s workout.\\n\" +","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" \"Type `%s \u003cWORKOUT_NAME\u003e c/\u003cCALORIES\u003e d/\u003cDATE\u003e` to add a workout.\\n\" +","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" \"You should type \u003cDATE\u003e in format of `yyyy-MM-dd`.\",","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" COMMAND_WORD, COMMAND_WORD","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" );","lastModifiedDate":"2023-10-21"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"farissirraj"},"content":" private Workout newWorkout;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-09"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" workoutList.addToList(newWorkout);","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"farissirraj"},"content":" return new CommandResult(\"I\u0027ve added the following workout:\" + \"\\n\" + newWorkout.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" public void setArguments(String args, CommandParser parser)","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" throws PatternMatchFailException, NumberFormatException {","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" newWorkout \u003d parser.parseWorkout(args);","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-10"},{"lineNumber":36,"author":{"gitId":"farissirraj"},"content":" return HELP;","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"ICubE-":33,"farissirraj":5}},{"path":"src/main/java/fittrack/command/BmiCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"J0shuaLeong"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"public class BmiCommand extends Command {","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":" public static final String COMMAND_WORD \u003d \"bmi\";","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"J0shuaLeong"},"content":" String.format(\"`%s` calculates your current BMI.\", COMMAND_WORD);","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"J0shuaLeong"},"content":" private static final String USAGE \u003d","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" String.format(\"Type `%s` to view your BMI.\", COMMAND_WORD);","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"J0shuaLeong"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"J0shuaLeong"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" return new CommandResult(String.format(\"Your current BMI is %.2f\", userProfile.getBmi()));","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":" public void setArguments(String args, CommandParser parser) {","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"J0shuaLeong"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"J0shuaLeong"},"content":" return HELP;","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"J0shuaLeong"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"J0shuaLeong":24,"ICubE-":2}},{"path":"src/main/java/fittrack/command/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.MealList;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import fittrack.UserProfile;","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"import fittrack.WorkoutList;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.storage.Storage;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.ParseException;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":"public abstract class Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" protected UserProfile userProfile;","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" protected MealList mealList;","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" protected WorkoutList workoutList;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":" protected Storage storage;","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" /**","lastModifiedDate":"2023-10-10"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" * Set data of the command for execution.","lastModifiedDate":"2023-10-10"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" *","lastModifiedDate":"2023-10-10"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" * @param userProfile user profile","lastModifiedDate":"2023-10-10"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" * @param mealList meal list","lastModifiedDate":"2023-10-10"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" * @param workoutList work list","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-10"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":" public void setData(UserProfile userProfile, MealList mealList, WorkoutList workoutList, Storage storage) {","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" this.userProfile \u003d userProfile;","lastModifiedDate":"2023-10-09"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" this.mealList \u003d mealList;","lastModifiedDate":"2023-10-09"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" this.workoutList \u003d workoutList;","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"J0shuaLeong"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" /**","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" * Execute the command.","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" *","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" * @return result of the execution","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" public abstract CommandResult execute();","lastModifiedDate":"2023-10-09"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":" /**","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" * Apply arguments to its field using parser.","lastModifiedDate":"2023-10-10"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" *","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"ICubE-"},"content":" * @param args arguments as a string","lastModifiedDate":"2023-10-10"},{"lineNumber":41,"author":{"gitId":"ICubE-"},"content":" * @param parser parser","lastModifiedDate":"2023-10-10"},{"lineNumber":42,"author":{"gitId":"ICubE-"},"content":" * @throws ParseException if parse fails","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-10"},{"lineNumber":44,"author":{"gitId":"ICubE-"},"content":" public abstract void setArguments(String args, CommandParser parser) throws ParseException;","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":46,"author":{"gitId":"ICubE-"},"content":" /**","lastModifiedDate":"2023-10-10"},{"lineNumber":47,"author":{"gitId":"ICubE-"},"content":" * Returns help of the command.","lastModifiedDate":"2023-10-10"},{"lineNumber":48,"author":{"gitId":"ICubE-"},"content":" *","lastModifiedDate":"2023-10-10"},{"lineNumber":49,"author":{"gitId":"ICubE-"},"content":" * @return help","lastModifiedDate":"2023-10-10"},{"lineNumber":50,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-10"},{"lineNumber":51,"author":{"gitId":"ICubE-"},"content":" protected abstract String getHelp();","lastModifiedDate":"2023-10-10"},{"lineNumber":52,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"J0shuaLeong":4,"ICubE-":48}},{"path":"src/main/java/fittrack/command/CommandResult.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"public class CommandResult {","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":" private String feedback;","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":" public CommandResult(String feedback) {","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":" setFeedback(feedback);","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" public String getFeedback() {","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" return feedback;","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" public void setFeedback(String feedback) {","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" this.feedback \u003d feedback;","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"ICubE-":17}},{"path":"src/main/java/fittrack/command/DeleteMealCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.data.Meal;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"public class DeleteMealCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":" public static final String COMMAND_WORD \u003d \"deletemeal\";","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" String.format(\"`%s` deletes your daily meal data from the list.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" private static final String USAGE \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" String.format(\"Type `%s \u003cINDEX\u003e` to delete the meal by an index.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" private int mealIndex;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"NgLixuanNixon"},"content":" Meal toDelete \u003d mealList.getMeal(mealIndex);","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" mealList.deleteMeal(mealIndex);","lastModifiedDate":"2023-10-21"},{"lineNumber":20,"author":{"gitId":"NgLixuanNixon"},"content":" return new CommandResult(\"I\u0027ve deleted the following meal:\" + \"\\n\" + toDelete.toString());","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" public void setArguments(String args, CommandParser parser) {","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" // TODO: Try to make parse method in CommandParser and","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" // TODO: use the method by parser.parseXXX();","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" // TODO: Refer to CommandParser.parseProfile().","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" mealIndex \u003d Integer.parseInt(args);","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" return HELP;","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"NgLixuanNixon":2,"ICubE-":34}},{"path":"src/main/java/fittrack/command/DeleteWorkoutCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"farissirraj"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.data.Workout;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"marklin2234"},"content":"import fittrack.parser.ParseException;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"public class DeleteWorkoutCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" public static final String COMMAND_WORD \u003d \"deleteworkout\";","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" String.format(\"`%s` deletes your daily workout data from the list.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" private static final String USAGE \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" String.format(\"Type `%s \u003cINDEX\u003e` to delete the workout by an index.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" private int workoutIndex;","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"marklin2234"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"farissirraj"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"farissirraj"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" Workout toDelete \u003d workoutList.getWorkout(workoutIndex);","lastModifiedDate":"2023-10-21"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" workoutList.deleteWorkout(workoutIndex);","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" return new CommandResult(\"I\u0027ve deleted the following workout:\" + \"\\n\" + toDelete.toString());","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"marklin2234"},"content":" public void setArguments(String args, CommandParser parser) throws ParseException {","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"marklin2234"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" workoutIndex \u003d Integer.parseInt(args);","lastModifiedDate":"2023-10-21"},{"lineNumber":28,"author":{"gitId":"marklin2234"},"content":" if (workoutIndex \u003e workoutList.getWorkoutListSize()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"marklin2234"},"content":" throw new ParseException(\"Index given is larger than array.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"marklin2234"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"marklin2234"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"marklin2234"},"content":" throw new ParseException(\"Argument is not an integer.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"marklin2234"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" return HELP;","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"farissirraj"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"ICubE-":23,"marklin2234":10,"farissirraj":7}},{"path":"src/main/java/fittrack/command/EditProfileCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.UserProfile;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.parser.NegativeNumberException;","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.NumberFormatException;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.parser.PatternMatchFailException;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":"public class EditProfileCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" public static final String COMMAND_WORD \u003d \"editprofile\";","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" String.format(\"`%s` allows you to edit your profile.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" private static final String USAGE \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" String.format(\"Type `%s h/\u003cHEIGHT\u003e w/\u003cWEIGHT\u003e l/\u003cCALORIE_LIMIT\u003e` to edit.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" UserProfile newProfile;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" userProfile.setHeight(newProfile.getHeight());","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" userProfile.setWeight(newProfile.getWeight());","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" userProfile.setDailyCalorieLimit(newProfile.getDailyCalorieLimit());","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"J0shuaLeong"},"content":" return new CommandResult(\"Here is your updated profile:\\n\" + userProfile.toString());","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" public void setArguments(String args, CommandParser parser)","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"J0shuaLeong"},"content":" throws PatternMatchFailException, NumberFormatException, NegativeNumberException {","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" newProfile \u003d parser.parseProfile(args);","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"J0shuaLeong"},"content":" return HELP;","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"J0shuaLeong":6,"ICubE-":31}},{"path":"src/main/java/fittrack/command/ExitCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" public static final String COMMAND_WORD \u003d \"exit\";","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" private static final String DESCRIPTION \u003d \"`\" + COMMAND_WORD + \"` makes you to exit this program.\";","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" private static final String USAGE \u003d \"Type `exit` to exit.\";","lastModifiedDate":"2023-10-10"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"J0shuaLeong"},"content":" private static final String MESSAGE_SAVEFILE \u003d \"Saving data ...\";","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":" private static final String MESSAGE_EXIT \u003d \"Goodbye! Hope to see you soon!\";","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" public static boolean isExit(Command command) {","lastModifiedDate":"2023-10-09"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" return command instanceof ExitCommand;","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"J0shuaLeong"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":" storage.saveProfile(userProfile);","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"J0shuaLeong"},"content":" storage.saveMeals(mealList);","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"J0shuaLeong"},"content":" storage.saveWorkouts(workoutList);","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"J0shuaLeong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(e);","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"J0shuaLeong"},"content":" return new CommandResult(MESSAGE_SAVEFILE + \"\\n\" + MESSAGE_EXIT);","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" public void setArguments(String args, CommandParser parser) {","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" return HELP;","lastModifiedDate":"2023-10-10"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"J0shuaLeong":12,"ICubE-":28}},{"path":"src/main/java/fittrack/command/HelpCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"import static fittrack.command.InvalidCommand.MESSAGE_INVALID_COMMAND;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"import static fittrack.parser.CommandParser.ALL_COMMAND_WORDS;","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" public static final String COMMAND_WORD \u003d \"help\";","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" String.format(\"`%s` shows help message of the command.\", COMMAND_WORD);","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" private static final String KNOWN_COMMANDS \u003d \"Existing commands:\\n\" + ALL_COMMAND_WORDS;","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" static final String USAGE \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" String.format(\"Type `%s` or `%s \u003cCOMMAND\u003e` to view help.\", COMMAND_WORD, COMMAND_WORD);","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + KNOWN_COMMANDS + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" private String helpMessage;","lastModifiedDate":"2023-10-10"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" private Class\u003c? extends Command\u003e commandType;","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" return new CommandResult(helpMessage);","lastModifiedDate":"2023-10-10"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" public void setArguments(String args, CommandParser parser) {","lastModifiedDate":"2023-10-10"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" if (args.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" helpMessage \u003d HELP;","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" return;","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" String word \u003d parser.getFirstWord(args);","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" Command blankCommand \u003d parser.getBlankCommand(word);","lastModifiedDate":"2023-10-10"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" commandType \u003d blankCommand.getClass();","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" if (blankCommand instanceof InvalidCommand) {","lastModifiedDate":"2023-10-10"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" helpMessage \u003d String.format(MESSAGE_INVALID_COMMAND, word) + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"ICubE-"},"content":" return;","lastModifiedDate":"2023-10-10"},{"lineNumber":41,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":42,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":43,"author":{"gitId":"ICubE-"},"content":" helpMessage \u003d blankCommand.getHelp();","lastModifiedDate":"2023-10-10"},{"lineNumber":44,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":45,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":46,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":47,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-10"},{"lineNumber":48,"author":{"gitId":"ICubE-"},"content":" return HELP;","lastModifiedDate":"2023-10-10"},{"lineNumber":49,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":50,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"ICubE-"},"content":" public String getHelpMessage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"ICubE-"},"content":" return helpMessage;","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"ICubE-"},"content":" public Class\u003c? extends Command\u003e getCommandType() {","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"ICubE-"},"content":" return commandType;","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"ICubE-":58}},{"path":"src/main/java/fittrack/command/InvalidCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-10"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":" public static final String MESSAGE_INVALID_COMMAND \u003d \"`%s` is an invalid command.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" private String helpMessage;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-10"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" return new CommandResult(helpMessage);","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" public void setArguments(String inputLine, CommandParser parser) {","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" HelpCommand helpCommand \u003d new HelpCommand();","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" helpCommand.setArguments(inputLine, parser);","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" String message \u003d helpCommand.execute().getFeedback();","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" if (helpCommand.getCommandType() \u003d\u003d InvalidCommand.class) {","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" helpMessage \u003d message;","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" } else {","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" helpMessage \u003d String.format(MESSAGE_INVALID_COMMAND, inputLine) + \"\\n\" + message;","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" assert false;","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" throw new UnsupportedOperationException();","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"ICubE-":34}},{"path":"src/main/java/fittrack/command/SaveCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"J0shuaLeong"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":"public class SaveCommand extends Command {","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"J0shuaLeong"},"content":" public static final String COMMAND_WORD \u003d \"save\";","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"J0shuaLeong"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-20"},{"lineNumber":10,"author":{"gitId":"J0shuaLeong"},"content":" String.format(\"`%s` saves your profile, meals and workout data.\", COMMAND_WORD);","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"J0shuaLeong"},"content":" private static final String USAGE \u003d","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"J0shuaLeong"},"content":" String.format(\"Type `%s` to save your profile, meals and workout data.\", COMMAND_WORD);","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"J0shuaLeong"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"J0shuaLeong"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":" try {","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":" storage.saveProfile(userProfile);","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":" storage.saveMeals(mealList);","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"J0shuaLeong"},"content":" storage.saveWorkouts(workoutList);","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"J0shuaLeong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(e);","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"J0shuaLeong"},"content":" return new CommandResult(\"Your Profile settings and details has been saved!\");","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"J0shuaLeong"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"J0shuaLeong"},"content":" public void setArguments(String args, CommandParser parser) {","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"J0shuaLeong"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"J0shuaLeong"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-20"},{"lineNumber":33,"author":{"gitId":"J0shuaLeong"},"content":" return HELP;","lastModifiedDate":"2023-10-20"},{"lineNumber":34,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"J0shuaLeong"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"J0shuaLeong":35}},{"path":"src/main/java/fittrack/command/ViewMealsCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"public class ViewMealsCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":" public static final String COMMAND_WORD \u003d \"viewmeals\";","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" String.format(\"`%s` shows the list of all meals.\", COMMAND_WORD);","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" private static final String USAGE \u003d","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" String.format(\"Type `%s` to view the list of meals.\", COMMAND_WORD);","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" String feedback \u003d \"These are the meals you have consumed:\\n\" + mealList.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" return new CommandResult(feedback);","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" public void setArguments(String args, CommandParser parser) {","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" return HELP;","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"ICubE-":27}},{"path":"src/main/java/fittrack/command/ViewProfileCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"J0shuaLeong"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"public class ViewProfileCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":" public static final String COMMAND_WORD \u003d \"viewprofile\";","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"J0shuaLeong"},"content":" String.format(\"`%s` shows all profile details.\", COMMAND_WORD);","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"J0shuaLeong"},"content":" private static final String USAGE \u003d","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"J0shuaLeong"},"content":" String.format(\"Type `%s` to view your profile.\", COMMAND_WORD);","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"J0shuaLeong"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"J0shuaLeong"},"content":" // TODO: get profile details and make them to lines of strings.","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":" return new CommandResult(\"Your Profile:\\n\" + userProfile.toString());","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"J0shuaLeong"},"content":" public void setArguments(String args, CommandParser parser) {","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"J0shuaLeong"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"J0shuaLeong"},"content":" return HELP;","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"J0shuaLeong"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"J0shuaLeong":26,"ICubE-":1}},{"path":"src/main/java/fittrack/command/ViewWorkoutsCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"farissirraj"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"public class ViewWorkoutsCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":" public static final String COMMAND_WORD \u003d \"viewworkouts\";","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"farissirraj"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" String.format(\"`%s` shows the list of all workouts.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"farissirraj"},"content":" private static final String USAGE \u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" String.format(\"Type `%s` to view the list of your workouts.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"farissirraj"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"farissirraj"},"content":" * Execute the command","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"farissirraj"},"content":" * @return list of workouts","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"farissirraj"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"farissirraj"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"farissirraj"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"farissirraj"},"content":" String feedback \u003d \"These are the workouts you have done:\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"farissirraj"},"content":" workoutList.toString();","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"farissirraj"},"content":" return new CommandResult(feedback);","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" public void setArguments(String args, CommandParser parser) {","lastModifiedDate":"2023-10-10"},{"lineNumber":27,"author":{"gitId":"farissirraj"},"content":" return;","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"farissirraj"},"content":" return HELP;","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"farissirraj"},"content":"}","lastModifiedDate":"2023-10-09"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"ICubE-":16,"farissirraj":19}},{"path":"src/main/java/fittrack/data/Calories.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.data;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import java.util.Objects;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"public class Calories {","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":" public double value;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" public Calories(double calories) {","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" this.value \u003d calories;","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" return true;","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" if (o \u003d\u003d null || getClass() !\u003d o.getClass()) {","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" return false;","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" Calories calories1 \u003d (Calories) o;","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" return Double.compare(value, calories1.value) \u003d\u003d 0;","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" public int hashCode() {","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" return Objects.hash(value);","lastModifiedDate":"2023-10-21"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" public String toString() {","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" return value + \"kcal\";","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"ICubE-":33}},{"path":"src/main/java/fittrack/data/Date.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.data;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"import java.util.Locale;","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"import java.util.Objects;","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":"public class Date implements Comparable\u003cDate\u003e {","lastModifiedDate":"2023-10-20"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" private static final Locale LOCALE \u003d Locale.ENGLISH;","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" private final LocalDate localDate;","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" public Date(String date) throws DateTimeParseException {","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" this.localDate \u003d LocalDate.parse(date);","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" public Date(int year, int month, int day) {","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" this.localDate \u003d LocalDate.of(year, month, day);","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" public Date(LocalDate localDate) {","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" this.localDate \u003d localDate;","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" return true;","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" if (o \u003d\u003d null || getClass() !\u003d o.getClass()) {","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" return false;","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" Date date \u003d (Date) o;","lastModifiedDate":"2023-10-20"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" return Objects.equals(localDate, date.localDate);","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" public int hashCode() {","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" return Objects.hash(localDate);","lastModifiedDate":"2023-10-20"},{"lineNumber":40,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":41,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":43,"author":{"gitId":"ICubE-"},"content":" public String toString() {","lastModifiedDate":"2023-10-20"},{"lineNumber":44,"author":{"gitId":"ICubE-"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ISO_LOCAL_DATE.withLocale(LOCALE);","lastModifiedDate":"2023-10-20"},{"lineNumber":45,"author":{"gitId":"ICubE-"},"content":" return localDate.format(formatter);","lastModifiedDate":"2023-10-20"},{"lineNumber":46,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":47,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":48,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":49,"author":{"gitId":"ICubE-"},"content":" public int compareTo(Date o) {","lastModifiedDate":"2023-10-20"},{"lineNumber":50,"author":{"gitId":"ICubE-"},"content":" return this.localDate.compareTo(o.localDate);","lastModifiedDate":"2023-10-20"},{"lineNumber":51,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":52,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":53,"author":{"gitId":"ICubE-"},"content":" public static Date today() {","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"ICubE-"},"content":" return new Date(LocalDate.now());","lastModifiedDate":"2023-10-20"},{"lineNumber":55,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":56,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"ICubE-":56}},{"path":"src/main/java/fittrack/data/Height.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.data;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import java.util.Objects;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"public class Height {","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":" public double value;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" public Height(double height) {","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" this.value \u003d height;","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" return true;","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" if (o \u003d\u003d null || getClass() !\u003d o.getClass()) {","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" return false;","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" Height height1 \u003d (Height) o;","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" return Double.compare(value, height1.value) \u003d\u003d 0;","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" public int hashCode() {","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" return Objects.hash(value);","lastModifiedDate":"2023-10-21"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" public String toString() {","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" return value + \"cm\";","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"ICubE-":33}},{"path":"src/main/java/fittrack/data/Meal.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.data;","lastModifiedDate":"2023-10-21"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":3,"author":{"gitId":"NgLixuanNixon"},"content":"public class Meal {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":" private final String name;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":" private final Calories calories;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":" private final Date date;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" public Meal(String name, Calories calories, Date date) {","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" assert name !\u003d null \u0026\u0026 calories !\u003d null \u0026\u0026 date !\u003d null;","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"NgLixuanNixon"},"content":" this.calories \u003d calories;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":" public String formatToFile() {","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":" return String.format(\"M | %s | %s | %s\", name, calories, date);","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"NgLixuanNixon"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"NgLixuanNixon"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" return String.format(\"[M] %s (%s, %s)\", name, calories, date);","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"NgLixuanNixon"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NgLixuanNixon":9,"J0shuaLeong":4,"ICubE-":11}},{"path":"src/main/java/fittrack/data/Weight.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.data;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import java.util.Objects;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"public class Weight {","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":" public double value;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" public Weight(double weight) {","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" this.value \u003d weight;","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" return true;","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" if (o \u003d\u003d null || getClass() !\u003d o.getClass()) {","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" return false;","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" Weight weight1 \u003d (Weight) o;","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" return Double.compare(value, weight1.value) \u003d\u003d 0;","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" public int hashCode() {","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" return Objects.hash(value);","lastModifiedDate":"2023-10-21"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" public String toString() {","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" return value + \"kg\";","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"ICubE-":34}},{"path":"src/main/java/fittrack/data/Workout.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.data;","lastModifiedDate":"2023-10-21"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":3,"author":{"gitId":"farissirraj"},"content":"public class Workout {","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":" private final String name;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":" private final Calories calories;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":" private final Date date;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" public Workout(String name, Calories calories, Date date) {","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" assert name !\u003d null \u0026\u0026 calories !\u003d null \u0026\u0026 date !\u003d null;","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"farissirraj"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"farissirraj"},"content":" this.calories \u003d calories;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":" public String formatToFile() {","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":" return String.format(\"W | %s | %s | %s\", name, calories, date);","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"farissirraj"},"content":" @Override","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"farissirraj"},"content":" public String toString() {","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" return String.format(\"[W] %s (%s, %s)\", name, calories, date);","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"farissirraj"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"J0shuaLeong":4,"ICubE-":10,"farissirraj":10}},{"path":"src/main/java/fittrack/parser/CommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.parser;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.data.Meal;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import fittrack.UserProfile;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"import fittrack.data.Workout;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.data.Calories;","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"import fittrack.data.Date;","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.data.Height;","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"NgLixuanNixon"},"content":"import fittrack.command.AddMealCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.AddWorkoutCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"NgLixuanNixon"},"content":"import fittrack.command.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"NgLixuanNixon"},"content":"import fittrack.command.DeleteMealCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.DeleteWorkoutCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"NgLixuanNixon"},"content":"import fittrack.command.EditProfileCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"NgLixuanNixon"},"content":"import fittrack.command.ExitCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"NgLixuanNixon"},"content":"import fittrack.command.HelpCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"NgLixuanNixon"},"content":"import fittrack.command.InvalidCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.ViewMealsCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.ViewWorkoutsCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.command.ViewProfileCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.command.BmiCommand;","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.command.SaveCommand;","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.data.Weight;","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-21"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-09"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-09"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" * Represents the parser which parses commands.","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" * Referenced","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" * \u003ca href\u003d\"https://github.com/se-edu/addressbook-level2/blob/master/src/seedu/addressbook/parser/Parser.java\"\u003ehere\u003c/a\u003e","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" * to build main structure of this class.","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":"public class CommandParser {","lastModifiedDate":"2023-10-09"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":" // This constant has to be changed whenever any command is added.","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" public static final String ALL_COMMAND_WORDS \u003d \"help, exit, \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" \"editprofile, viewprofile, \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"ICubE-"},"content":" \"addmeal, deletemeal, viewmeals, \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"J0shuaLeong"},"content":" \"addworkout, deleteworkout, viewworkouts, bmi, save\";","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"ICubE-"},"content":" ","lastModifiedDate":"2023-10-10"},{"lineNumber":43,"author":{"gitId":"ICubE-"},"content":" private static final Pattern COMMAND_PATTERN \u003d Pattern.compile(","lastModifiedDate":"2023-10-10"},{"lineNumber":44,"author":{"gitId":"ICubE-"},"content":" \"(?\u003cword\u003e\\\\S+)(?\u003cargs\u003e.*)\"","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"ICubE-"},"content":" );","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"NgLixuanNixon"},"content":" private static final Pattern PROFILE_PATTERN \u003d Pattern.compile(","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"ICubE-"},"content":" \"h/(?\u003cheight\u003e\\\\S+)\\\\s+w/(?\u003cweight\u003e\\\\S+)\\\\s+l/(?\u003ccalLimit\u003e\\\\S+)\"","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"ICubE-"},"content":" );","lastModifiedDate":"2023-10-10"},{"lineNumber":49,"author":{"gitId":"ICubE-"},"content":" private static final Pattern MEAL_PATTERN \u003d Pattern.compile(","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"ICubE-"},"content":" \"(?\u003cname\u003e.+)\\\\s+c/(?\u003ccalories\u003e\\\\S+)(\\\\s+d/(?\u003cdate\u003e\\\\S+))?\"","lastModifiedDate":"2023-10-21"},{"lineNumber":51,"author":{"gitId":"ICubE-"},"content":" );","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"ICubE-"},"content":" private static final Pattern WORKOUT_PATTERN \u003d Pattern.compile(","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"ICubE-"},"content":" \"(?\u003cname\u003e.+)\\\\s+c/(?\u003ccalories\u003e\\\\S+)(\\\\s+d/(?\u003cdate\u003e\\\\S+))?\"","lastModifiedDate":"2023-10-21"},{"lineNumber":54,"author":{"gitId":"NgLixuanNixon"},"content":" );","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"ICubE-"},"content":" public Command parseCommand(String userCommandLine) {","lastModifiedDate":"2023-10-09"},{"lineNumber":57,"author":{"gitId":"ICubE-"},"content":" final Matcher matcher \u003d COMMAND_PATTERN.matcher(userCommandLine.strip());","lastModifiedDate":"2023-10-10"},{"lineNumber":58,"author":{"gitId":"ICubE-"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-09"},{"lineNumber":59,"author":{"gitId":"ICubE-"},"content":" return getInvalidCommand(userCommandLine);","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":61,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":62,"author":{"gitId":"ICubE-"},"content":" final String word \u003d matcher.group(\"word\").strip();","lastModifiedDate":"2023-10-10"},{"lineNumber":63,"author":{"gitId":"ICubE-"},"content":" final String args \u003d matcher.group(\"args\").strip();","lastModifiedDate":"2023-10-10"},{"lineNumber":64,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":65,"author":{"gitId":"ICubE-"},"content":" Command command \u003d getBlankCommand(word);","lastModifiedDate":"2023-10-10"},{"lineNumber":66,"author":{"gitId":"ICubE-"},"content":" if (command instanceof InvalidCommand) {","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"ICubE-"},"content":" return getInvalidCommand(userCommandLine);","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"ICubE-"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"ICubE-"},"content":" command.setArguments(args, this);","lastModifiedDate":"2023-10-10"},{"lineNumber":71,"author":{"gitId":"ICubE-"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"marklin2234"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"ICubE-"},"content":" return getInvalidCommand(userCommandLine);","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"ICubE-"},"content":" return command;","lastModifiedDate":"2023-10-10"},{"lineNumber":77,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":78,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":79,"author":{"gitId":"ICubE-"},"content":" public Command getBlankCommand(String word) {","lastModifiedDate":"2023-10-10"},{"lineNumber":80,"author":{"gitId":"ICubE-"},"content":" switch (word) {","lastModifiedDate":"2023-10-09"},{"lineNumber":81,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":82,"author":{"gitId":"ICubE-"},"content":" case HelpCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-10"},{"lineNumber":83,"author":{"gitId":"ICubE-"},"content":" return new HelpCommand();","lastModifiedDate":"2023-10-10"},{"lineNumber":84,"author":{"gitId":"ICubE-"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-09"},{"lineNumber":85,"author":{"gitId":"ICubE-"},"content":" return new ExitCommand();","lastModifiedDate":"2023-10-09"},{"lineNumber":86,"author":{"gitId":"ICubE-"},"content":" case EditProfileCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-09"},{"lineNumber":87,"author":{"gitId":"ICubE-"},"content":" return new EditProfileCommand();","lastModifiedDate":"2023-10-09"},{"lineNumber":88,"author":{"gitId":"ICubE-"},"content":" case ViewProfileCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"ICubE-"},"content":" return new ViewProfileCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"ICubE-"},"content":" case AddMealCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-09"},{"lineNumber":91,"author":{"gitId":"ICubE-"},"content":" return new AddMealCommand();","lastModifiedDate":"2023-10-09"},{"lineNumber":92,"author":{"gitId":"ICubE-"},"content":" case DeleteMealCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-09"},{"lineNumber":93,"author":{"gitId":"ICubE-"},"content":" return new DeleteMealCommand();","lastModifiedDate":"2023-10-09"},{"lineNumber":94,"author":{"gitId":"ICubE-"},"content":" case ViewMealsCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"ICubE-"},"content":" return new ViewMealsCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"ICubE-"},"content":" case AddWorkoutCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"ICubE-"},"content":" return new AddWorkoutCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"ICubE-"},"content":" case DeleteWorkoutCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"ICubE-"},"content":" return new DeleteWorkoutCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"ICubE-"},"content":" case ViewWorkoutsCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"ICubE-"},"content":" return new ViewWorkoutsCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"J0shuaLeong"},"content":" case BmiCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-19"},{"lineNumber":103,"author":{"gitId":"J0shuaLeong"},"content":" return new BmiCommand();","lastModifiedDate":"2023-10-19"},{"lineNumber":104,"author":{"gitId":"J0shuaLeong"},"content":" case SaveCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-20"},{"lineNumber":105,"author":{"gitId":"J0shuaLeong"},"content":" return new SaveCommand();","lastModifiedDate":"2023-10-20"},{"lineNumber":106,"author":{"gitId":"ICubE-"},"content":" default:","lastModifiedDate":"2023-10-09"},{"lineNumber":107,"author":{"gitId":"ICubE-"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-10-18"},{"lineNumber":108,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":110,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"ICubE-"},"content":" private InvalidCommand getInvalidCommand(String userCommandLine) {","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"ICubE-"},"content":" InvalidCommand invalidCommand \u003d new InvalidCommand();","lastModifiedDate":"2023-10-18"},{"lineNumber":113,"author":{"gitId":"ICubE-"},"content":" invalidCommand.setArguments(userCommandLine, this);","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"ICubE-"},"content":" return invalidCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":116,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":117,"author":{"gitId":"ICubE-"},"content":" /**","lastModifiedDate":"2023-10-10"},{"lineNumber":118,"author":{"gitId":"J0shuaLeong"},"content":" * Parses user profile, format of `h/(HEIGHT) w/(WEIGHT) l/(CALORIES)`.","lastModifiedDate":"2023-10-20"},{"lineNumber":119,"author":{"gitId":"ICubE-"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":120,"author":{"gitId":"ICubE-"},"content":" * @param profile profile as a string","lastModifiedDate":"2023-10-10"},{"lineNumber":121,"author":{"gitId":"ICubE-"},"content":" * @return height and weight as a double array","lastModifiedDate":"2023-10-10"},{"lineNumber":122,"author":{"gitId":"ICubE-"},"content":" * @throws PatternMatchFailException if regex match fails","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"ICubE-"},"content":" * @throws NumberFormatException if one of arguments is not double","lastModifiedDate":"2023-10-10"},{"lineNumber":124,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-10"},{"lineNumber":125,"author":{"gitId":"J0shuaLeong"},"content":" public UserProfile parseProfile(String profile)","lastModifiedDate":"2023-10-20"},{"lineNumber":126,"author":{"gitId":"J0shuaLeong"},"content":" throws PatternMatchFailException, NumberFormatException, NegativeNumberException {","lastModifiedDate":"2023-10-20"},{"lineNumber":127,"author":{"gitId":"NgLixuanNixon"},"content":" final Matcher matcher \u003d PROFILE_PATTERN.matcher(profile);","lastModifiedDate":"2023-10-16"},{"lineNumber":128,"author":{"gitId":"NgLixuanNixon"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":129,"author":{"gitId":"ICubE-"},"content":" throw new PatternMatchFailException();","lastModifiedDate":"2023-10-16"},{"lineNumber":130,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":131,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":132,"author":{"gitId":"ICubE-"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":133,"author":{"gitId":"J0shuaLeong"},"content":" final double height \u003d Double.parseDouble(matcher.group(\"height\"));","lastModifiedDate":"2023-10-20"},{"lineNumber":134,"author":{"gitId":"J0shuaLeong"},"content":" final double weight \u003d Double.parseDouble(matcher.group(\"weight\"));","lastModifiedDate":"2023-10-20"},{"lineNumber":135,"author":{"gitId":"J0shuaLeong"},"content":" final double dailyCalorieLimit \u003d Double.parseDouble(matcher.group(\"calLimit\"));","lastModifiedDate":"2023-10-20"},{"lineNumber":136,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":137,"author":{"gitId":"J0shuaLeong"},"content":" // Height, weight and calories cannot be negative. Throw exception if it happens","lastModifiedDate":"2023-10-20"},{"lineNumber":138,"author":{"gitId":"J0shuaLeong"},"content":" if (height \u003c 0 || weight \u003c 0 || dailyCalorieLimit \u003c 0) {","lastModifiedDate":"2023-10-20"},{"lineNumber":139,"author":{"gitId":"J0shuaLeong"},"content":" throw new NegativeNumberException();","lastModifiedDate":"2023-10-20"},{"lineNumber":140,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":141,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":142,"author":{"gitId":"J0shuaLeong"},"content":" Height heightData \u003d new Height(height);","lastModifiedDate":"2023-10-20"},{"lineNumber":143,"author":{"gitId":"J0shuaLeong"},"content":" Weight weightData \u003d new Weight(weight);","lastModifiedDate":"2023-10-20"},{"lineNumber":144,"author":{"gitId":"J0shuaLeong"},"content":" Calories caloriesData \u003d new Calories(dailyCalorieLimit);","lastModifiedDate":"2023-10-20"},{"lineNumber":145,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":146,"author":{"gitId":"J0shuaLeong"},"content":" return new UserProfile(heightData, weightData, caloriesData);","lastModifiedDate":"2023-10-20"},{"lineNumber":147,"author":{"gitId":"ICubE-"},"content":" } catch (java.lang.NumberFormatException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":148,"author":{"gitId":"ICubE-"},"content":" throw new NumberFormatException();","lastModifiedDate":"2023-10-16"},{"lineNumber":149,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":150,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":151,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":152,"author":{"gitId":"ICubE-"},"content":" public Meal parseMeal(String meal) throws PatternMatchFailException, NumberFormatException {","lastModifiedDate":"2023-10-18"},{"lineNumber":153,"author":{"gitId":"ICubE-"},"content":" final Matcher matcher \u003d MEAL_PATTERN.matcher(meal);","lastModifiedDate":"2023-10-18"},{"lineNumber":154,"author":{"gitId":"NgLixuanNixon"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":155,"author":{"gitId":"NgLixuanNixon"},"content":" throw new PatternMatchFailException();","lastModifiedDate":"2023-10-18"},{"lineNumber":156,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":157,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":158,"author":{"gitId":"NgLixuanNixon"},"content":" final String name \u003d matcher.group(\"name\");","lastModifiedDate":"2023-10-18"},{"lineNumber":159,"author":{"gitId":"NgLixuanNixon"},"content":" final String calories \u003d matcher.group(\"calories\");","lastModifiedDate":"2023-10-18"},{"lineNumber":160,"author":{"gitId":"ICubE-"},"content":" final String date \u003d matcher.group(\"date\");","lastModifiedDate":"2023-10-21"},{"lineNumber":161,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":162,"author":{"gitId":"NgLixuanNixon"},"content":" try {","lastModifiedDate":"2023-10-18"},{"lineNumber":163,"author":{"gitId":"ICubE-"},"content":" double caloriesInDouble \u003d Double.parseDouble(calories);","lastModifiedDate":"2023-10-21"},{"lineNumber":164,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":165,"author":{"gitId":"ICubE-"},"content":" if (date \u003d\u003d null) {","lastModifiedDate":"2023-10-21"},{"lineNumber":166,"author":{"gitId":"ICubE-"},"content":" return new Meal(name, new Calories(caloriesInDouble), Date.today());","lastModifiedDate":"2023-10-21"},{"lineNumber":167,"author":{"gitId":"ICubE-"},"content":" } else {","lastModifiedDate":"2023-10-21"},{"lineNumber":168,"author":{"gitId":"ICubE-"},"content":" return new Meal(name, new Calories(caloriesInDouble), new Date(date));","lastModifiedDate":"2023-10-21"},{"lineNumber":169,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":170,"author":{"gitId":"NgLixuanNixon"},"content":" } catch (java.lang.NumberFormatException e) {","lastModifiedDate":"2023-10-18"},{"lineNumber":171,"author":{"gitId":"NgLixuanNixon"},"content":" throw new NumberFormatException();","lastModifiedDate":"2023-10-18"},{"lineNumber":172,"author":{"gitId":"ICubE-"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-21"},{"lineNumber":173,"author":{"gitId":"ICubE-"},"content":" throw new PatternMatchFailException();","lastModifiedDate":"2023-10-21"},{"lineNumber":174,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":175,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":176,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":177,"author":{"gitId":"ICubE-"},"content":" public Workout parseWorkout(String workout) throws PatternMatchFailException, NumberFormatException {","lastModifiedDate":"2023-10-18"},{"lineNumber":178,"author":{"gitId":"ICubE-"},"content":" final Matcher matcher \u003d WORKOUT_PATTERN.matcher(workout);","lastModifiedDate":"2023-10-18"},{"lineNumber":179,"author":{"gitId":"ICubE-"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":180,"author":{"gitId":"ICubE-"},"content":" throw new PatternMatchFailException();","lastModifiedDate":"2023-10-18"},{"lineNumber":181,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":182,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":183,"author":{"gitId":"ICubE-"},"content":" final String name \u003d matcher.group(\"name\");","lastModifiedDate":"2023-10-18"},{"lineNumber":184,"author":{"gitId":"ICubE-"},"content":" final String calories \u003d matcher.group(\"calories\");","lastModifiedDate":"2023-10-18"},{"lineNumber":185,"author":{"gitId":"ICubE-"},"content":" final String date \u003d matcher.group(\"date\");","lastModifiedDate":"2023-10-21"},{"lineNumber":186,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":187,"author":{"gitId":"ICubE-"},"content":" try {","lastModifiedDate":"2023-10-18"},{"lineNumber":188,"author":{"gitId":"ICubE-"},"content":" double caloriesInDouble \u003d Double.parseDouble(calories);","lastModifiedDate":"2023-10-21"},{"lineNumber":189,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":190,"author":{"gitId":"ICubE-"},"content":" if (date \u003d\u003d null) {","lastModifiedDate":"2023-10-21"},{"lineNumber":191,"author":{"gitId":"ICubE-"},"content":" return new Workout(name, new Calories(caloriesInDouble), Date.today());","lastModifiedDate":"2023-10-21"},{"lineNumber":192,"author":{"gitId":"ICubE-"},"content":" } else {","lastModifiedDate":"2023-10-21"},{"lineNumber":193,"author":{"gitId":"ICubE-"},"content":" return new Workout(name, new Calories(caloriesInDouble), new Date(date));","lastModifiedDate":"2023-10-21"},{"lineNumber":194,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":195,"author":{"gitId":"ICubE-"},"content":" } catch (java.lang.NumberFormatException e) {","lastModifiedDate":"2023-10-18"},{"lineNumber":196,"author":{"gitId":"ICubE-"},"content":" throw new NumberFormatException();","lastModifiedDate":"2023-10-18"},{"lineNumber":197,"author":{"gitId":"ICubE-"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-21"},{"lineNumber":198,"author":{"gitId":"ICubE-"},"content":" throw new PatternMatchFailException();","lastModifiedDate":"2023-10-21"},{"lineNumber":199,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":200,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":201,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":202,"author":{"gitId":"ICubE-"},"content":" public String getFirstWord(String str) {","lastModifiedDate":"2023-10-10"},{"lineNumber":203,"author":{"gitId":"ICubE-"},"content":" assert str !\u003d null \u0026\u0026 !str.isEmpty();","lastModifiedDate":"2023-10-16"},{"lineNumber":204,"author":{"gitId":"ICubE-"},"content":" return str.split(\"\\\\s\")[0];","lastModifiedDate":"2023-10-10"},{"lineNumber":205,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":206,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"NgLixuanNixon":28,"J0shuaLeong":28,"ICubE-":149,"marklin2234":1}},{"path":"src/main/java/fittrack/parser/NegativeNumberException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"J0shuaLeong"},"content":"package fittrack.parser;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"J0shuaLeong"},"content":"public class NegativeNumberException extends ParseException {","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"marklin2234"},"content":" public NegativeNumberException() {","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"marklin2234"},"content":" super(\"\");","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"marklin2234"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"J0shuaLeong":4,"marklin2234":3}},{"path":"src/main/java/fittrack/parser/NumberFormatException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"public class NumberFormatException extends ParseException {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"marklin2234"},"content":" public NumberFormatException() {","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"marklin2234"},"content":" super(\"\");","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"marklin2234"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"ICubE-":4,"marklin2234":3}},{"path":"src/main/java/fittrack/parser/ParseException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.parser;","lastModifiedDate":"2023-10-10"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"public class ParseException extends Exception {","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"marklin2234"},"content":" public ParseException(String errorMessage) {","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"marklin2234"},"content":" super(errorMessage);","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"marklin2234"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"ICubE-":4,"marklin2234":3}},{"path":"src/main/java/fittrack/parser/PatternMatchFailException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"public class PatternMatchFailException extends ParseException {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"marklin2234"},"content":" public PatternMatchFailException() {","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"marklin2234"},"content":" super(\"\");","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"marklin2234"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"ICubE-":4,"marklin2234":3}},{"path":"src/main/java/fittrack/storage/Storage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"J0shuaLeong"},"content":"package fittrack.storage;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.MealList;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.UserProfile;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.WorkoutList;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.data.Meal;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.data.Workout;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"J0shuaLeong"},"content":"import java.io.File;","lastModifiedDate":"2023-10-20"},{"lineNumber":10,"author":{"gitId":"J0shuaLeong"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"J0shuaLeong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"J0shuaLeong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"J0shuaLeong"},"content":"public class Storage {","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":" private static final String FILE_DIRECTORY \u003d \"data\";","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":" private final String profileFilePath \u003d \"./data/Profile.txt\";","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":" private final String mealListFilePath \u003d \"./data/mealList.txt\";","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"J0shuaLeong"},"content":" private final String workoutListFilePath \u003d \"./data/workoutList.txt\";","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"J0shuaLeong"},"content":" private final File profileFile;","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"J0shuaLeong"},"content":" private final File mealFile;","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":" private final File workoutFile;","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"J0shuaLeong"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"J0shuaLeong"},"content":" * Constructs storage. Creates new file fittrack.txt","lastModifiedDate":"2023-10-21"},{"lineNumber":28,"author":{"gitId":"J0shuaLeong"},"content":" * in a directory called data if none exist.","lastModifiedDate":"2023-10-21"},{"lineNumber":29,"author":{"gitId":"J0shuaLeong"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"J0shuaLeong"},"content":" public Storage() {","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"J0shuaLeong"},"content":" this.profileFile \u003d new File(profileFilePath);","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"J0shuaLeong"},"content":" this.mealFile \u003d new File(mealListFilePath);","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"J0shuaLeong"},"content":" this.workoutFile \u003d new File(workoutListFilePath);","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"J0shuaLeong"},"content":" assert profileFile !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"J0shuaLeong"},"content":" assert mealFile !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"J0shuaLeong"},"content":" assert workoutFile !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"J0shuaLeong"},"content":" try {","lastModifiedDate":"2023-10-20"},{"lineNumber":40,"author":{"gitId":"J0shuaLeong"},"content":" File f \u003d new File(FILE_DIRECTORY);","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"J0shuaLeong"},"content":" if (f.mkdir()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(\"Directory created: \" + f.getName());","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"J0shuaLeong"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(\"Directory already exists.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"J0shuaLeong"},"content":" if (!this.profileFile.exists()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"J0shuaLeong"},"content":" profileFile.createNewFile();","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"J0shuaLeong"},"content":" if (!this.mealFile.exists()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"J0shuaLeong"},"content":" mealFile.createNewFile();","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"J0shuaLeong"},"content":" if (!this.workoutFile.exists()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"J0shuaLeong"},"content":" workoutFile.createNewFile();","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":57,"author":{"gitId":"J0shuaLeong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-20"},{"lineNumber":58,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(\"Failed to create directory and file.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":60,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":61,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":62,"author":{"gitId":"J0shuaLeong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"J0shuaLeong"},"content":" * Saves user profile data into storage","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"J0shuaLeong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"J0shuaLeong"},"content":" * @throws IOException error","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"J0shuaLeong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"J0shuaLeong"},"content":" public void saveProfile(UserProfile userProfile) throws IOException {","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"J0shuaLeong"},"content":" //TODO write data to file","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"J0shuaLeong"},"content":" FileWriter file \u003d new FileWriter(profileFilePath);","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"J0shuaLeong"},"content":" file.write(userProfile.toString() + \"\\n\");","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"J0shuaLeong"},"content":" file.close();","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"J0shuaLeong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"J0shuaLeong"},"content":" * Saves meal list into storage","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"J0shuaLeong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"J0shuaLeong"},"content":" * @throws IOException error","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"J0shuaLeong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":79,"author":{"gitId":"J0shuaLeong"},"content":" public void saveMeals(MealList mealList) throws IOException {","lastModifiedDate":"2023-10-22"},{"lineNumber":80,"author":{"gitId":"J0shuaLeong"},"content":" ArrayList\u003cMeal\u003e mealArr \u003d mealList.getMealList();","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"J0shuaLeong"},"content":" FileWriter file \u003d new FileWriter(mealListFilePath);","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"J0shuaLeong"},"content":" for (Meal m : mealArr) {","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"J0shuaLeong"},"content":" file.write(m.formatToFile() + \"\\n\");","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"J0shuaLeong"},"content":" file.close();","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"J0shuaLeong"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":89,"author":{"gitId":"J0shuaLeong"},"content":" * Saves workout list into storage","lastModifiedDate":"2023-10-22"},{"lineNumber":90,"author":{"gitId":"J0shuaLeong"},"content":" *","lastModifiedDate":"2023-10-21"},{"lineNumber":91,"author":{"gitId":"J0shuaLeong"},"content":" * @throws IOException error","lastModifiedDate":"2023-10-21"},{"lineNumber":92,"author":{"gitId":"J0shuaLeong"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":93,"author":{"gitId":"J0shuaLeong"},"content":" public void saveWorkouts(WorkoutList workoutList) throws IOException {","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"J0shuaLeong"},"content":" ArrayList\u003cWorkout\u003e workoutArr \u003d workoutList.getWorkoutList();","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"J0shuaLeong"},"content":" FileWriter file \u003d new FileWriter(workoutListFilePath);","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"J0shuaLeong"},"content":" for (Workout w : workoutArr) {","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"J0shuaLeong"},"content":" file.write(w.formatToFile() + \"\\n\");","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"J0shuaLeong"},"content":" file.close();","lastModifiedDate":"2023-10-21"},{"lineNumber":100,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":101,"author":{"gitId":"J0shuaLeong"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"J0shuaLeong":101}},{"path":"src/test/java/fittrack/FitTrackTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"class FitTrackTest {","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":" public void sampleTest() {","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":" assertTrue(true);","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"ICubE-":2,"-":10}},{"path":"src/test/java/fittrack/command/EditProfileCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"J0shuaLeong"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.UserProfile;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.parser.PatternMatchFailException;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"J0shuaLeong"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"J0shuaLeong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"J0shuaLeong"},"content":"public class EditProfileCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"J0shuaLeong"},"content":" private EditProfileCommand editProfileCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":" private UserProfile userProfile;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":" public void setUp() {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":" editProfileCommand \u003d new EditProfileCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":" userProfile \u003d new UserProfile();","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"J0shuaLeong"},"content":" editProfileCommand.setData(userProfile, null, null, null);","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"J0shuaLeong"},"content":" public void setArgumentsInvalidArgumentsThrowsException() {","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"J0shuaLeong"},"content":" String invalidArgs \u003d \"invalid_arguments\";","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"J0shuaLeong"},"content":" CommandParser parser \u003d new CommandParser();","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"J0shuaLeong"},"content":" assertThrows(PatternMatchFailException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"J0shuaLeong"},"content":" editProfileCommand.setArguments(invalidArgs, parser);","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"J0shuaLeong"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"J0shuaLeong"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"J0shuaLeong"},"content":" public void getHelpReturnsCorrectHelpMessage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"J0shuaLeong"},"content":" EditProfileCommand editProfileCommand \u003d new EditProfileCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"J0shuaLeong"},"content":" String expectedHelpMessage \u003d \"`editprofile` allows you to edit your profile.\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" \"\\nType `editprofile h/\u003cHEIGHT\u003e w/\u003cWEIGHT\u003e l/\u003cCALORIE_LIMIT\u003e` to edit.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"J0shuaLeong"},"content":" String actualHelpMessage \u003d editProfileCommand.getHelp();","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"J0shuaLeong"},"content":" assertEquals(expectedHelpMessage, actualHelpMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"J0shuaLeong"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"J0shuaLeong":43,"ICubE-":1}},{"path":"src/test/java/fittrack/command/HelpCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"import static fittrack.command.HelpCommand.USAGE;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"import static fittrack.command.InvalidCommand.MESSAGE_INVALID_COMMAND;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":"class HelpCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" void execute_help_pass() {","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" HelpCommand helpCommand \u003d new HelpCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" helpCommand.setArguments(\"\", new CommandParser());","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" CommandResult result \u003d helpCommand.execute();","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" assertEquals(HelpCommand.HELP, result.getFeedback());","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" void setArguments_emptyString_helpOfHelp() {","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" HelpCommand helpCommand \u003d new HelpCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" helpCommand.setArguments(\"\", new CommandParser());","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" assertEquals(HelpCommand.HELP, helpCommand.getHelpMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" void setArguments_help_helpOfHelp() {","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" HelpCommand helpCommand \u003d new HelpCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" helpCommand.setArguments(\"help\", new CommandParser());","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" assertEquals(HelpCommand.HELP, helpCommand.getHelpMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" void setArguments_exit_helpOfExit() {","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" HelpCommand helpCommand \u003d new HelpCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":" helpCommand.setArguments(\"exit\", new CommandParser());","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" assertEquals(ExitCommand.HELP, helpCommand.getHelpMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"ICubE-"},"content":" void setArguments_foo_invalidCmdMsg() {","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"ICubE-"},"content":" HelpCommand helpCommand \u003d new HelpCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"ICubE-"},"content":" helpCommand.setArguments(\"foo\", new CommandParser());","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"ICubE-"},"content":" assertEquals(","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"ICubE-"},"content":" String.format(MESSAGE_INVALID_COMMAND, \"foo\") + \"\\n\" + USAGE, ","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"ICubE-"},"content":" helpCommand.getHelpMessage()","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"ICubE-"},"content":" );","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"ICubE-":50}},{"path":"src/test/java/fittrack/parser/CommandParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.UserProfile;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.ExitCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.HelpCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.InvalidCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":"import static org.junit.jupiter.api.Assertions.assertInstanceOf;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":"class CommandParserTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" void parseCommand_emptyString_invalidCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" Command command \u003d new CommandParser().parseCommand(\"\");","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" assertInstanceOf(InvalidCommand.class, command);","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" void parseCommand_help_helpCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" Command command \u003d new CommandParser().parseCommand(\"help\");","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" assertInstanceOf(HelpCommand.class, command);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" HelpCommand helpCommand \u003d (HelpCommand) command;","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" assertEquals(HelpCommand.HELP, helpCommand.getHelpMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" void parseCommand_helpExit_helpCommandExit() {","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" Command command \u003d new CommandParser().parseCommand(\"help exit\");","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" assertInstanceOf(HelpCommand.class, command);","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" HelpCommand helpCommand \u003d (HelpCommand) command;","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" assertEquals(ExitCommand.HELP, helpCommand.getHelpMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" void parseCommand_exit_exitCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"ICubE-"},"content":" Command command \u003d new CommandParser().parseCommand(\"exit\");","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"ICubE-"},"content":" assertInstanceOf(ExitCommand.class, command);","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"ICubE-"},"content":" void parseCommand_foo_invalidCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"ICubE-"},"content":" Command command \u003d new CommandParser().parseCommand(\"foo\");","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"ICubE-"},"content":" assertInstanceOf(InvalidCommand.class, command);","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"ICubE-"},"content":" void getBlankCommand_help_helpCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"ICubE-"},"content":" Command blankCommand \u003d new CommandParser().getBlankCommand(\"help\");","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"ICubE-"},"content":" assertInstanceOf(HelpCommand.class, blankCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"ICubE-"},"content":" void getBlankCommand_foo_invalidCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"ICubE-"},"content":" Command blankCommand \u003d new CommandParser().getBlankCommand(\"foo\");","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"ICubE-"},"content":" assertInstanceOf(InvalidCommand.class, blankCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"ICubE-"},"content":" void parseProfile_h180w80l2000_success() {","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"ICubE-"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"ICubE-"},"content":" UserProfile profile \u003d new CommandParser().parseProfile(\"h/180 w/80 l/2000\");","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"ICubE-"},"content":" assertEquals(180.0, profile.getHeight().value);","lastModifiedDate":"2023-10-21"},{"lineNumber":67,"author":{"gitId":"ICubE-"},"content":" assertEquals(80.0, profile.getWeight().value);","lastModifiedDate":"2023-10-21"},{"lineNumber":68,"author":{"gitId":"ICubE-"},"content":" assertEquals(2000.0, profile.getDailyCalorieLimit().value);","lastModifiedDate":"2023-10-21"},{"lineNumber":69,"author":{"gitId":"J0shuaLeong"},"content":" } catch (PatternMatchFailException | NegativeNumberException | NumberFormatException e) {","lastModifiedDate":"2023-10-20"},{"lineNumber":70,"author":{"gitId":"ICubE-"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"ICubE-"},"content":" void parseProfile_fail() {","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"ICubE-"},"content":" CommandParser parser \u003d new CommandParser();","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"ICubE-"},"content":" assertThrows(PatternMatchFailException.class, () -\u003e parser.parseProfile(\"h/ w/ l/\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"ICubE-"},"content":" assertThrows(PatternMatchFailException.class, () -\u003e parser.parseProfile(\"h/180 w/80 l/\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"ICubE-"},"content":" assertThrows(PatternMatchFailException.class, () -\u003e parser.parseProfile(\"h/ w/80 l/2000\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"ICubE-"},"content":" assertThrows(PatternMatchFailException.class, () -\u003e parser.parseProfile(\"h/180 80 2000\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"ICubE-"},"content":" assertThrows(PatternMatchFailException.class, () -\u003e parser.parseProfile(\"180 w/80 l/2000\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"ICubE-"},"content":" assertThrows(PatternMatchFailException.class, () -\u003e parser.parseProfile(\"180 80 2000\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"ICubE-"},"content":" assertThrows(NumberFormatException.class, () -\u003e parser.parseProfile(\"h/180 w/eighty l/2000\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"J0shuaLeong"},"content":" assertThrows(NegativeNumberException.class, () -\u003e parser.parseProfile(\"h/-180 w/80 l/2000\"));","lastModifiedDate":"2023-10-20"},{"lineNumber":85,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"ICubE-"},"content":" void getFirstWord_helloWorld_hello() {","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"ICubE-"},"content":" String firstWord \u003d new CommandParser().getFirstWord(\"hello world\");","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"ICubE-"},"content":" assertEquals(\"hello\", firstWord);","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"ICubE-"},"content":" void getFirstWord_loremIpsum_lorem() {","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"ICubE-"},"content":" String firstWord \u003d new CommandParser().getFirstWord(","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"ICubE-"},"content":" \"Lorem\\nipsum\\ndolor sit amet, consectetur adipisicing elit, \\n\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"ICubE-"},"content":" \"sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\"","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"ICubE-"},"content":" );","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"ICubE-"},"content":" assertEquals(\"Lorem\", firstWord);","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"ICubE-"},"content":" void getFirstWord_hi_hi() {","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"ICubE-"},"content":" String firstWord \u003d new CommandParser().getFirstWord(\"hi\");","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"ICubE-"},"content":" assertEquals(\"hi\", firstWord);","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"ICubE-"},"content":" void getFirstWord_emptyString_fail() {","lastModifiedDate":"2023-10-16"},{"lineNumber":110,"author":{"gitId":"ICubE-"},"content":" assertThrows(","lastModifiedDate":"2023-10-16"},{"lineNumber":111,"author":{"gitId":"ICubE-"},"content":" AssertionError.class,","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"ICubE-"},"content":" () -\u003e new CommandParser().getFirstWord(\"\")","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"ICubE-"},"content":" );","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"J0shuaLeong":2,"ICubE-":113}},{"path":"text-ui-test/runtest.bat","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@echo off","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"setlocal enableextensions","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"pushd %~dp0","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"cd ..","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"call gradlew clean shadowJar","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"cd build\\libs","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"for /f \"tokens\u003d*\" %%a in (","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u0027dir /b *.jar\u0027","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":") do (","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" set jarloc\u003d%%a","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"java -jar %jarloc% \u003c ..\\..\\text-ui-test\\input.txt \u003e ..\\..\\text-ui-test\\ACTUAL.TXT","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":"cd ..\\..\\text-ui-test","lastModifiedDate":"2020-05-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":"FC ACTUAL.TXT ACTUAL.TXT \u003eNUL \u0026\u0026 ECHO Test passed! || Echo Test failed!","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"J0shuaLeong":1,"-":18}}] +[{"path":"build.gradle","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"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 \u0027checkstyle\u0027","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":" id \u0027com.github.johnrengelman.shadow\u0027 version \u00277.1.2\u0027","lastModifiedDate":"2022-06-17"},{"lineNumber":6,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"repositories {","lastModifiedDate":"2020-05-25"},{"lineNumber":9,"author":{"gitId":"-"},"content":" mavenCentral()","lastModifiedDate":"2020-05-25"},{"lineNumber":10,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":11,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":12,"author":{"gitId":"-"},"content":"dependencies {","lastModifiedDate":"2020-05-25"},{"lineNumber":13,"author":{"gitId":"-"},"content":" testImplementation group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-api\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":14,"author":{"gitId":"-"},"content":" testRuntimeOnly group: \u0027org.junit.jupiter\u0027, name: \u0027junit-jupiter-engine\u0027, version: \u00275.10.0\u0027","lastModifiedDate":"2023-08-05"},{"lineNumber":15,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":17,"author":{"gitId":"-"},"content":"test {","lastModifiedDate":"2020-05-25"},{"lineNumber":18,"author":{"gitId":"-"},"content":" useJUnitPlatform()","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":20,"author":{"gitId":"-"},"content":" testLogging {","lastModifiedDate":"2020-05-25"},{"lineNumber":21,"author":{"gitId":"-"},"content":" events \"passed\", \"skipped\", \"failed\"","lastModifiedDate":"2020-05-25"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":23,"author":{"gitId":"-"},"content":" showExceptions true","lastModifiedDate":"2020-05-25"},{"lineNumber":24,"author":{"gitId":"-"},"content":" exceptionFormat \"full\"","lastModifiedDate":"2020-05-25"},{"lineNumber":25,"author":{"gitId":"-"},"content":" showCauses true","lastModifiedDate":"2020-05-25"},{"lineNumber":26,"author":{"gitId":"-"},"content":" showStackTraces true","lastModifiedDate":"2020-05-25"},{"lineNumber":27,"author":{"gitId":"-"},"content":" showStandardStreams \u003d false","lastModifiedDate":"2020-05-25"},{"lineNumber":28,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-25"},{"lineNumber":29,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":30,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":31,"author":{"gitId":"-"},"content":"application {","lastModifiedDate":"2020-05-25"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" mainClass.set(\"fittrack.FitTrack\")","lastModifiedDate":"2023-10-09"},{"lineNumber":33,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":34,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":35,"author":{"gitId":"-"},"content":"shadowJar {","lastModifiedDate":"2020-05-25"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" archiveBaseName.set(\"fittrack\")","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"-"},"content":" archiveClassifier.set(\"\")","lastModifiedDate":"2023-09-24"},{"lineNumber":38,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":40,"author":{"gitId":"-"},"content":"checkstyle {","lastModifiedDate":"2020-05-25"},{"lineNumber":41,"author":{"gitId":"-"},"content":" toolVersion \u003d \u002710.2\u0027","lastModifiedDate":"2022-04-29"},{"lineNumber":42,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"},{"lineNumber":43,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":44,"author":{"gitId":"-"},"content":"run{","lastModifiedDate":"2020-05-25"},{"lineNumber":45,"author":{"gitId":"-"},"content":" standardInput \u003d System.in","lastModifiedDate":"2020-05-25"},{"lineNumber":46,"author":{"gitId":"ICubE-"},"content":" enableAssertions \u003d true","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-25"}],"authorContributionMap":{"ICubE-":3,"-":44}},{"path":"docs/AboutUs.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# About us","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"Display | Name | Github Profile | Portfolio ","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"J0shuaLeong"},"content":"--------|:------------:|:----------------------------------------:|:---------:","lastModifiedDate":"2023-10-06"},{"lineNumber":5,"author":{"gitId":"farissirraj"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Faris Sirraj | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Yeon Jeho | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":"\u003cimg src\u003d\"images/joshua.jpg\" width \u003d 25% height \u003d 25%\u003e | Joshua Leong | [Github](https://github.com/J0shuaLeong) | [Portfolio](docs/team/joshua.md)","lastModifiedDate":"2023-10-07"},{"lineNumber":8,"author":{"gitId":"NgLixuanNixon"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Ng Lixuan Nixon | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":9,"author":{"gitId":"marklin2234"},"content":"![](https://via.placeholder.com/100.png?text\u003dPhoto) | Mark Lin | [Github](https://github.com/) | [Portfolio](docs/team/johndoe.md)","lastModifiedDate":"2023-10-04"},{"lineNumber":10,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-04"}],"authorContributionMap":{"NgLixuanNixon":2,"J0shuaLeong":2,"ICubE-":1,"marklin2234":1,"-":3,"farissirraj":1}},{"path":"docs/UserGuide.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"# User Guide","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"## Introduction","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"Are you ready to embark on a journey towards a healthier, ","lastModifiedDate":"2023-10-13"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":"more active lifestyle? Introducing FitTrack, ","lastModifiedDate":"2023-10-13"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":"your ultimate fitness and nutrition companion. ","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"J0shuaLeong"},"content":"FitTrack is more than just an app; ","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"J0shuaLeong"},"content":"it\u0027s your personal guide to achieving your health and fitness goals.","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":"## Quick Start","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":"1. Ensure that you have Java 11 or above installed.","lastModifiedDate":"2020-05-24"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":"2. Down the latest version of `FitTrack` from [here](https://github.com/AY2324S1-CS2113-W12-4/tp/releases).","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"J0shuaLeong"},"content":"3. You should find the jar file in your default downloads folder. Please place the jar file into a separate folder that will be used as your `home folder`.","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":"4. Open a command terminal, and change the current working directory to the `home folder`.","lastModifiedDate":"2023-10-13"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":"5. Type ```java -jar fittrack.jar``` in the terminal to open the application. You should see the welcome message \"Hi!\" on the next line.","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":"6. The application is now ready for you to use! Type `help` to see a list of commands that you will be able to use in the application.","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":21,"author":{"gitId":"-"},"content":"## Features ","lastModifiedDate":"2020-05-24"},{"lineNumber":22,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":"* [Viewing help : `help`](#View-Help-Guide-help)","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"J0shuaLeong"},"content":"* [Exiting the application : `exit`](#Exiting-the-application-exit)","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"J0shuaLeong"},"content":"* [Editing your profile : `editprofile`](#editing-your-profile-editprofile)","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"J0shuaLeong"},"content":"* [Viewing your profile : `viewprofile`](#viewing-your-profile-viewprofile)","lastModifiedDate":"2023-10-19"},{"lineNumber":27,"author":{"gitId":"J0shuaLeong"},"content":"* [Adding a Meal : `addmeal`](#adding-a-meal-addmeal)","lastModifiedDate":"2023-10-13"},{"lineNumber":28,"author":{"gitId":"J0shuaLeong"},"content":"* [Viewing list of all meals : `viewmeals`](#viewing-list-of-all-meals-viewmeals)","lastModifiedDate":"2023-10-19"},{"lineNumber":29,"author":{"gitId":"J0shuaLeong"},"content":"* [Checking your current bmi : `bmi`](#checking-your-current-bmi-bmi)","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"J0shuaLeong"},"content":"* [Delete a Meal : `deletemeal`](#delete-a-meal-deletemeal)","lastModifiedDate":"2023-10-13"},{"lineNumber":31,"author":{"gitId":"J0shuaLeong"},"content":"* [Adding a workout : `addworkout`](#adding-a-workout-addworkout)","lastModifiedDate":"2023-10-19"},{"lineNumber":32,"author":{"gitId":"J0shuaLeong"},"content":"* [Viewing list of workout : `viewWorkout`](#viewing-list-of-all-workouts-viewworkouts)","lastModifiedDate":"2023-10-19"},{"lineNumber":33,"author":{"gitId":"J0shuaLeong"},"content":"* [Delete a Workout : `deletework`](#delete-a-workout-deleteworkout)","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"J0shuaLeong"},"content":"* [Save to File: `save`](#save-to-file-save)","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":36,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":37,"author":{"gitId":"J0shuaLeong"},"content":"### View Help Guide: `help`","lastModifiedDate":"2023-10-13"},{"lineNumber":38,"author":{"gitId":"J0shuaLeong"},"content":"Shows the list of commands with the command format and short explanation.","lastModifiedDate":"2023-10-13"},{"lineNumber":39,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":40,"author":{"gitId":"J0shuaLeong"},"content":"**Example of usage:**","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":42,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":43,"author":{"gitId":"J0shuaLeong"},"content":"help","lastModifiedDate":"2023-10-13"},{"lineNumber":44,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":45,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":46,"author":{"gitId":"J0shuaLeong"},"content":"**Expected output:**","lastModifiedDate":"2023-10-13"},{"lineNumber":47,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":48,"author":{"gitId":"J0shuaLeong"},"content":"`help` shows help message of the command.","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"J0shuaLeong"},"content":"Existing commands:","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"J0shuaLeong"},"content":"help, exit, editprofile, viewprofileaddmeal, deletemeal, viewmealsaddworkout, deleteworkout, viewworkouts","lastModifiedDate":"2023-10-18"},{"lineNumber":51,"author":{"gitId":"J0shuaLeong"},"content":"Type `help` or `help \u003cCOMMAND\u003e` to view help.","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":53,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":54,"author":{"gitId":"J0shuaLeong"},"content":"### Exiting the application: `exit`","lastModifiedDate":"2023-10-13"},{"lineNumber":55,"author":{"gitId":"J0shuaLeong"},"content":"Exits Skippy Chat Bot application.","lastModifiedDate":"2023-10-13"},{"lineNumber":56,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":57,"author":{"gitId":"J0shuaLeong"},"content":"**Example of usage:**","lastModifiedDate":"2023-10-13"},{"lineNumber":58,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":59,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":60,"author":{"gitId":"J0shuaLeong"},"content":"exit","lastModifiedDate":"2023-10-13"},{"lineNumber":61,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":62,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":63,"author":{"gitId":"J0shuaLeong"},"content":"**Expected output:**","lastModifiedDate":"2023-10-13"},{"lineNumber":64,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":65,"author":{"gitId":"J0shuaLeong"},"content":"Goodbye! Hope to see you again soon!","lastModifiedDate":"2023-10-13"},{"lineNumber":66,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":67,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":68,"author":{"gitId":"J0shuaLeong"},"content":"### Editing Your Profile: `editprofile`","lastModifiedDate":"2023-10-19"},{"lineNumber":69,"author":{"gitId":"J0shuaLeong"},"content":"Allows user to edit their profile details.","lastModifiedDate":"2023-10-13"},{"lineNumber":70,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":71,"author":{"gitId":"J0shuaLeong"},"content":"Format: `editprofile h/\u003cheight\u003e w/\u003cweight\u003e l/\u003ccalories\u003e`","lastModifiedDate":"2023-10-19"},{"lineNumber":72,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":73,"author":{"gitId":"-"},"content":"Example of usage: ","lastModifiedDate":"2020-05-24"},{"lineNumber":74,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":75,"author":{"gitId":"J0shuaLeong"},"content":"editprofile h/170 w/70 l/100","lastModifiedDate":"2023-10-19"},{"lineNumber":76,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":77,"author":{"gitId":"J0shuaLeong"},"content":"Expected output:","lastModifiedDate":"2023-10-13"},{"lineNumber":78,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":79,"author":{"gitId":"J0shuaLeong"},"content":"I\u0027ve edited the following:","lastModifiedDate":"2023-10-18"},{"lineNumber":80,"author":{"gitId":"J0shuaLeong"},"content":"Height: 170.0","lastModifiedDate":"2023-10-18"},{"lineNumber":81,"author":{"gitId":"J0shuaLeong"},"content":"Weight: 70.0","lastModifiedDate":"2023-10-18"},{"lineNumber":82,"author":{"gitId":"J0shuaLeong"},"content":"Daily calorie limit: 100.0","lastModifiedDate":"2023-10-18"},{"lineNumber":83,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":84,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":85,"author":{"gitId":"J0shuaLeong"},"content":"### Viewing your profile: `viewprofile`","lastModifiedDate":"2023-10-19"},{"lineNumber":86,"author":{"gitId":"J0shuaLeong"},"content":"Lists all profile settings and details.","lastModifiedDate":"2023-10-19"},{"lineNumber":87,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":88,"author":{"gitId":"J0shuaLeong"},"content":"Format: `viewprofile`","lastModifiedDate":"2023-10-19"},{"lineNumber":89,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":90,"author":{"gitId":"J0shuaLeong"},"content":"**Example of usage:**","lastModifiedDate":"2023-10-19"},{"lineNumber":91,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":92,"author":{"gitId":"J0shuaLeong"},"content":"viewprofile","lastModifiedDate":"2023-10-19"},{"lineNumber":93,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":94,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":95,"author":{"gitId":"J0shuaLeong"},"content":"**Expected output:**","lastModifiedDate":"2023-10-19"},{"lineNumber":96,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":97,"author":{"gitId":"J0shuaLeong"},"content":"Your Profile:","lastModifiedDate":"2023-10-19"},{"lineNumber":98,"author":{"gitId":"J0shuaLeong"},"content":"Height: 180.0","lastModifiedDate":"2023-10-19"},{"lineNumber":99,"author":{"gitId":"J0shuaLeong"},"content":"Weight: 80.0","lastModifiedDate":"2023-10-19"},{"lineNumber":100,"author":{"gitId":"J0shuaLeong"},"content":"Daily calorie limit: 3000.0","lastModifiedDate":"2023-10-19"},{"lineNumber":101,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":102,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":103,"author":{"gitId":"J0shuaLeong"},"content":"### Checking your current BMI: `bmi`","lastModifiedDate":"2023-10-20"},{"lineNumber":104,"author":{"gitId":"J0shuaLeong"},"content":"Calculates your bmi based on your current height and weight","lastModifiedDate":"2023-10-20"},{"lineNumber":105,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":106,"author":{"gitId":"J0shuaLeong"},"content":"Format: `bmi`","lastModifiedDate":"2023-10-20"},{"lineNumber":107,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":108,"author":{"gitId":"J0shuaLeong"},"content":"**Example of usage:**","lastModifiedDate":"2023-10-20"},{"lineNumber":109,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":110,"author":{"gitId":"J0shuaLeong"},"content":"bmi","lastModifiedDate":"2023-10-20"},{"lineNumber":111,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":112,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":113,"author":{"gitId":"J0shuaLeong"},"content":"**Expected output:**","lastModifiedDate":"2023-10-20"},{"lineNumber":114,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-20"},{"lineNumber":115,"author":{"gitId":"J0shuaLeong"},"content":"Your current BMI is 24.22","lastModifiedDate":"2023-10-20"},{"lineNumber":116,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":117,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":118,"author":{"gitId":"J0shuaLeong"},"content":"### Adding a Meal: `addmeal`","lastModifiedDate":"2023-10-13"},{"lineNumber":119,"author":{"gitId":"J0shuaLeong"},"content":"Allows user to add meals they have consumed.","lastModifiedDate":"2023-10-13"},{"lineNumber":120,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":121,"author":{"gitId":"J0shuaLeong"},"content":"Format: `addmeal \u003cmeal\u003e c/ \u003ccalories\u003e`","lastModifiedDate":"2023-10-19"},{"lineNumber":122,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":123,"author":{"gitId":"J0shuaLeong"},"content":"Example of usage:","lastModifiedDate":"2023-10-13"},{"lineNumber":124,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":125,"author":{"gitId":"J0shuaLeong"},"content":"addmeal pasta c/ 200","lastModifiedDate":"2023-10-19"},{"lineNumber":126,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":127,"author":{"gitId":"J0shuaLeong"},"content":"Expected output:","lastModifiedDate":"2023-10-13"},{"lineNumber":128,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":129,"author":{"gitId":"J0shuaLeong"},"content":"I\u0027ve added the following meal:","lastModifiedDate":"2023-10-18"},{"lineNumber":130,"author":{"gitId":"J0shuaLeong"},"content":"Meal name: pasta ","lastModifiedDate":"2023-10-18"},{"lineNumber":131,"author":{"gitId":"J0shuaLeong"},"content":"Calories: 200.0","lastModifiedDate":"2023-10-18"},{"lineNumber":132,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":133,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":134,"author":{"gitId":"J0shuaLeong"},"content":"### Viewing List of All Meals: `viewmeals`","lastModifiedDate":"2023-10-19"},{"lineNumber":135,"author":{"gitId":"J0shuaLeong"},"content":"Lists all the meals.","lastModifiedDate":"2023-10-19"},{"lineNumber":136,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":137,"author":{"gitId":"J0shuaLeong"},"content":"Format: `viewmeals`","lastModifiedDate":"2023-10-19"},{"lineNumber":138,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":139,"author":{"gitId":"J0shuaLeong"},"content":"**Example of usage:**","lastModifiedDate":"2023-10-19"},{"lineNumber":140,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":141,"author":{"gitId":"J0shuaLeong"},"content":"viewwmeals","lastModifiedDate":"2023-10-19"},{"lineNumber":142,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":143,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":144,"author":{"gitId":"J0shuaLeong"},"content":"**Expected output:**","lastModifiedDate":"2023-10-19"},{"lineNumber":145,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":146,"author":{"gitId":"J0shuaLeong"},"content":"These are the meals you have consumed: ","lastModifiedDate":"2023-10-19"},{"lineNumber":147,"author":{"gitId":"J0shuaLeong"},"content":"1.Meal name: pasta","lastModifiedDate":"2023-10-19"},{"lineNumber":148,"author":{"gitId":"J0shuaLeong"},"content":"Calories: 200.0","lastModifiedDate":"2023-10-19"},{"lineNumber":149,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":150,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":151,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":152,"author":{"gitId":"J0shuaLeong"},"content":"### Delete a Meal: `deletemeal`","lastModifiedDate":"2023-10-13"},{"lineNumber":153,"author":{"gitId":"J0shuaLeong"},"content":"Allows user to delete a meal they have added.","lastModifiedDate":"2023-10-13"},{"lineNumber":154,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":155,"author":{"gitId":"J0shuaLeong"},"content":"Format: `deletemeal \u003cindex of meal\u003e`","lastModifiedDate":"2023-10-13"},{"lineNumber":156,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":157,"author":{"gitId":"J0shuaLeong"},"content":"Example of usage:","lastModifiedDate":"2023-10-13"},{"lineNumber":158,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":159,"author":{"gitId":"J0shuaLeong"},"content":"deletemeal 1","lastModifiedDate":"2023-10-13"},{"lineNumber":160,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":161,"author":{"gitId":"J0shuaLeong"},"content":"Expected output:","lastModifiedDate":"2023-10-13"},{"lineNumber":162,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":163,"author":{"gitId":"J0shuaLeong"},"content":"I\u0027ve deleted the following meal:","lastModifiedDate":"2023-10-18"},{"lineNumber":164,"author":{"gitId":"J0shuaLeong"},"content":"Meal name: pasta ","lastModifiedDate":"2023-10-18"},{"lineNumber":165,"author":{"gitId":"J0shuaLeong"},"content":"Calories: 200.0","lastModifiedDate":"2023-10-18"},{"lineNumber":166,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":167,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":168,"author":{"gitId":"J0shuaLeong"},"content":"### Adding a Workout: `addworkout`","lastModifiedDate":"2023-10-19"},{"lineNumber":169,"author":{"gitId":"J0shuaLeong"},"content":"Allows user to add workouts they have done.","lastModifiedDate":"2023-10-19"},{"lineNumber":170,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":171,"author":{"gitId":"J0shuaLeong"},"content":"Format: `addworkout \u003cworkout\u003e c/ \u003ccalories\u003e`","lastModifiedDate":"2023-10-19"},{"lineNumber":172,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":173,"author":{"gitId":"J0shuaLeong"},"content":"Example of usage:","lastModifiedDate":"2023-10-19"},{"lineNumber":174,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":175,"author":{"gitId":"J0shuaLeong"},"content":"addworkout running c/ 180","lastModifiedDate":"2023-10-19"},{"lineNumber":176,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":177,"author":{"gitId":"J0shuaLeong"},"content":"Expected output:","lastModifiedDate":"2023-10-19"},{"lineNumber":178,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":179,"author":{"gitId":"J0shuaLeong"},"content":"I\u0027ve added the following workout:","lastModifiedDate":"2023-10-19"},{"lineNumber":180,"author":{"gitId":"J0shuaLeong"},"content":"Workout name: running ","lastModifiedDate":"2023-10-19"},{"lineNumber":181,"author":{"gitId":"J0shuaLeong"},"content":"Calories: 180.0","lastModifiedDate":"2023-10-19"},{"lineNumber":182,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":183,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":184,"author":{"gitId":"J0shuaLeong"},"content":"### Viewing List of All Workouts: `viewworkouts`","lastModifiedDate":"2023-10-19"},{"lineNumber":185,"author":{"gitId":"J0shuaLeong"},"content":"Lists all the workouts.","lastModifiedDate":"2023-10-19"},{"lineNumber":186,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":187,"author":{"gitId":"J0shuaLeong"},"content":"Format: `viewworkouts`","lastModifiedDate":"2023-10-19"},{"lineNumber":188,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":189,"author":{"gitId":"J0shuaLeong"},"content":"**Example of usage:**","lastModifiedDate":"2023-10-19"},{"lineNumber":190,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":191,"author":{"gitId":"J0shuaLeong"},"content":"viewworkouts","lastModifiedDate":"2023-10-19"},{"lineNumber":192,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":193,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":194,"author":{"gitId":"J0shuaLeong"},"content":"**Expected output:**","lastModifiedDate":"2023-10-19"},{"lineNumber":195,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":196,"author":{"gitId":"J0shuaLeong"},"content":"These are the workouts you have done: ","lastModifiedDate":"2023-10-19"},{"lineNumber":197,"author":{"gitId":"J0shuaLeong"},"content":"1.Workout name: running","lastModifiedDate":"2023-10-19"},{"lineNumber":198,"author":{"gitId":"J0shuaLeong"},"content":"Calories: 400.0","lastModifiedDate":"2023-10-19"},{"lineNumber":199,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-19"},{"lineNumber":200,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":201,"author":{"gitId":"J0shuaLeong"},"content":"### Delete a Workout: `deleteworkout`","lastModifiedDate":"2023-10-18"},{"lineNumber":202,"author":{"gitId":"J0shuaLeong"},"content":"Allows user to delete a workout they have added.","lastModifiedDate":"2023-10-13"},{"lineNumber":203,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":204,"author":{"gitId":"J0shuaLeong"},"content":"Format: `deleteworkout \u003cindex of workout\u003e`","lastModifiedDate":"2023-10-18"},{"lineNumber":205,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":206,"author":{"gitId":"J0shuaLeong"},"content":"Example of usage:","lastModifiedDate":"2023-10-13"},{"lineNumber":207,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":208,"author":{"gitId":"J0shuaLeong"},"content":"deleteworkout 1","lastModifiedDate":"2023-10-18"},{"lineNumber":209,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":210,"author":{"gitId":"J0shuaLeong"},"content":"Expected output:","lastModifiedDate":"2023-10-13"},{"lineNumber":211,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":212,"author":{"gitId":"J0shuaLeong"},"content":"I\u0027ve deleted workout 1","lastModifiedDate":"2023-10-18"},{"lineNumber":213,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-13"},{"lineNumber":214,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":215,"author":{"gitId":"J0shuaLeong"},"content":"### Save to File: `save`","lastModifiedDate":"2023-10-22"},{"lineNumber":216,"author":{"gitId":"J0shuaLeong"},"content":"Allows user to save profile data, meals and workouts to a text file","lastModifiedDate":"2023-10-22"},{"lineNumber":217,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":218,"author":{"gitId":"J0shuaLeong"},"content":"Format: `save`","lastModifiedDate":"2023-10-22"},{"lineNumber":219,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":220,"author":{"gitId":"J0shuaLeong"},"content":"Example of usage:","lastModifiedDate":"2023-10-22"},{"lineNumber":221,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-22"},{"lineNumber":222,"author":{"gitId":"J0shuaLeong"},"content":"save","lastModifiedDate":"2023-10-22"},{"lineNumber":223,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-22"},{"lineNumber":224,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":225,"author":{"gitId":"J0shuaLeong"},"content":"Expected output:","lastModifiedDate":"2023-10-22"},{"lineNumber":226,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-22"},{"lineNumber":227,"author":{"gitId":"J0shuaLeong"},"content":"Your data has been saved!","lastModifiedDate":"2023-10-22"},{"lineNumber":228,"author":{"gitId":"J0shuaLeong"},"content":"```","lastModifiedDate":"2023-10-22"},{"lineNumber":229,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":230,"author":{"gitId":"-"},"content":"## FAQ","lastModifiedDate":"2020-05-24"},{"lineNumber":231,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":232,"author":{"gitId":"J0shuaLeong"},"content":"**Q**: How do I edit my profile? ","lastModifiedDate":"2023-10-13"},{"lineNumber":233,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":234,"author":{"gitId":"J0shuaLeong"},"content":"**A**: Simply type editprofile, specify your height, weight and daily calories and hit enter. The App will update your details accordingly.","lastModifiedDate":"2023-10-19"},{"lineNumber":235,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":236,"author":{"gitId":"-"},"content":"## Command Summary","lastModifiedDate":"2020-05-24"},{"lineNumber":237,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":238,"author":{"gitId":"J0shuaLeong"},"content":"* Help List `help`","lastModifiedDate":"2023-10-19"},{"lineNumber":239,"author":{"gitId":"J0shuaLeong"},"content":"* Exit Application `exit`","lastModifiedDate":"2023-10-19"},{"lineNumber":240,"author":{"gitId":"J0shuaLeong"},"content":"* Edit Profile `editprofile`","lastModifiedDate":"2023-10-19"},{"lineNumber":241,"author":{"gitId":"J0shuaLeong"},"content":"* View profile `viewprofile`","lastModifiedDate":"2023-10-19"},{"lineNumber":242,"author":{"gitId":"J0shuaLeong"},"content":"* Check BMI `bmi`","lastModifiedDate":"2023-10-20"},{"lineNumber":243,"author":{"gitId":"J0shuaLeong"},"content":"* Add Meal `addmeal`","lastModifiedDate":"2023-10-13"},{"lineNumber":244,"author":{"gitId":"J0shuaLeong"},"content":"* View all meals consumed `viewmeals`","lastModifiedDate":"2023-10-19"},{"lineNumber":245,"author":{"gitId":"J0shuaLeong"},"content":"* Delete Meal `deletemeal`","lastModifiedDate":"2023-10-13"},{"lineNumber":246,"author":{"gitId":"J0shuaLeong"},"content":"* Add Work `addworkout`","lastModifiedDate":"2023-10-19"},{"lineNumber":247,"author":{"gitId":"J0shuaLeong"},"content":"* View all workouts `viewworkouts`","lastModifiedDate":"2023-10-19"},{"lineNumber":248,"author":{"gitId":"J0shuaLeong"},"content":"* Delete Work `deleteworkout`","lastModifiedDate":"2023-10-19"},{"lineNumber":249,"author":{"gitId":"J0shuaLeong"},"content":"* Save to file `save`","lastModifiedDate":"2023-10-22"},{"lineNumber":250,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"J0shuaLeong":218,"-":32}},{"path":"docs/team/joshua.md","fileType":"docs","lines":[{"lineNumber":1,"author":{"gitId":"J0shuaLeong"},"content":"# Joshua - Project Portfolio Page","lastModifiedDate":"2023-10-06"},{"lineNumber":2,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":3,"author":{"gitId":"J0shuaLeong"},"content":"## Overview","lastModifiedDate":"2023-10-06"},{"lineNumber":4,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-06"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":"### Summary of Contributions","lastModifiedDate":"2023-10-06"}],"authorContributionMap":{"J0shuaLeong":6}},{"path":"src/main/java/fittrack/FitTrack.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.Command;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.CommandResult;","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.ExitCommand;","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.parser.NegativeNumberException;","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.NumberFormatException;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.PatternMatchFailException;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.storage.Storage;","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" * Represents the main part of FitTrack.","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" * Referenced","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" * \u003ca href\u003d\"https://github.com/se-edu/addressbook-level2/blob/master/src/seedu/addressbook/Main.java\"\u003ehere\u003c/a\u003e","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" * to build main structure of this class.","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":"public class FitTrack {","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" private final UserProfile userProfile;","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"NgLixuanNixon"},"content":" private final MealList mealList;","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" private final WorkoutList workoutList;","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" private final Ui ui;","lastModifiedDate":"2023-10-09"},{"lineNumber":25,"author":{"gitId":"J0shuaLeong"},"content":" private final Storage storage;","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" private FitTrack() {","lastModifiedDate":"2023-10-09"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" ui \u003d new Ui();","lastModifiedDate":"2023-10-09"},{"lineNumber":29,"author":{"gitId":"J0shuaLeong"},"content":" storage \u003d new Storage();","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" userProfile \u003d new UserProfile();","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"NgLixuanNixon"},"content":" mealList \u003d new MealList();","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" workoutList \u003d new WorkoutList();","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":" * Main entry-point for the FitTrack application.","lastModifiedDate":"2023-10-09"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" public static void main(String[] args) {","lastModifiedDate":"2023-10-09"},{"lineNumber":40,"author":{"gitId":"ICubE-"},"content":" new FitTrack().run();","lastModifiedDate":"2023-10-09"},{"lineNumber":41,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":42,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":43,"author":{"gitId":"ICubE-"},"content":" private void run() {","lastModifiedDate":"2023-10-09"},{"lineNumber":44,"author":{"gitId":"ICubE-"},"content":" start();","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"ICubE-"},"content":" loopCommandExecution();","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"ICubE-"},"content":" end();","lastModifiedDate":"2023-10-09"},{"lineNumber":47,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":48,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":49,"author":{"gitId":"ICubE-"},"content":" private void start() {","lastModifiedDate":"2023-10-09"},{"lineNumber":50,"author":{"gitId":"ICubE-"},"content":" ui.printWelcome();","lastModifiedDate":"2023-10-09"},{"lineNumber":51,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":52,"author":{"gitId":"ICubE-"},"content":" boolean isValidInput \u003d false;","lastModifiedDate":"2023-10-20"},{"lineNumber":53,"author":{"gitId":"ICubE-"},"content":" while (!isValidInput) {","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"ICubE-"},"content":" try {","lastModifiedDate":"2023-10-20"},{"lineNumber":55,"author":{"gitId":"J0shuaLeong"},"content":" profileSettings();","lastModifiedDate":"2023-10-13"},{"lineNumber":56,"author":{"gitId":"J0shuaLeong"},"content":" isValidInput \u003d true;","lastModifiedDate":"2023-10-19"},{"lineNumber":57,"author":{"gitId":"ICubE-"},"content":" } catch (PatternMatchFailException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"ICubE-"},"content":" System.out.println(\"Wrong format. Please enter h/\u003cheight\u003e w/\u003cweight\u003e l/\u003cdailyCalorieLimit\u003e\");","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"ICubE-"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"ICubE-"},"content":" System.out.println(\"Please enter numbers for height, weight, and daily calorie limit.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"J0shuaLeong"},"content":" } catch (NegativeNumberException e) {","lastModifiedDate":"2023-10-20"},{"lineNumber":62,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(\"Please enter a number greater than 0\");","lastModifiedDate":"2023-10-20"},{"lineNumber":63,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":64,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":65,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":66,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":67,"author":{"gitId":"ICubE-"},"content":" private void loopCommandExecution() {","lastModifiedDate":"2023-10-09"},{"lineNumber":68,"author":{"gitId":"ICubE-"},"content":" Command command;","lastModifiedDate":"2023-10-09"},{"lineNumber":69,"author":{"gitId":"ICubE-"},"content":" do {","lastModifiedDate":"2023-10-09"},{"lineNumber":70,"author":{"gitId":"ICubE-"},"content":" String userCommandLine \u003d ui.scanCommandLine();","lastModifiedDate":"2023-10-09"},{"lineNumber":71,"author":{"gitId":"ICubE-"},"content":" command \u003d new CommandParser().parseCommand(userCommandLine);","lastModifiedDate":"2023-10-09"},{"lineNumber":72,"author":{"gitId":"ICubE-"},"content":" CommandResult commandResult \u003d executeCommand(command);","lastModifiedDate":"2023-10-09"},{"lineNumber":73,"author":{"gitId":"ICubE-"},"content":" ui.printCommandResult(commandResult);","lastModifiedDate":"2023-10-09"},{"lineNumber":74,"author":{"gitId":"ICubE-"},"content":" } while (!ExitCommand.isExit(command));","lastModifiedDate":"2023-10-09"},{"lineNumber":75,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":76,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":77,"author":{"gitId":"ICubE-"},"content":" private CommandResult executeCommand(Command command) {","lastModifiedDate":"2023-10-09"},{"lineNumber":78,"author":{"gitId":"J0shuaLeong"},"content":" command.setData(userProfile, mealList, workoutList, storage);","lastModifiedDate":"2023-10-22"},{"lineNumber":79,"author":{"gitId":"ICubE-"},"content":" return command.execute();","lastModifiedDate":"2023-10-09"},{"lineNumber":80,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":81,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":82,"author":{"gitId":"J0shuaLeong"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":83,"author":{"gitId":"J0shuaLeong"},"content":" * Gets user profile details when program starts.","lastModifiedDate":"2023-10-13"},{"lineNumber":84,"author":{"gitId":"J0shuaLeong"},"content":" *","lastModifiedDate":"2023-10-17"},{"lineNumber":85,"author":{"gitId":"J0shuaLeong"},"content":" * @throws PatternMatchFailException if regex match fails","lastModifiedDate":"2023-10-17"},{"lineNumber":86,"author":{"gitId":"J0shuaLeong"},"content":" * @throws NumberFormatException if one of arguments is not double","lastModifiedDate":"2023-10-17"},{"lineNumber":87,"author":{"gitId":"J0shuaLeong"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":88,"author":{"gitId":"J0shuaLeong"},"content":" private void profileSettings()","lastModifiedDate":"2023-10-20"},{"lineNumber":89,"author":{"gitId":"J0shuaLeong"},"content":" throws PatternMatchFailException, NumberFormatException, NegativeNumberException {","lastModifiedDate":"2023-10-20"},{"lineNumber":90,"author":{"gitId":"ICubE-"},"content":" System.out.println(","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"ICubE-"},"content":" \"Please enter your height (in cm), weight (in kg), and daily calorie limit (in kcal):\"","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"ICubE-"},"content":" );","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"ICubE-"},"content":" String input \u003d ui.scanNextLine();","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"J0shuaLeong"},"content":" assert (input !\u003d null) : \"Profile cannot be null\";","lastModifiedDate":"2023-10-19"},{"lineNumber":96,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":97,"author":{"gitId":"ICubE-"},"content":" UserProfile profile \u003d new CommandParser().parseProfile(input);","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"ICubE-"},"content":" userProfile.setHeight(profile.getHeight());","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"ICubE-"},"content":" userProfile.setWeight(profile.getWeight());","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"ICubE-"},"content":" userProfile.setDailyCalorieLimit(profile.getDailyCalorieLimit());","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":102,"author":{"gitId":"ICubE-"},"content":" ui.printProfileDetails(userProfile);","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":104,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":105,"author":{"gitId":"ICubE-"},"content":" private void end() {","lastModifiedDate":"2023-10-09"},{"lineNumber":106,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":107,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"NgLixuanNixon":3,"J0shuaLeong":25,"ICubE-":79}},{"path":"src/main/java/fittrack/MealList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.data.Meal;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"NgLixuanNixon"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"public class MealList {","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" private ArrayList\u003cMeal\u003e mealList;","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"NgLixuanNixon"},"content":" public MealList() {","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"NgLixuanNixon"},"content":" mealList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"J0shuaLeong"},"content":" // For loading of file contents into meal list","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":" //TODO Load file content into meal list","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":" public MealList(ArrayList\u003cMeal\u003e mealList) {","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":" this.mealList \u003d mealList;","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"J0shuaLeong"},"content":" public ArrayList\u003cMeal\u003e getMealList() {","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"J0shuaLeong"},"content":" return this.mealList;","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" public void addToList(Meal newMeal) {","lastModifiedDate":"2023-10-21"},{"lineNumber":26,"author":{"gitId":"NgLixuanNixon"},"content":" mealList.add(newMeal);","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" public void deleteMeal(int mealIndex) {","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"NgLixuanNixon"},"content":" mealList.remove((mealIndex - 1));","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":32,"author":{"gitId":"NgLixuanNixon"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":33,"author":{"gitId":"NgLixuanNixon"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"NgLixuanNixon"},"content":" int counter \u003d 1;","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"NgLixuanNixon"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"NgLixuanNixon"},"content":" for (Meal meal : mealList) {","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"NgLixuanNixon"},"content":" output.append(counter).append(\".\").append(meal.toString()).append(\"\\n\");","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"NgLixuanNixon"},"content":" counter +\u003d 1;","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":40,"author":{"gitId":"NgLixuanNixon"},"content":" return output.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":41,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":42,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"NgLixuanNixon"},"content":" public Meal getMeal(int mealIndex) {","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"NgLixuanNixon"},"content":" return mealList.get(mealIndex - 1);","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"NgLixuanNixon":28,"J0shuaLeong":10,"ICubE-":9}},{"path":"src/main/java/fittrack/Ui.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.CommandResult;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"import java.util.Scanner;","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"/**","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" * Represents the user interface of FitTrack.","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":"public class Ui {","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"J0shuaLeong"},"content":" private static final String LOGO \u003d \"___________.__ __ ___________ __\\n\"","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"J0shuaLeong"},"content":" + \"\\\\_ _____/|__|/ |\\\\__ ___/___________ ____ | | __\\n\"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"J0shuaLeong"},"content":" + \" | __) | \\\\ __\\\\| | \\\\_ __ \\\\__ \\\\ _/ ___\\\\| |/ /\\n\"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":" + \" | \\\\ | || | | | | | \\\\/ __ \\\\ \\\\___| \u003c\\n\"","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"J0shuaLeong"},"content":" + \" \\\\___ / |__||__| |____| |__| (____ /\\\\___ \u003e__|_ \\\\\";","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":" private static final String LINE \u003d \"____________________________________________________________\";","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" private final Scanner in;","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" * Constructs UI of FitTrack.","lastModifiedDate":"2023-10-09"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" public Ui() {","lastModifiedDate":"2023-10-09"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" in \u003d new Scanner(System.in);","lastModifiedDate":"2023-10-09"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" * Scans a line from the user input.","lastModifiedDate":"2023-10-09"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" * @return user input as a line of string","lastModifiedDate":"2023-10-09"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":34,"author":{"gitId":"J0shuaLeong"},"content":" public String scanNextLine() {","lastModifiedDate":"2023-10-13"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" return in.nextLine();","lastModifiedDate":"2023-10-09"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" /**","lastModifiedDate":"2023-10-09"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" * Scans a command line from the user input.","lastModifiedDate":"2023-10-09"},{"lineNumber":40,"author":{"gitId":"ICubE-"},"content":" *","lastModifiedDate":"2023-10-09"},{"lineNumber":41,"author":{"gitId":"ICubE-"},"content":" * @return command line as a line of string","lastModifiedDate":"2023-10-09"},{"lineNumber":42,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-09"},{"lineNumber":43,"author":{"gitId":"ICubE-"},"content":" public String scanCommandLine() {","lastModifiedDate":"2023-10-09"},{"lineNumber":44,"author":{"gitId":"ICubE-"},"content":" return scanNextLine();","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":47,"author":{"gitId":"ICubE-"},"content":" public void printBlankLine() {","lastModifiedDate":"2023-10-10"},{"lineNumber":48,"author":{"gitId":"ICubE-"},"content":" System.out.println();","lastModifiedDate":"2023-10-10"},{"lineNumber":49,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":50,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":51,"author":{"gitId":"J0shuaLeong"},"content":" public void printLine() {","lastModifiedDate":"2023-10-19"},{"lineNumber":52,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(LINE);","lastModifiedDate":"2023-10-19"},{"lineNumber":53,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":54,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":55,"author":{"gitId":"ICubE-"},"content":" public void printWelcome() {","lastModifiedDate":"2023-10-09"},{"lineNumber":56,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(\"Welcome to FitTrack!\");","lastModifiedDate":"2023-10-13"},{"lineNumber":57,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(LOGO);","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"J0shuaLeong"},"content":" printLine();","lastModifiedDate":"2023-10-19"},{"lineNumber":59,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":60,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":61,"author":{"gitId":"ICubE-"},"content":" public void printCommandResult(CommandResult commandResult) {","lastModifiedDate":"2023-10-09"},{"lineNumber":62,"author":{"gitId":"ICubE-"},"content":" System.out.println(commandResult.getFeedback());","lastModifiedDate":"2023-10-09"},{"lineNumber":63,"author":{"gitId":"ICubE-"},"content":" printBlankLine();","lastModifiedDate":"2023-10-10"},{"lineNumber":64,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":65,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":66,"author":{"gitId":"J0shuaLeong"},"content":" /**","lastModifiedDate":"2023-10-13"},{"lineNumber":67,"author":{"gitId":"J0shuaLeong"},"content":" * Prints the profile details of the user after user has","lastModifiedDate":"2023-10-19"},{"lineNumber":68,"author":{"gitId":"J0shuaLeong"},"content":" * entered details for the first time.","lastModifiedDate":"2023-10-19"},{"lineNumber":69,"author":{"gitId":"J0shuaLeong"},"content":" *","lastModifiedDate":"2023-10-13"},{"lineNumber":70,"author":{"gitId":"ICubE-"},"content":" * @param profile user profile","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"J0shuaLeong"},"content":" */","lastModifiedDate":"2023-10-13"},{"lineNumber":72,"author":{"gitId":"ICubE-"},"content":" public void printProfileDetails(UserProfile profile) {","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"ICubE-"},"content":" System.out.println(\"Here are your profile settings.\");","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(\"Height: \" + profile.toString());","lastModifiedDate":"2023-10-20"},{"lineNumber":75,"author":{"gitId":"J0shuaLeong"},"content":" printLine();","lastModifiedDate":"2023-10-19"},{"lineNumber":76,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":77,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"J0shuaLeong":25,"ICubE-":52}},{"path":"src/main/java/fittrack/UserProfile.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"J0shuaLeong"},"content":"import java.text.DecimalFormat;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.data.Height;","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.data.Weight;","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.data.Calories;","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"public class UserProfile {","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" private final DecimalFormat df \u003d new DecimalFormat(\"0.00\");","lastModifiedDate":"2023-10-20"},{"lineNumber":10,"author":{"gitId":"J0shuaLeong"},"content":" private Height height;","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"J0shuaLeong"},"content":" private Weight weight;","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"J0shuaLeong"},"content":" private Calories dailyCalorieLimit;","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" private double bmi;","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" public UserProfile() {","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" this(new Height(1), new Weight(0), new Calories(0));","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":" public UserProfile(Height height, Weight weight, Calories dailyCalorieLimit) {","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" this.height \u003d height;","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" this.weight \u003d weight;","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" this.dailyCalorieLimit \u003d dailyCalorieLimit;","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" updateBmi();","lastModifiedDate":"2023-10-21"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"J0shuaLeong"},"content":" public Height getHeight() {","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" return height;","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"J0shuaLeong"},"content":" public void setHeight(Height height) {","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"J0shuaLeong"},"content":" this.height \u003d height;","lastModifiedDate":"2023-10-13"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" updateBmi();","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":35,"author":{"gitId":"J0shuaLeong"},"content":" public Weight getWeight() {","lastModifiedDate":"2023-10-20"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" return weight;","lastModifiedDate":"2023-10-16"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":39,"author":{"gitId":"J0shuaLeong"},"content":" public void setWeight(Weight weight) {","lastModifiedDate":"2023-10-20"},{"lineNumber":40,"author":{"gitId":"J0shuaLeong"},"content":" this.weight \u003d weight;","lastModifiedDate":"2023-10-13"},{"lineNumber":41,"author":{"gitId":"ICubE-"},"content":" updateBmi();","lastModifiedDate":"2023-10-21"},{"lineNumber":42,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":43,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":44,"author":{"gitId":"J0shuaLeong"},"content":" public Calories getDailyCalorieLimit() {","lastModifiedDate":"2023-10-20"},{"lineNumber":45,"author":{"gitId":"ICubE-"},"content":" return dailyCalorieLimit;","lastModifiedDate":"2023-10-16"},{"lineNumber":46,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"J0shuaLeong"},"content":" public void setDailyCalorieLimit(Calories dailyCalorieLimit) {","lastModifiedDate":"2023-10-20"},{"lineNumber":49,"author":{"gitId":"ICubE-"},"content":" this.dailyCalorieLimit \u003d dailyCalorieLimit;","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"ICubE-"},"content":" public double getBmi() {","lastModifiedDate":"2023-10-20"},{"lineNumber":53,"author":{"gitId":"ICubE-"},"content":" return bmi;","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":55,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":56,"author":{"gitId":"ICubE-"},"content":" private void updateBmi() {","lastModifiedDate":"2023-10-21"},{"lineNumber":57,"author":{"gitId":"ICubE-"},"content":" this.bmi \u003d calculateBmi(height, weight);","lastModifiedDate":"2023-10-21"},{"lineNumber":58,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":59,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":60,"author":{"gitId":"ICubE-"},"content":" public double calculateBmi(Height height, Weight weight) {","lastModifiedDate":"2023-10-21"},{"lineNumber":61,"author":{"gitId":"ICubE-"},"content":" assert (height !\u003d null \u0026\u0026 height.value \u003e 0 \u0026\u0026 weight !\u003d null);","lastModifiedDate":"2023-10-21"},{"lineNumber":62,"author":{"gitId":"ICubE-"},"content":" double heightInMetres \u003d height.value / 100;","lastModifiedDate":"2023-10-21"},{"lineNumber":63,"author":{"gitId":"ICubE-"},"content":" return weight.value / heightInMetres / heightInMetres;","lastModifiedDate":"2023-10-21"},{"lineNumber":64,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":65,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":66,"author":{"gitId":"ICubE-"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":67,"author":{"gitId":"J0shuaLeong"},"content":" return \"Height: \" + height.toString() + \"\\n\" +","lastModifiedDate":"2023-10-20"},{"lineNumber":68,"author":{"gitId":"J0shuaLeong"},"content":" \"Weight: \" + weight.toString() + \"\\n\" +","lastModifiedDate":"2023-10-20"},{"lineNumber":69,"author":{"gitId":"J0shuaLeong"},"content":" \"Daily calorie limit: \" + dailyCalorieLimit.toString() + \"\\n\" +","lastModifiedDate":"2023-10-20"},{"lineNumber":70,"author":{"gitId":"ICubE-"},"content":" \"BMI: \" + df.format(bmi);","lastModifiedDate":"2023-10-21"},{"lineNumber":71,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"J0shuaLeong":28,"ICubE-":44}},{"path":"src/main/java/fittrack/WorkoutList.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.data.Workout;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"farissirraj"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"public class WorkoutList {","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"marklin2234"},"content":" private int workoutListSize \u003d 0;","lastModifiedDate":"2023-10-22"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" private ArrayList\u003cWorkout\u003e workoutList;","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"farissirraj"},"content":" public WorkoutList() {","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"farissirraj"},"content":" workoutList \u003d new ArrayList\u003c\u003e();","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"J0shuaLeong"},"content":" //TODO load contents into workoutlist","lastModifiedDate":"2023-10-22"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":" public WorkoutList(ArrayList\u003cWorkout\u003e workoutList) {","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":" this.workoutList \u003d workoutList;","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"J0shuaLeong"},"content":" public ArrayList\u003cWorkout\u003e getWorkoutList() {","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"J0shuaLeong"},"content":" return this.workoutList;","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" public void addToList(Workout newWorkout) {","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"farissirraj"},"content":" workoutList.add(newWorkout);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"marklin2234"},"content":" workoutListSize++;","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" public void deleteWorkout(int workoutIndex) {","lastModifiedDate":"2023-10-21"},{"lineNumber":30,"author":{"gitId":"farissirraj"},"content":" workoutList.remove((workoutIndex - 1));","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"marklin2234"},"content":" workoutListSize--;","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"marklin2234"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"marklin2234"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"marklin2234"},"content":" public int getWorkoutListSize() {","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"marklin2234"},"content":" return workoutListSize;","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"farissirraj"},"content":" @Override","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"farissirraj"},"content":" public String toString() {","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"farissirraj"},"content":" int counter \u003d 1;","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"farissirraj"},"content":" StringBuilder output \u003d new StringBuilder();","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"farissirraj"},"content":" for (Workout workout : workoutList) {","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"farissirraj"},"content":" output.append(counter).append(\".\").append(workout.toString()).append(\"\\n\");","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"farissirraj"},"content":" counter +\u003d 1;","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"farissirraj"},"content":" return output.toString();","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":49,"author":{"gitId":"farissirraj"},"content":" public Workout getWorkout(int workoutIndex) {","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"farissirraj"},"content":" return workoutList.get(workoutIndex - 1);","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"J0shuaLeong":9,"ICubE-":9,"marklin2234":7,"farissirraj":28}},{"path":"src/main/java/fittrack/command/AddMealCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.data.Meal;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"NgLixuanNixon"},"content":"import fittrack.parser.NumberFormatException;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"NgLixuanNixon"},"content":"import fittrack.parser.PatternMatchFailException;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"public class AddMealCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" public static final String COMMAND_WORD \u003d \"addmeal\";","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"NgLixuanNixon"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" String.format(\"`%s` adds your daily meal data to the list.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" private static final String USAGE \u003d String.format(","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" \"Type `%s \u003cMEAL_NAME\u003e c/\u003cCALORIES\u003e` to add today\u0027s meal.\\n\" +","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" \"Type `%s \u003cMEAL_NAME\u003e c/\u003cCALORIES\u003e d/\u003cDATE\u003e` to add a meal.\\n\" +","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" \"You should type \u003cDATE\u003e in format of `yyyy-MM-dd`.\",","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" COMMAND_WORD, COMMAND_WORD","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" );","lastModifiedDate":"2023-10-21"},{"lineNumber":18,"author":{"gitId":"NgLixuanNixon"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" private Meal newMeal;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-09"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" mealList.addToList(newMeal);","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"NgLixuanNixon"},"content":" return new CommandResult(\"I\u0027ve added the following meal:\" + \"\\n\" + newMeal.toString());","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"NgLixuanNixon"},"content":" public void setArguments(String args, CommandParser parser)","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" throws PatternMatchFailException, NumberFormatException {","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" newMeal \u003d parser.parseMeal(args);","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-10"},{"lineNumber":36,"author":{"gitId":"NgLixuanNixon"},"content":" return HELP;","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"NgLixuanNixon":9,"ICubE-":29}},{"path":"src/main/java/fittrack/command/AddWorkoutCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.data.Workout;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.NumberFormatException;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.PatternMatchFailException;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"public class AddWorkoutCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" public static final String COMMAND_WORD \u003d \"addworkout\";","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"farissirraj"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" String.format(\"`%s` adds your daily workout data to the list.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" private static final String USAGE \u003d String.format(","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" \"Type `%s \u003cWORKOUT_NAME\u003e c/\u003cCALORIES\u003e` to add today\u0027s workout.\\n\" +","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" \"Type `%s \u003cWORKOUT_NAME\u003e c/\u003cCALORIES\u003e d/\u003cDATE\u003e` to add a workout.\\n\" +","lastModifiedDate":"2023-10-21"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" \"You should type \u003cDATE\u003e in format of `yyyy-MM-dd`.\",","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" COMMAND_WORD, COMMAND_WORD","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" );","lastModifiedDate":"2023-10-21"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-18"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"farissirraj"},"content":" private Workout newWorkout;","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-09"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" workoutList.addToList(newWorkout);","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"farissirraj"},"content":" return new CommandResult(\"I\u0027ve added the following workout:\" + \"\\n\" + newWorkout.toString());","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" public void setArguments(String args, CommandParser parser)","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" throws PatternMatchFailException, NumberFormatException {","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" newWorkout \u003d parser.parseWorkout(args);","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-10"},{"lineNumber":36,"author":{"gitId":"farissirraj"},"content":" return HELP;","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"ICubE-":33,"farissirraj":5}},{"path":"src/main/java/fittrack/command/BmiCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"J0shuaLeong"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-19"},{"lineNumber":2,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":3,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-19"},{"lineNumber":4,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"public class BmiCommand extends Command {","lastModifiedDate":"2023-10-19"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":" public static final String COMMAND_WORD \u003d \"bmi\";","lastModifiedDate":"2023-10-19"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-19"},{"lineNumber":8,"author":{"gitId":"J0shuaLeong"},"content":" String.format(\"`%s` calculates your current BMI.\", COMMAND_WORD);","lastModifiedDate":"2023-10-19"},{"lineNumber":9,"author":{"gitId":"J0shuaLeong"},"content":" private static final String USAGE \u003d","lastModifiedDate":"2023-10-19"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" String.format(\"Type `%s` to view your BMI.\", COMMAND_WORD);","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"J0shuaLeong"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-19"},{"lineNumber":12,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":13,"author":{"gitId":"J0shuaLeong"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-19"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" return new CommandResult(String.format(\"Your current BMI is %.2f\", userProfile.getBmi()));","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":" public void setArguments(String args, CommandParser parser) {","lastModifiedDate":"2023-10-19"},{"lineNumber":20,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":21,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"J0shuaLeong"},"content":" @Override","lastModifiedDate":"2023-10-19"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-19"},{"lineNumber":24,"author":{"gitId":"J0shuaLeong"},"content":" return HELP;","lastModifiedDate":"2023-10-19"},{"lineNumber":25,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-19"},{"lineNumber":26,"author":{"gitId":"J0shuaLeong"},"content":"}","lastModifiedDate":"2023-10-19"}],"authorContributionMap":{"J0shuaLeong":24,"ICubE-":2}},{"path":"src/main/java/fittrack/command/Command.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.MealList;","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import fittrack.UserProfile;","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"import fittrack.WorkoutList;","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.storage.Storage;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.ParseException;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":"public abstract class Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" protected UserProfile userProfile;","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" protected MealList mealList;","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" protected WorkoutList workoutList;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":" protected Storage storage;","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" /**","lastModifiedDate":"2023-10-10"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" * Set data of the command for execution.","lastModifiedDate":"2023-10-10"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" *","lastModifiedDate":"2023-10-10"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" * @param userProfile user profile","lastModifiedDate":"2023-10-10"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" * @param mealList meal list","lastModifiedDate":"2023-10-10"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" * @param workoutList work list","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-10"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":" public void setData(UserProfile userProfile, MealList mealList, WorkoutList workoutList, Storage storage) {","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" this.userProfile \u003d userProfile;","lastModifiedDate":"2023-10-09"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" this.mealList \u003d mealList;","lastModifiedDate":"2023-10-09"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" this.workoutList \u003d workoutList;","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"J0shuaLeong"},"content":" this.storage \u003d storage;","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" /**","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" * Execute the command.","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" *","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" * @return result of the execution","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" public abstract CommandResult execute();","lastModifiedDate":"2023-10-09"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":" /**","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" * Apply arguments to its field using parser.","lastModifiedDate":"2023-10-10"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" *","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"ICubE-"},"content":" * @param args arguments as a string","lastModifiedDate":"2023-10-10"},{"lineNumber":41,"author":{"gitId":"ICubE-"},"content":" * @param parser parser","lastModifiedDate":"2023-10-10"},{"lineNumber":42,"author":{"gitId":"ICubE-"},"content":" * @throws ParseException if parse fails","lastModifiedDate":"2023-10-16"},{"lineNumber":43,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-10"},{"lineNumber":44,"author":{"gitId":"ICubE-"},"content":" public abstract void setArguments(String args, CommandParser parser) throws ParseException;","lastModifiedDate":"2023-10-16"},{"lineNumber":45,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":46,"author":{"gitId":"ICubE-"},"content":" /**","lastModifiedDate":"2023-10-10"},{"lineNumber":47,"author":{"gitId":"ICubE-"},"content":" * Returns help of the command.","lastModifiedDate":"2023-10-10"},{"lineNumber":48,"author":{"gitId":"ICubE-"},"content":" *","lastModifiedDate":"2023-10-10"},{"lineNumber":49,"author":{"gitId":"ICubE-"},"content":" * @return help","lastModifiedDate":"2023-10-10"},{"lineNumber":50,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-10"},{"lineNumber":51,"author":{"gitId":"ICubE-"},"content":" protected abstract String getHelp();","lastModifiedDate":"2023-10-10"},{"lineNumber":52,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"J0shuaLeong":4,"ICubE-":48}},{"path":"src/main/java/fittrack/command/CommandResult.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"public class CommandResult {","lastModifiedDate":"2023-10-09"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":" private String feedback;","lastModifiedDate":"2023-10-09"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":" public CommandResult(String feedback) {","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":" setFeedback(feedback);","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" public String getFeedback() {","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" return feedback;","lastModifiedDate":"2023-10-09"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" public void setFeedback(String feedback) {","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" this.feedback \u003d feedback;","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"ICubE-":17}},{"path":"src/main/java/fittrack/command/DeleteMealCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.data.Meal;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"public class DeleteMealCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":" public static final String COMMAND_WORD \u003d \"deletemeal\";","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" String.format(\"`%s` deletes your daily meal data from the list.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" private static final String USAGE \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" String.format(\"Type `%s \u003cINDEX\u003e` to delete the meal by an index.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" private int mealIndex;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"NgLixuanNixon"},"content":" Meal toDelete \u003d mealList.getMeal(mealIndex);","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" mealList.deleteMeal(mealIndex);","lastModifiedDate":"2023-10-21"},{"lineNumber":20,"author":{"gitId":"NgLixuanNixon"},"content":" return new CommandResult(\"I\u0027ve deleted the following meal:\" + \"\\n\" + toDelete.toString());","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" public void setArguments(String args, CommandParser parser) {","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" // TODO: Try to make parse method in CommandParser and","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" // TODO: use the method by parser.parseXXX();","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" // TODO: Refer to CommandParser.parseProfile().","lastModifiedDate":"2023-10-16"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" mealIndex \u003d Integer.parseInt(args);","lastModifiedDate":"2023-10-16"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" return HELP;","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"NgLixuanNixon":2,"ICubE-":34}},{"path":"src/main/java/fittrack/command/DeleteWorkoutCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"farissirraj"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.data.Workout;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"marklin2234"},"content":"import fittrack.parser.ParseException;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"public class DeleteWorkoutCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" public static final String COMMAND_WORD \u003d \"deleteworkout\";","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" String.format(\"`%s` deletes your daily workout data from the list.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" private static final String USAGE \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" String.format(\"Type `%s \u003cINDEX\u003e` to delete the workout by an index.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" private int workoutIndex;","lastModifiedDate":"2023-10-21"},{"lineNumber":16,"author":{"gitId":"marklin2234"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"farissirraj"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"farissirraj"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" Workout toDelete \u003d workoutList.getWorkout(workoutIndex);","lastModifiedDate":"2023-10-21"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" workoutList.deleteWorkout(workoutIndex);","lastModifiedDate":"2023-10-21"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" return new CommandResult(\"I\u0027ve deleted the following workout:\" + \"\\n\" + toDelete.toString());","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"marklin2234"},"content":" public void setArguments(String args, CommandParser parser) throws ParseException {","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"marklin2234"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" workoutIndex \u003d Integer.parseInt(args);","lastModifiedDate":"2023-10-21"},{"lineNumber":28,"author":{"gitId":"marklin2234"},"content":" if (workoutIndex \u003e workoutList.getWorkoutListSize()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"marklin2234"},"content":" throw new ParseException(\"Index given is larger than array.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"marklin2234"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":31,"author":{"gitId":"marklin2234"},"content":" } catch (NumberFormatException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"marklin2234"},"content":" throw new ParseException(\"Argument is not an integer.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"J0shuaLeong"},"content":" } catch (NullPointerException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"J0shuaLeong"},"content":" throw new ParseException(\"Workout list is empty.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"marklin2234"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"ICubE-"},"content":" return HELP;","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":42,"author":{"gitId":"farissirraj"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"J0shuaLeong":2,"ICubE-":23,"marklin2234":10,"farissirraj":7}},{"path":"src/main/java/fittrack/command/EditProfileCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.UserProfile;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.parser.NegativeNumberException;","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.NumberFormatException;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.parser.PatternMatchFailException;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":"public class EditProfileCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" public static final String COMMAND_WORD \u003d \"editprofile\";","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" String.format(\"`%s` allows you to edit your profile.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" private static final String USAGE \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" String.format(\"Type `%s h/\u003cHEIGHT\u003e w/\u003cWEIGHT\u003e l/\u003cCALORIE_LIMIT\u003e` to edit.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" UserProfile newProfile;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" userProfile.setHeight(newProfile.getHeight());","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" userProfile.setWeight(newProfile.getWeight());","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" userProfile.setDailyCalorieLimit(newProfile.getDailyCalorieLimit());","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"J0shuaLeong"},"content":" return new CommandResult(\"Here is your updated profile:\\n\" + userProfile.toString());","lastModifiedDate":"2023-10-21"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" public void setArguments(String args, CommandParser parser)","lastModifiedDate":"2023-10-16"},{"lineNumber":29,"author":{"gitId":"J0shuaLeong"},"content":" throws PatternMatchFailException, NumberFormatException, NegativeNumberException {","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" newProfile \u003d parser.parseProfile(args);","lastModifiedDate":"2023-10-16"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"J0shuaLeong"},"content":" return HELP;","lastModifiedDate":"2023-10-16"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"J0shuaLeong":6,"ICubE-":31}},{"path":"src/main/java/fittrack/command/ExitCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"public class ExitCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" public static final String COMMAND_WORD \u003d \"exit\";","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" private static final String DESCRIPTION \u003d \"`\" + COMMAND_WORD + \"` makes you to exit this program.\";","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" private static final String USAGE \u003d \"Type `exit` to exit.\";","lastModifiedDate":"2023-10-10"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"J0shuaLeong"},"content":" private static final String MESSAGE_SAVEFILE \u003d \"Saving data ...\";","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":" private static final String MESSAGE_EXIT \u003d \"Goodbye! Hope to see you soon!\";","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" public static boolean isExit(Command command) {","lastModifiedDate":"2023-10-09"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" return command instanceof ExitCommand;","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"J0shuaLeong"},"content":" try {","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":" storage.saveProfile(userProfile);","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"J0shuaLeong"},"content":" storage.saveMeals(mealList);","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"J0shuaLeong"},"content":" storage.saveWorkouts(workoutList);","lastModifiedDate":"2023-10-22"},{"lineNumber":26,"author":{"gitId":"J0shuaLeong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-22"},{"lineNumber":27,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(e);","lastModifiedDate":"2023-10-22"},{"lineNumber":28,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":29,"author":{"gitId":"J0shuaLeong"},"content":" return new CommandResult(MESSAGE_SAVEFILE + \"\\n\" + MESSAGE_EXIT);","lastModifiedDate":"2023-10-22"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" public void setArguments(String args, CommandParser parser) {","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" return HELP;","lastModifiedDate":"2023-10-10"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":40,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"J0shuaLeong":12,"ICubE-":28}},{"path":"src/main/java/fittrack/command/HelpCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"import static fittrack.command.InvalidCommand.MESSAGE_INVALID_COMMAND;","lastModifiedDate":"2023-10-18"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"import static fittrack.parser.CommandParser.ALL_COMMAND_WORDS;","lastModifiedDate":"2023-10-10"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"public class HelpCommand extends Command {","lastModifiedDate":"2023-10-09"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" public static final String COMMAND_WORD \u003d \"help\";","lastModifiedDate":"2023-10-09"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-13"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" String.format(\"`%s` shows help message of the command.\", COMMAND_WORD);","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" private static final String KNOWN_COMMANDS \u003d \"Existing commands:\\n\" + ALL_COMMAND_WORDS;","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" static final String USAGE \u003d","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" String.format(\"Type `%s` or `%s \u003cCOMMAND\u003e` to view help.\", COMMAND_WORD, COMMAND_WORD);","lastModifiedDate":"2023-10-13"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + KNOWN_COMMANDS + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" private String helpMessage;","lastModifiedDate":"2023-10-10"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" private Class\u003c? extends Command\u003e commandType;","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-09"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" return new CommandResult(helpMessage);","lastModifiedDate":"2023-10-10"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" public void setArguments(String args, CommandParser parser) {","lastModifiedDate":"2023-10-10"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" if (args.isEmpty()) {","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" helpMessage \u003d HELP;","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" return;","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" String word \u003d parser.getFirstWord(args);","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" Command blankCommand \u003d parser.getBlankCommand(word);","lastModifiedDate":"2023-10-10"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" commandType \u003d blankCommand.getClass();","lastModifiedDate":"2023-10-18"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" if (blankCommand instanceof InvalidCommand) {","lastModifiedDate":"2023-10-10"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" helpMessage \u003d String.format(MESSAGE_INVALID_COMMAND, word) + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"ICubE-"},"content":" return;","lastModifiedDate":"2023-10-10"},{"lineNumber":41,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":42,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":43,"author":{"gitId":"ICubE-"},"content":" helpMessage \u003d blankCommand.getHelp();","lastModifiedDate":"2023-10-10"},{"lineNumber":44,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":45,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":46,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":47,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-10"},{"lineNumber":48,"author":{"gitId":"ICubE-"},"content":" return HELP;","lastModifiedDate":"2023-10-10"},{"lineNumber":49,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":50,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":51,"author":{"gitId":"ICubE-"},"content":" public String getHelpMessage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":52,"author":{"gitId":"ICubE-"},"content":" return helpMessage;","lastModifiedDate":"2023-10-17"},{"lineNumber":53,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":54,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"ICubE-"},"content":" public Class\u003c? extends Command\u003e getCommandType() {","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"ICubE-"},"content":" return commandType;","lastModifiedDate":"2023-10-18"},{"lineNumber":57,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":58,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"ICubE-":58}},{"path":"src/main/java/fittrack/command/InvalidCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-10"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"public class InvalidCommand extends Command {","lastModifiedDate":"2023-10-10"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":" public static final String MESSAGE_INVALID_COMMAND \u003d \"`%s` is an invalid command.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" private String helpMessage;","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-10"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" return new CommandResult(helpMessage);","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" public void setArguments(String inputLine, CommandParser parser) {","lastModifiedDate":"2023-10-18"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" HelpCommand helpCommand \u003d new HelpCommand();","lastModifiedDate":"2023-10-18"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" helpCommand.setArguments(inputLine, parser);","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" String message \u003d helpCommand.execute().getFeedback();","lastModifiedDate":"2023-10-18"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" if (helpCommand.getCommandType() \u003d\u003d InvalidCommand.class) {","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" helpMessage \u003d message;","lastModifiedDate":"2023-10-18"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" } else {","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" helpMessage \u003d String.format(MESSAGE_INVALID_COMMAND, inputLine) + \"\\n\" + message;","lastModifiedDate":"2023-10-18"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" assert false;","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" throw new UnsupportedOperationException();","lastModifiedDate":"2023-10-10"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"ICubE-":34}},{"path":"src/main/java/fittrack/command/SaveCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"J0shuaLeong"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":"public class SaveCommand extends Command {","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"J0shuaLeong"},"content":" public static final String COMMAND_WORD \u003d \"save\";","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"J0shuaLeong"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-20"},{"lineNumber":10,"author":{"gitId":"J0shuaLeong"},"content":" String.format(\"`%s` saves your profile, meals and workout data.\", COMMAND_WORD);","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"J0shuaLeong"},"content":" private static final String USAGE \u003d","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"J0shuaLeong"},"content":" String.format(\"Type `%s` to save your profile, meals and workout data.\", COMMAND_WORD);","lastModifiedDate":"2023-10-21"},{"lineNumber":13,"author":{"gitId":"J0shuaLeong"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"J0shuaLeong"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":" try {","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":" storage.saveProfile(userProfile);","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":" storage.saveMeals(mealList);","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"J0shuaLeong"},"content":" storage.saveWorkouts(workoutList);","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"J0shuaLeong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(e);","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"J0shuaLeong"},"content":" return new CommandResult(\"Your data has been saved!\");","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"J0shuaLeong"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"J0shuaLeong"},"content":" public void setArguments(String args, CommandParser parser) {","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"J0shuaLeong"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"J0shuaLeong"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-20"},{"lineNumber":33,"author":{"gitId":"J0shuaLeong"},"content":" return HELP;","lastModifiedDate":"2023-10-20"},{"lineNumber":34,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"J0shuaLeong"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"J0shuaLeong":35}},{"path":"src/main/java/fittrack/command/ViewMealsCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-13"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-13"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"public class ViewMealsCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":" public static final String COMMAND_WORD \u003d \"viewmeals\";","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-13"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" String.format(\"`%s` shows the list of all meals.\", COMMAND_WORD);","lastModifiedDate":"2023-10-13"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" private static final String USAGE \u003d","lastModifiedDate":"2023-10-13"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" String.format(\"Type `%s` to view the list of meals.\", COMMAND_WORD);","lastModifiedDate":"2023-10-13"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-13"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" String feedback \u003d \"These are the meals you have consumed:\\n\" + mealList.toString();","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" return new CommandResult(feedback);","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" public void setArguments(String args, CommandParser parser) {","lastModifiedDate":"2023-10-13"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-13"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-13"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-13"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" return HELP;","lastModifiedDate":"2023-10-13"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-13"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-13"}],"authorContributionMap":{"ICubE-":27}},{"path":"src/main/java/fittrack/command/ViewProfileCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"J0shuaLeong"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"public class ViewProfileCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":" public static final String COMMAND_WORD \u003d \"viewprofile\";","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"J0shuaLeong"},"content":" String.format(\"`%s` shows all profile details.\", COMMAND_WORD);","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"J0shuaLeong"},"content":" private static final String USAGE \u003d","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"J0shuaLeong"},"content":" String.format(\"Type `%s` to view your profile.\", COMMAND_WORD);","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"J0shuaLeong"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"J0shuaLeong"},"content":" //TODO: get profile details and make them to lines of strings.","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":" return new CommandResult(\"Your Profile:\\n\" + userProfile.toString());","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"J0shuaLeong"},"content":" public void setArguments(String args, CommandParser parser) {","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"J0shuaLeong"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-16"},{"lineNumber":25,"author":{"gitId":"J0shuaLeong"},"content":" return HELP;","lastModifiedDate":"2023-10-16"},{"lineNumber":26,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":27,"author":{"gitId":"J0shuaLeong"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"J0shuaLeong":26,"ICubE-":1}},{"path":"src/main/java/fittrack/command/ViewWorkoutsCommand.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"farissirraj"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"public class ViewWorkoutsCommand extends Command {","lastModifiedDate":"2023-10-16"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":" public static final String COMMAND_WORD \u003d \"viewworkouts\";","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"farissirraj"},"content":" private static final String DESCRIPTION \u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" String.format(\"`%s` shows the list of all workouts.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":9,"author":{"gitId":"farissirraj"},"content":" private static final String USAGE \u003d","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" String.format(\"Type `%s` to view the list of your workouts.\", COMMAND_WORD);","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" public static final String HELP \u003d DESCRIPTION + \"\\n\" + USAGE;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":13,"author":{"gitId":"farissirraj"},"content":" /**","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"farissirraj"},"content":" * Execute the command","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"farissirraj"},"content":" * @return list of workouts","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"farissirraj"},"content":" */","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"farissirraj"},"content":" @Override","lastModifiedDate":"2023-10-09"},{"lineNumber":18,"author":{"gitId":"farissirraj"},"content":" public CommandResult execute() {","lastModifiedDate":"2023-10-09"},{"lineNumber":19,"author":{"gitId":"farissirraj"},"content":" String feedback \u003d \"These are the workouts you have done:\\n\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"farissirraj"},"content":" workoutList.toString();","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"farissirraj"},"content":" return new CommandResult(feedback);","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" public void setArguments(String args, CommandParser parser) {","lastModifiedDate":"2023-10-10"},{"lineNumber":27,"author":{"gitId":"farissirraj"},"content":" return;","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-10"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" protected String getHelp() {","lastModifiedDate":"2023-10-10"},{"lineNumber":32,"author":{"gitId":"farissirraj"},"content":" return HELP;","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":34,"author":{"gitId":"farissirraj"},"content":"}","lastModifiedDate":"2023-10-09"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"ICubE-":16,"farissirraj":19}},{"path":"src/main/java/fittrack/data/Calories.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.data;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import java.util.Objects;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"public class Calories {","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":" public double value;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" public Calories(double calories) {","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" this.value \u003d calories;","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" return true;","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" if (o \u003d\u003d null || getClass() !\u003d o.getClass()) {","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" return false;","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" Calories calories1 \u003d (Calories) o;","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" return Double.compare(value, calories1.value) \u003d\u003d 0;","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" public int hashCode() {","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" return Objects.hash(value);","lastModifiedDate":"2023-10-21"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" public String toString() {","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" return value + \"kcal\";","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"ICubE-":33}},{"path":"src/main/java/fittrack/data/Date.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.data;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import java.time.LocalDate;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import java.time.format.DateTimeFormatter;","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"import java.util.Locale;","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"import java.util.Objects;","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":"public class Date implements Comparable\u003cDate\u003e {","lastModifiedDate":"2023-10-20"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" private static final Locale LOCALE \u003d Locale.ENGLISH;","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" private final LocalDate localDate;","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" public Date(String date) throws DateTimeParseException {","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" this.localDate \u003d LocalDate.parse(date);","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" public Date(int year, int month, int day) {","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" this.localDate \u003d LocalDate.of(year, month, day);","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" public Date(LocalDate localDate) {","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" this.localDate \u003d localDate;","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" return true;","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" if (o \u003d\u003d null || getClass() !\u003d o.getClass()) {","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" return false;","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" Date date \u003d (Date) o;","lastModifiedDate":"2023-10-20"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" return Objects.equals(localDate, date.localDate);","lastModifiedDate":"2023-10-20"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" public int hashCode() {","lastModifiedDate":"2023-10-20"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" return Objects.hash(localDate);","lastModifiedDate":"2023-10-20"},{"lineNumber":40,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":41,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":43,"author":{"gitId":"ICubE-"},"content":" public String toString() {","lastModifiedDate":"2023-10-20"},{"lineNumber":44,"author":{"gitId":"ICubE-"},"content":" DateTimeFormatter formatter \u003d DateTimeFormatter.ISO_LOCAL_DATE.withLocale(LOCALE);","lastModifiedDate":"2023-10-20"},{"lineNumber":45,"author":{"gitId":"ICubE-"},"content":" return localDate.format(formatter);","lastModifiedDate":"2023-10-20"},{"lineNumber":46,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":47,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":48,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":49,"author":{"gitId":"ICubE-"},"content":" public int compareTo(Date o) {","lastModifiedDate":"2023-10-20"},{"lineNumber":50,"author":{"gitId":"ICubE-"},"content":" return this.localDate.compareTo(o.localDate);","lastModifiedDate":"2023-10-20"},{"lineNumber":51,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":52,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":53,"author":{"gitId":"ICubE-"},"content":" public static Date today() {","lastModifiedDate":"2023-10-20"},{"lineNumber":54,"author":{"gitId":"ICubE-"},"content":" return new Date(LocalDate.now());","lastModifiedDate":"2023-10-20"},{"lineNumber":55,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":56,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"ICubE-":56}},{"path":"src/main/java/fittrack/data/Height.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.data;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import java.util.Objects;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"public class Height {","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":" public double value;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" public Height(double height) {","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" this.value \u003d height;","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" return true;","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" if (o \u003d\u003d null || getClass() !\u003d o.getClass()) {","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" return false;","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" Height height1 \u003d (Height) o;","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" return Double.compare(value, height1.value) \u003d\u003d 0;","lastModifiedDate":"2023-10-21"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" public int hashCode() {","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" return Objects.hash(value);","lastModifiedDate":"2023-10-21"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" public String toString() {","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" return value + \"cm\";","lastModifiedDate":"2023-10-21"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"ICubE-":33}},{"path":"src/main/java/fittrack/data/Meal.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.data;","lastModifiedDate":"2023-10-21"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":3,"author":{"gitId":"NgLixuanNixon"},"content":"public class Meal {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":" private final String name;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":" private final Calories calories;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":" private final Date date;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" public Meal(String name, Calories calories, Date date) {","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" assert name !\u003d null \u0026\u0026 calories !\u003d null \u0026\u0026 date !\u003d null;","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"NgLixuanNixon"},"content":" this.calories \u003d calories;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":" public String formatToFile() {","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":" return String.format(\"M | %s | %s | %s\", name, calories, date);","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"NgLixuanNixon"},"content":" @Override","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"NgLixuanNixon"},"content":" public String toString() {","lastModifiedDate":"2023-10-16"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" return String.format(\"[M] %s (%s, %s)\", name, calories, date);","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":24,"author":{"gitId":"NgLixuanNixon"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"NgLixuanNixon":9,"J0shuaLeong":4,"ICubE-":11}},{"path":"src/main/java/fittrack/data/Weight.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.data;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import java.util.Objects;","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"public class Weight {","lastModifiedDate":"2023-10-20"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":" public double value;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" public Weight(double weight) {","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" this.value \u003d weight;","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" public boolean equals(Object o) {","lastModifiedDate":"2023-10-20"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" if (this \u003d\u003d o) {","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" return true;","lastModifiedDate":"2023-10-20"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" if (o \u003d\u003d null || getClass() !\u003d o.getClass()) {","lastModifiedDate":"2023-10-20"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" return false;","lastModifiedDate":"2023-10-20"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" Weight weight1 \u003d (Weight) o;","lastModifiedDate":"2023-10-20"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" return Double.compare(value, weight1.value) \u003d\u003d 0;","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" public int hashCode() {","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" return Objects.hash(value);","lastModifiedDate":"2023-10-21"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" @Override","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" public String toString() {","lastModifiedDate":"2023-10-20"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" return value + \"kg\";","lastModifiedDate":"2023-10-21"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"ICubE-":34}},{"path":"src/main/java/fittrack/data/Workout.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.data;","lastModifiedDate":"2023-10-21"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":3,"author":{"gitId":"farissirraj"},"content":"public class Workout {","lastModifiedDate":"2023-10-18"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":" private final String name;","lastModifiedDate":"2023-10-21"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":" private final Calories calories;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":" private final Date date;","lastModifiedDate":"2023-10-21"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":" public Workout(String name, Calories calories, Date date) {","lastModifiedDate":"2023-10-21"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":" assert name !\u003d null \u0026\u0026 calories !\u003d null \u0026\u0026 date !\u003d null;","lastModifiedDate":"2023-10-21"},{"lineNumber":10,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":11,"author":{"gitId":"farissirraj"},"content":" this.name \u003d name;","lastModifiedDate":"2023-10-18"},{"lineNumber":12,"author":{"gitId":"farissirraj"},"content":" this.calories \u003d calories;","lastModifiedDate":"2023-10-18"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" this.date \u003d date;","lastModifiedDate":"2023-10-21"},{"lineNumber":14,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":15,"author":{"gitId":"farissirraj"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":" public String formatToFile() {","lastModifiedDate":"2023-10-22"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":" return String.format(\"W | %s | %s | %s\", name, calories, date);","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"farissirraj"},"content":" @Override","lastModifiedDate":"2023-10-18"},{"lineNumber":21,"author":{"gitId":"farissirraj"},"content":" public String toString() {","lastModifiedDate":"2023-10-18"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" return String.format(\"[W] %s (%s, %s)\", name, calories, date);","lastModifiedDate":"2023-10-21"},{"lineNumber":23,"author":{"gitId":"farissirraj"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":24,"author":{"gitId":"farissirraj"},"content":"}","lastModifiedDate":"2023-10-18"}],"authorContributionMap":{"J0shuaLeong":4,"ICubE-":10,"farissirraj":10}},{"path":"src/main/java/fittrack/parser/CommandParser.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.parser;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.data.Meal;","lastModifiedDate":"2023-10-21"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import fittrack.UserProfile;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"import fittrack.data.Workout;","lastModifiedDate":"2023-10-21"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.data.Calories;","lastModifiedDate":"2023-10-20"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"import fittrack.data.Date;","lastModifiedDate":"2023-10-21"},{"lineNumber":8,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.data.Height;","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"NgLixuanNixon"},"content":"import fittrack.command.AddMealCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.AddWorkoutCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"NgLixuanNixon"},"content":"import fittrack.command.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"NgLixuanNixon"},"content":"import fittrack.command.DeleteMealCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.DeleteWorkoutCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"NgLixuanNixon"},"content":"import fittrack.command.EditProfileCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"NgLixuanNixon"},"content":"import fittrack.command.ExitCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"NgLixuanNixon"},"content":"import fittrack.command.HelpCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"NgLixuanNixon"},"content":"import fittrack.command.InvalidCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.ViewMealsCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.ViewWorkoutsCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":20,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.command.ViewProfileCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":21,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.command.BmiCommand;","lastModifiedDate":"2023-10-19"},{"lineNumber":22,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.command.SaveCommand;","lastModifiedDate":"2023-10-20"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.data.Weight;","lastModifiedDate":"2023-10-20"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":"import java.time.format.DateTimeParseException;","lastModifiedDate":"2023-10-21"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":"import java.util.regex.Matcher;","lastModifiedDate":"2023-10-09"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":"import java.util.regex.Pattern;","lastModifiedDate":"2023-10-09"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":"/**","lastModifiedDate":"2023-10-18"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" * Represents the parser which parses commands.","lastModifiedDate":"2023-10-18"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" * \u003cp\u003e","lastModifiedDate":"2023-10-18"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" * Referenced","lastModifiedDate":"2023-10-18"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" * \u003ca href\u003d\"https://github.com/se-edu/addressbook-level2/blob/master/src/seedu/addressbook/parser/Parser.java\"\u003ehere\u003c/a\u003e","lastModifiedDate":"2023-10-18"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" * to build main structure of this class.","lastModifiedDate":"2023-10-18"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-18"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":"public class CommandParser {","lastModifiedDate":"2023-10-09"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":" // This constant has to be changed whenever any command is added.","lastModifiedDate":"2023-10-10"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" public static final String ALL_COMMAND_WORDS \u003d \"help, exit, \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" \"editprofile, viewprofile, \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":40,"author":{"gitId":"ICubE-"},"content":" \"addmeal, deletemeal, viewmeals, \" +","lastModifiedDate":"2023-10-18"},{"lineNumber":41,"author":{"gitId":"J0shuaLeong"},"content":" \"addworkout, deleteworkout, viewworkouts, bmi, save\";","lastModifiedDate":"2023-10-20"},{"lineNumber":42,"author":{"gitId":"ICubE-"},"content":" ","lastModifiedDate":"2023-10-10"},{"lineNumber":43,"author":{"gitId":"ICubE-"},"content":" private static final Pattern COMMAND_PATTERN \u003d Pattern.compile(","lastModifiedDate":"2023-10-10"},{"lineNumber":44,"author":{"gitId":"ICubE-"},"content":" \"(?\u003cword\u003e\\\\S+)(?\u003cargs\u003e.*)\"","lastModifiedDate":"2023-10-09"},{"lineNumber":45,"author":{"gitId":"ICubE-"},"content":" );","lastModifiedDate":"2023-10-09"},{"lineNumber":46,"author":{"gitId":"NgLixuanNixon"},"content":" private static final Pattern PROFILE_PATTERN \u003d Pattern.compile(","lastModifiedDate":"2023-10-16"},{"lineNumber":47,"author":{"gitId":"ICubE-"},"content":" \"h/(?\u003cheight\u003e\\\\S+)\\\\s+w/(?\u003cweight\u003e\\\\S+)\\\\s+l/(?\u003ccalLimit\u003e\\\\S+)\"","lastModifiedDate":"2023-10-16"},{"lineNumber":48,"author":{"gitId":"ICubE-"},"content":" );","lastModifiedDate":"2023-10-10"},{"lineNumber":49,"author":{"gitId":"ICubE-"},"content":" private static final Pattern MEAL_PATTERN \u003d Pattern.compile(","lastModifiedDate":"2023-10-18"},{"lineNumber":50,"author":{"gitId":"ICubE-"},"content":" \"(?\u003cname\u003e.+)\\\\s+c/(?\u003ccalories\u003e\\\\S+)(\\\\s+d/(?\u003cdate\u003e\\\\S+))?\"","lastModifiedDate":"2023-10-21"},{"lineNumber":51,"author":{"gitId":"ICubE-"},"content":" );","lastModifiedDate":"2023-10-18"},{"lineNumber":52,"author":{"gitId":"ICubE-"},"content":" private static final Pattern WORKOUT_PATTERN \u003d Pattern.compile(","lastModifiedDate":"2023-10-18"},{"lineNumber":53,"author":{"gitId":"ICubE-"},"content":" \"(?\u003cname\u003e.+)\\\\s+c/(?\u003ccalories\u003e\\\\S+)(\\\\s+d/(?\u003cdate\u003e\\\\S+))?\"","lastModifiedDate":"2023-10-21"},{"lineNumber":54,"author":{"gitId":"NgLixuanNixon"},"content":" );","lastModifiedDate":"2023-10-18"},{"lineNumber":55,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":56,"author":{"gitId":"ICubE-"},"content":" public Command parseCommand(String userCommandLine) {","lastModifiedDate":"2023-10-09"},{"lineNumber":57,"author":{"gitId":"ICubE-"},"content":" final Matcher matcher \u003d COMMAND_PATTERN.matcher(userCommandLine.strip());","lastModifiedDate":"2023-10-10"},{"lineNumber":58,"author":{"gitId":"ICubE-"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-09"},{"lineNumber":59,"author":{"gitId":"ICubE-"},"content":" return getInvalidCommand(userCommandLine);","lastModifiedDate":"2023-10-17"},{"lineNumber":60,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":61,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":62,"author":{"gitId":"ICubE-"},"content":" final String word \u003d matcher.group(\"word\").strip();","lastModifiedDate":"2023-10-10"},{"lineNumber":63,"author":{"gitId":"ICubE-"},"content":" final String args \u003d matcher.group(\"args\").strip();","lastModifiedDate":"2023-10-10"},{"lineNumber":64,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":65,"author":{"gitId":"ICubE-"},"content":" Command command \u003d getBlankCommand(word);","lastModifiedDate":"2023-10-10"},{"lineNumber":66,"author":{"gitId":"ICubE-"},"content":" if (command instanceof InvalidCommand) {","lastModifiedDate":"2023-10-18"},{"lineNumber":67,"author":{"gitId":"ICubE-"},"content":" return getInvalidCommand(userCommandLine);","lastModifiedDate":"2023-10-18"},{"lineNumber":68,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":69,"author":{"gitId":"ICubE-"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":70,"author":{"gitId":"ICubE-"},"content":" command.setArguments(args, this);","lastModifiedDate":"2023-10-10"},{"lineNumber":71,"author":{"gitId":"ICubE-"},"content":" } catch (ParseException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"marklin2234"},"content":" System.out.println(e.getMessage());","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"ICubE-"},"content":" return getInvalidCommand(userCommandLine);","lastModifiedDate":"2023-10-17"},{"lineNumber":74,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":76,"author":{"gitId":"ICubE-"},"content":" return command;","lastModifiedDate":"2023-10-10"},{"lineNumber":77,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":78,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-09"},{"lineNumber":79,"author":{"gitId":"ICubE-"},"content":" public Command getBlankCommand(String word) {","lastModifiedDate":"2023-10-10"},{"lineNumber":80,"author":{"gitId":"ICubE-"},"content":" switch (word) {","lastModifiedDate":"2023-10-09"},{"lineNumber":81,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":82,"author":{"gitId":"ICubE-"},"content":" case HelpCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-10"},{"lineNumber":83,"author":{"gitId":"ICubE-"},"content":" return new HelpCommand();","lastModifiedDate":"2023-10-10"},{"lineNumber":84,"author":{"gitId":"ICubE-"},"content":" case ExitCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-09"},{"lineNumber":85,"author":{"gitId":"ICubE-"},"content":" return new ExitCommand();","lastModifiedDate":"2023-10-09"},{"lineNumber":86,"author":{"gitId":"ICubE-"},"content":" case EditProfileCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-09"},{"lineNumber":87,"author":{"gitId":"ICubE-"},"content":" return new EditProfileCommand();","lastModifiedDate":"2023-10-09"},{"lineNumber":88,"author":{"gitId":"ICubE-"},"content":" case ViewProfileCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"ICubE-"},"content":" return new ViewProfileCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"ICubE-"},"content":" case AddMealCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-09"},{"lineNumber":91,"author":{"gitId":"ICubE-"},"content":" return new AddMealCommand();","lastModifiedDate":"2023-10-09"},{"lineNumber":92,"author":{"gitId":"ICubE-"},"content":" case DeleteMealCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-09"},{"lineNumber":93,"author":{"gitId":"ICubE-"},"content":" return new DeleteMealCommand();","lastModifiedDate":"2023-10-09"},{"lineNumber":94,"author":{"gitId":"ICubE-"},"content":" case ViewMealsCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"ICubE-"},"content":" return new ViewMealsCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"ICubE-"},"content":" case AddWorkoutCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"ICubE-"},"content":" return new AddWorkoutCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"ICubE-"},"content":" case DeleteWorkoutCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"ICubE-"},"content":" return new DeleteWorkoutCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"ICubE-"},"content":" case ViewWorkoutsCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"ICubE-"},"content":" return new ViewWorkoutsCommand();","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"J0shuaLeong"},"content":" case BmiCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-19"},{"lineNumber":103,"author":{"gitId":"J0shuaLeong"},"content":" return new BmiCommand();","lastModifiedDate":"2023-10-19"},{"lineNumber":104,"author":{"gitId":"J0shuaLeong"},"content":" case SaveCommand.COMMAND_WORD:","lastModifiedDate":"2023-10-20"},{"lineNumber":105,"author":{"gitId":"J0shuaLeong"},"content":" return new SaveCommand();","lastModifiedDate":"2023-10-20"},{"lineNumber":106,"author":{"gitId":"ICubE-"},"content":" default:","lastModifiedDate":"2023-10-09"},{"lineNumber":107,"author":{"gitId":"ICubE-"},"content":" return new InvalidCommand();","lastModifiedDate":"2023-10-18"},{"lineNumber":108,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":109,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":110,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":111,"author":{"gitId":"ICubE-"},"content":" private InvalidCommand getInvalidCommand(String userCommandLine) {","lastModifiedDate":"2023-10-17"},{"lineNumber":112,"author":{"gitId":"ICubE-"},"content":" InvalidCommand invalidCommand \u003d new InvalidCommand();","lastModifiedDate":"2023-10-18"},{"lineNumber":113,"author":{"gitId":"ICubE-"},"content":" invalidCommand.setArguments(userCommandLine, this);","lastModifiedDate":"2023-10-18"},{"lineNumber":114,"author":{"gitId":"ICubE-"},"content":" return invalidCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":115,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-09"},{"lineNumber":116,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":117,"author":{"gitId":"ICubE-"},"content":" /**","lastModifiedDate":"2023-10-10"},{"lineNumber":118,"author":{"gitId":"J0shuaLeong"},"content":" * Parses user profile, format of `h/(HEIGHT) w/(WEIGHT) l/(CALORIES)`.","lastModifiedDate":"2023-10-20"},{"lineNumber":119,"author":{"gitId":"ICubE-"},"content":" *","lastModifiedDate":"2023-10-16"},{"lineNumber":120,"author":{"gitId":"ICubE-"},"content":" * @param profile profile as a string","lastModifiedDate":"2023-10-10"},{"lineNumber":121,"author":{"gitId":"ICubE-"},"content":" * @return height and weight as a double array","lastModifiedDate":"2023-10-10"},{"lineNumber":122,"author":{"gitId":"ICubE-"},"content":" * @throws PatternMatchFailException if regex match fails","lastModifiedDate":"2023-10-16"},{"lineNumber":123,"author":{"gitId":"ICubE-"},"content":" * @throws NumberFormatException if one of arguments is not double","lastModifiedDate":"2023-10-10"},{"lineNumber":124,"author":{"gitId":"ICubE-"},"content":" */","lastModifiedDate":"2023-10-10"},{"lineNumber":125,"author":{"gitId":"J0shuaLeong"},"content":" public UserProfile parseProfile(String profile)","lastModifiedDate":"2023-10-20"},{"lineNumber":126,"author":{"gitId":"J0shuaLeong"},"content":" throws PatternMatchFailException, NumberFormatException, NegativeNumberException {","lastModifiedDate":"2023-10-20"},{"lineNumber":127,"author":{"gitId":"NgLixuanNixon"},"content":" final Matcher matcher \u003d PROFILE_PATTERN.matcher(profile);","lastModifiedDate":"2023-10-16"},{"lineNumber":128,"author":{"gitId":"NgLixuanNixon"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-16"},{"lineNumber":129,"author":{"gitId":"ICubE-"},"content":" throw new PatternMatchFailException();","lastModifiedDate":"2023-10-16"},{"lineNumber":130,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":131,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":132,"author":{"gitId":"ICubE-"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":133,"author":{"gitId":"J0shuaLeong"},"content":" final double height \u003d Double.parseDouble(matcher.group(\"height\"));","lastModifiedDate":"2023-10-20"},{"lineNumber":134,"author":{"gitId":"J0shuaLeong"},"content":" final double weight \u003d Double.parseDouble(matcher.group(\"weight\"));","lastModifiedDate":"2023-10-20"},{"lineNumber":135,"author":{"gitId":"J0shuaLeong"},"content":" final double dailyCalorieLimit \u003d Double.parseDouble(matcher.group(\"calLimit\"));","lastModifiedDate":"2023-10-20"},{"lineNumber":136,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":137,"author":{"gitId":"J0shuaLeong"},"content":" // Height, weight and calories cannot be negative. Throw exception if it happens","lastModifiedDate":"2023-10-20"},{"lineNumber":138,"author":{"gitId":"J0shuaLeong"},"content":" if (height \u003c 0 || weight \u003c 0 || dailyCalorieLimit \u003c 0) {","lastModifiedDate":"2023-10-20"},{"lineNumber":139,"author":{"gitId":"J0shuaLeong"},"content":" throw new NegativeNumberException();","lastModifiedDate":"2023-10-20"},{"lineNumber":140,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":141,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":142,"author":{"gitId":"J0shuaLeong"},"content":" Height heightData \u003d new Height(height);","lastModifiedDate":"2023-10-20"},{"lineNumber":143,"author":{"gitId":"J0shuaLeong"},"content":" Weight weightData \u003d new Weight(weight);","lastModifiedDate":"2023-10-20"},{"lineNumber":144,"author":{"gitId":"J0shuaLeong"},"content":" Calories caloriesData \u003d new Calories(dailyCalorieLimit);","lastModifiedDate":"2023-10-20"},{"lineNumber":145,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":146,"author":{"gitId":"J0shuaLeong"},"content":" return new UserProfile(heightData, weightData, caloriesData);","lastModifiedDate":"2023-10-20"},{"lineNumber":147,"author":{"gitId":"ICubE-"},"content":" } catch (java.lang.NumberFormatException e) {","lastModifiedDate":"2023-10-16"},{"lineNumber":148,"author":{"gitId":"ICubE-"},"content":" throw new NumberFormatException();","lastModifiedDate":"2023-10-16"},{"lineNumber":149,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":150,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":151,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":152,"author":{"gitId":"ICubE-"},"content":" public Meal parseMeal(String meal) throws PatternMatchFailException, NumberFormatException {","lastModifiedDate":"2023-10-18"},{"lineNumber":153,"author":{"gitId":"ICubE-"},"content":" final Matcher matcher \u003d MEAL_PATTERN.matcher(meal);","lastModifiedDate":"2023-10-18"},{"lineNumber":154,"author":{"gitId":"NgLixuanNixon"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":155,"author":{"gitId":"NgLixuanNixon"},"content":" throw new PatternMatchFailException();","lastModifiedDate":"2023-10-18"},{"lineNumber":156,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":157,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":158,"author":{"gitId":"NgLixuanNixon"},"content":" final String name \u003d matcher.group(\"name\");","lastModifiedDate":"2023-10-18"},{"lineNumber":159,"author":{"gitId":"NgLixuanNixon"},"content":" final String calories \u003d matcher.group(\"calories\");","lastModifiedDate":"2023-10-18"},{"lineNumber":160,"author":{"gitId":"ICubE-"},"content":" final String date \u003d matcher.group(\"date\");","lastModifiedDate":"2023-10-21"},{"lineNumber":161,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":162,"author":{"gitId":"NgLixuanNixon"},"content":" try {","lastModifiedDate":"2023-10-18"},{"lineNumber":163,"author":{"gitId":"ICubE-"},"content":" double caloriesInDouble \u003d Double.parseDouble(calories);","lastModifiedDate":"2023-10-21"},{"lineNumber":164,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":165,"author":{"gitId":"ICubE-"},"content":" if (date \u003d\u003d null) {","lastModifiedDate":"2023-10-21"},{"lineNumber":166,"author":{"gitId":"ICubE-"},"content":" return new Meal(name, new Calories(caloriesInDouble), Date.today());","lastModifiedDate":"2023-10-21"},{"lineNumber":167,"author":{"gitId":"ICubE-"},"content":" } else {","lastModifiedDate":"2023-10-21"},{"lineNumber":168,"author":{"gitId":"ICubE-"},"content":" return new Meal(name, new Calories(caloriesInDouble), new Date(date));","lastModifiedDate":"2023-10-21"},{"lineNumber":169,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":170,"author":{"gitId":"NgLixuanNixon"},"content":" } catch (java.lang.NumberFormatException e) {","lastModifiedDate":"2023-10-18"},{"lineNumber":171,"author":{"gitId":"NgLixuanNixon"},"content":" throw new NumberFormatException();","lastModifiedDate":"2023-10-18"},{"lineNumber":172,"author":{"gitId":"ICubE-"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-21"},{"lineNumber":173,"author":{"gitId":"ICubE-"},"content":" throw new PatternMatchFailException();","lastModifiedDate":"2023-10-21"},{"lineNumber":174,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":175,"author":{"gitId":"NgLixuanNixon"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":176,"author":{"gitId":"NgLixuanNixon"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":177,"author":{"gitId":"ICubE-"},"content":" public Workout parseWorkout(String workout) throws PatternMatchFailException, NumberFormatException {","lastModifiedDate":"2023-10-18"},{"lineNumber":178,"author":{"gitId":"ICubE-"},"content":" final Matcher matcher \u003d WORKOUT_PATTERN.matcher(workout);","lastModifiedDate":"2023-10-18"},{"lineNumber":179,"author":{"gitId":"ICubE-"},"content":" if (!matcher.matches()) {","lastModifiedDate":"2023-10-18"},{"lineNumber":180,"author":{"gitId":"ICubE-"},"content":" throw new PatternMatchFailException();","lastModifiedDate":"2023-10-18"},{"lineNumber":181,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":182,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":183,"author":{"gitId":"ICubE-"},"content":" final String name \u003d matcher.group(\"name\");","lastModifiedDate":"2023-10-18"},{"lineNumber":184,"author":{"gitId":"ICubE-"},"content":" final String calories \u003d matcher.group(\"calories\");","lastModifiedDate":"2023-10-18"},{"lineNumber":185,"author":{"gitId":"ICubE-"},"content":" final String date \u003d matcher.group(\"date\");","lastModifiedDate":"2023-10-21"},{"lineNumber":186,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-18"},{"lineNumber":187,"author":{"gitId":"ICubE-"},"content":" try {","lastModifiedDate":"2023-10-18"},{"lineNumber":188,"author":{"gitId":"ICubE-"},"content":" double caloriesInDouble \u003d Double.parseDouble(calories);","lastModifiedDate":"2023-10-21"},{"lineNumber":189,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":190,"author":{"gitId":"ICubE-"},"content":" if (date \u003d\u003d null) {","lastModifiedDate":"2023-10-21"},{"lineNumber":191,"author":{"gitId":"ICubE-"},"content":" return new Workout(name, new Calories(caloriesInDouble), Date.today());","lastModifiedDate":"2023-10-21"},{"lineNumber":192,"author":{"gitId":"ICubE-"},"content":" } else {","lastModifiedDate":"2023-10-21"},{"lineNumber":193,"author":{"gitId":"ICubE-"},"content":" return new Workout(name, new Calories(caloriesInDouble), new Date(date));","lastModifiedDate":"2023-10-21"},{"lineNumber":194,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-21"},{"lineNumber":195,"author":{"gitId":"ICubE-"},"content":" } catch (java.lang.NumberFormatException e) {","lastModifiedDate":"2023-10-18"},{"lineNumber":196,"author":{"gitId":"ICubE-"},"content":" throw new NumberFormatException();","lastModifiedDate":"2023-10-18"},{"lineNumber":197,"author":{"gitId":"ICubE-"},"content":" } catch (DateTimeParseException e) {","lastModifiedDate":"2023-10-21"},{"lineNumber":198,"author":{"gitId":"ICubE-"},"content":" throw new PatternMatchFailException();","lastModifiedDate":"2023-10-21"},{"lineNumber":199,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":200,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-18"},{"lineNumber":201,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":202,"author":{"gitId":"ICubE-"},"content":" public String getFirstWord(String str) {","lastModifiedDate":"2023-10-10"},{"lineNumber":203,"author":{"gitId":"ICubE-"},"content":" assert str !\u003d null \u0026\u0026 !str.isEmpty();","lastModifiedDate":"2023-10-16"},{"lineNumber":204,"author":{"gitId":"ICubE-"},"content":" return str.split(\"\\\\s\")[0];","lastModifiedDate":"2023-10-10"},{"lineNumber":205,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-10"},{"lineNumber":206,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-09"}],"authorContributionMap":{"NgLixuanNixon":28,"J0shuaLeong":28,"ICubE-":149,"marklin2234":1}},{"path":"src/main/java/fittrack/parser/NegativeNumberException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"J0shuaLeong"},"content":"package fittrack.parser;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"J0shuaLeong"},"content":"public class NegativeNumberException extends ParseException {","lastModifiedDate":"2023-10-20"},{"lineNumber":4,"author":{"gitId":"marklin2234"},"content":" public NegativeNumberException() {","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"marklin2234"},"content":" super(\"\");","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"marklin2234"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"J0shuaLeong":4,"marklin2234":3}},{"path":"src/main/java/fittrack/parser/NumberFormatException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"public class NumberFormatException extends ParseException {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"marklin2234"},"content":" public NumberFormatException() {","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"marklin2234"},"content":" super(\"\");","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"marklin2234"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"ICubE-":4,"marklin2234":3}},{"path":"src/main/java/fittrack/parser/ParseException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.parser;","lastModifiedDate":"2023-10-10"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-10"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"public class ParseException extends Exception {","lastModifiedDate":"2023-10-10"},{"lineNumber":4,"author":{"gitId":"marklin2234"},"content":" public ParseException(String errorMessage) {","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"marklin2234"},"content":" super(errorMessage);","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"marklin2234"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-10"}],"authorContributionMap":{"ICubE-":4,"marklin2234":3}},{"path":"src/main/java/fittrack/parser/PatternMatchFailException.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"public class PatternMatchFailException extends ParseException {","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"marklin2234"},"content":" public PatternMatchFailException() {","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"marklin2234"},"content":" super(\"\");","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"marklin2234"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"ICubE-":4,"marklin2234":3}},{"path":"src/main/java/fittrack/storage/Storage.java","fileType":"functional-code","lines":[{"lineNumber":1,"author":{"gitId":"J0shuaLeong"},"content":"package fittrack.storage;","lastModifiedDate":"2023-10-20"},{"lineNumber":2,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":3,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.MealList;","lastModifiedDate":"2023-10-22"},{"lineNumber":4,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.UserProfile;","lastModifiedDate":"2023-10-22"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.WorkoutList;","lastModifiedDate":"2023-10-22"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.data.Meal;","lastModifiedDate":"2023-10-22"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.data.Workout;","lastModifiedDate":"2023-10-22"},{"lineNumber":8,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":9,"author":{"gitId":"J0shuaLeong"},"content":"import java.io.File;","lastModifiedDate":"2023-10-20"},{"lineNumber":10,"author":{"gitId":"J0shuaLeong"},"content":"import java.io.FileWriter;","lastModifiedDate":"2023-10-20"},{"lineNumber":11,"author":{"gitId":"J0shuaLeong"},"content":"import java.io.IOException;","lastModifiedDate":"2023-10-20"},{"lineNumber":12,"author":{"gitId":"J0shuaLeong"},"content":"import java.util.ArrayList;","lastModifiedDate":"2023-10-22"},{"lineNumber":13,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":15,"author":{"gitId":"J0shuaLeong"},"content":"public class Storage {","lastModifiedDate":"2023-10-20"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-21"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":" private static final String FILE_DIRECTORY \u003d \"data\";","lastModifiedDate":"2023-10-22"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":" private final String profileFilePath \u003d \"./data/Profile.txt\";","lastModifiedDate":"2023-10-22"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":" private final String mealListFilePath \u003d \"./data/mealList.txt\";","lastModifiedDate":"2023-10-22"},{"lineNumber":20,"author":{"gitId":"J0shuaLeong"},"content":" private final String workoutListFilePath \u003d \"./data/workoutList.txt\";","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"J0shuaLeong"},"content":" private final File profileFile;","lastModifiedDate":"2023-10-22"},{"lineNumber":22,"author":{"gitId":"J0shuaLeong"},"content":" private final File mealFile;","lastModifiedDate":"2023-10-22"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":" private final File workoutFile;","lastModifiedDate":"2023-10-22"},{"lineNumber":24,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":25,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":26,"author":{"gitId":"J0shuaLeong"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":27,"author":{"gitId":"J0shuaLeong"},"content":" * Constructs storage. Creates new file fittrack.txt","lastModifiedDate":"2023-10-21"},{"lineNumber":28,"author":{"gitId":"J0shuaLeong"},"content":" * in a directory called data if none exist.","lastModifiedDate":"2023-10-21"},{"lineNumber":29,"author":{"gitId":"J0shuaLeong"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":30,"author":{"gitId":"J0shuaLeong"},"content":" public Storage() {","lastModifiedDate":"2023-10-20"},{"lineNumber":31,"author":{"gitId":"J0shuaLeong"},"content":" this.profileFile \u003d new File(profileFilePath);","lastModifiedDate":"2023-10-22"},{"lineNumber":32,"author":{"gitId":"J0shuaLeong"},"content":" this.mealFile \u003d new File(mealListFilePath);","lastModifiedDate":"2023-10-22"},{"lineNumber":33,"author":{"gitId":"J0shuaLeong"},"content":" this.workoutFile \u003d new File(workoutListFilePath);","lastModifiedDate":"2023-10-22"},{"lineNumber":34,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":35,"author":{"gitId":"J0shuaLeong"},"content":" assert profileFile !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":36,"author":{"gitId":"J0shuaLeong"},"content":" assert mealFile !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":37,"author":{"gitId":"J0shuaLeong"},"content":" assert workoutFile !\u003d null;","lastModifiedDate":"2023-10-22"},{"lineNumber":38,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":39,"author":{"gitId":"J0shuaLeong"},"content":" try {","lastModifiedDate":"2023-10-20"},{"lineNumber":40,"author":{"gitId":"J0shuaLeong"},"content":" File f \u003d new File(FILE_DIRECTORY);","lastModifiedDate":"2023-10-22"},{"lineNumber":41,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":42,"author":{"gitId":"J0shuaLeong"},"content":" if (f.mkdir()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":43,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(\"Directory created: \" + f.getName());","lastModifiedDate":"2023-10-22"},{"lineNumber":44,"author":{"gitId":"J0shuaLeong"},"content":" } else {","lastModifiedDate":"2023-10-22"},{"lineNumber":45,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(\"Directory already exists.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":46,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":47,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":48,"author":{"gitId":"J0shuaLeong"},"content":" if (!this.profileFile.exists()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":49,"author":{"gitId":"J0shuaLeong"},"content":" profileFile.createNewFile();","lastModifiedDate":"2023-10-22"},{"lineNumber":50,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":51,"author":{"gitId":"J0shuaLeong"},"content":" if (!this.mealFile.exists()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":52,"author":{"gitId":"J0shuaLeong"},"content":" mealFile.createNewFile();","lastModifiedDate":"2023-10-22"},{"lineNumber":53,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":54,"author":{"gitId":"J0shuaLeong"},"content":" if (!this.workoutFile.exists()) {","lastModifiedDate":"2023-10-22"},{"lineNumber":55,"author":{"gitId":"J0shuaLeong"},"content":" workoutFile.createNewFile();","lastModifiedDate":"2023-10-22"},{"lineNumber":56,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":57,"author":{"gitId":"J0shuaLeong"},"content":" } catch (IOException e) {","lastModifiedDate":"2023-10-20"},{"lineNumber":58,"author":{"gitId":"J0shuaLeong"},"content":" System.out.println(\"Failed to create directory and file.\");","lastModifiedDate":"2023-10-22"},{"lineNumber":59,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":60,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":61,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-20"},{"lineNumber":62,"author":{"gitId":"J0shuaLeong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":63,"author":{"gitId":"J0shuaLeong"},"content":" * Saves user profile data into storage","lastModifiedDate":"2023-10-22"},{"lineNumber":64,"author":{"gitId":"J0shuaLeong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":65,"author":{"gitId":"J0shuaLeong"},"content":" * @throws IOException error","lastModifiedDate":"2023-10-22"},{"lineNumber":66,"author":{"gitId":"J0shuaLeong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":67,"author":{"gitId":"J0shuaLeong"},"content":" public void saveProfile(UserProfile userProfile) throws IOException {","lastModifiedDate":"2023-10-22"},{"lineNumber":68,"author":{"gitId":"J0shuaLeong"},"content":" //TODO write data to file","lastModifiedDate":"2023-10-22"},{"lineNumber":69,"author":{"gitId":"J0shuaLeong"},"content":" FileWriter file \u003d new FileWriter(profileFilePath);","lastModifiedDate":"2023-10-22"},{"lineNumber":70,"author":{"gitId":"J0shuaLeong"},"content":" file.write(userProfile.toString() + \"\\n\");","lastModifiedDate":"2023-10-22"},{"lineNumber":71,"author":{"gitId":"J0shuaLeong"},"content":" file.close();","lastModifiedDate":"2023-10-22"},{"lineNumber":72,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":73,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":74,"author":{"gitId":"J0shuaLeong"},"content":" /**","lastModifiedDate":"2023-10-22"},{"lineNumber":75,"author":{"gitId":"J0shuaLeong"},"content":" * Saves meal list into storage","lastModifiedDate":"2023-10-22"},{"lineNumber":76,"author":{"gitId":"J0shuaLeong"},"content":" *","lastModifiedDate":"2023-10-22"},{"lineNumber":77,"author":{"gitId":"J0shuaLeong"},"content":" * @throws IOException error","lastModifiedDate":"2023-10-22"},{"lineNumber":78,"author":{"gitId":"J0shuaLeong"},"content":" */","lastModifiedDate":"2023-10-22"},{"lineNumber":79,"author":{"gitId":"J0shuaLeong"},"content":" public void saveMeals(MealList mealList) throws IOException {","lastModifiedDate":"2023-10-22"},{"lineNumber":80,"author":{"gitId":"J0shuaLeong"},"content":" ArrayList\u003cMeal\u003e mealArr \u003d mealList.getMealList();","lastModifiedDate":"2023-10-22"},{"lineNumber":81,"author":{"gitId":"J0shuaLeong"},"content":" FileWriter file \u003d new FileWriter(mealListFilePath);","lastModifiedDate":"2023-10-22"},{"lineNumber":82,"author":{"gitId":"J0shuaLeong"},"content":" for (Meal m : mealArr) {","lastModifiedDate":"2023-10-22"},{"lineNumber":83,"author":{"gitId":"J0shuaLeong"},"content":" file.write(m.formatToFile() + \"\\n\");","lastModifiedDate":"2023-10-22"},{"lineNumber":84,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":85,"author":{"gitId":"J0shuaLeong"},"content":" file.close();","lastModifiedDate":"2023-10-22"},{"lineNumber":86,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":87,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-22"},{"lineNumber":88,"author":{"gitId":"J0shuaLeong"},"content":" /**","lastModifiedDate":"2023-10-20"},{"lineNumber":89,"author":{"gitId":"J0shuaLeong"},"content":" * Saves workout list into storage","lastModifiedDate":"2023-10-22"},{"lineNumber":90,"author":{"gitId":"J0shuaLeong"},"content":" *","lastModifiedDate":"2023-10-21"},{"lineNumber":91,"author":{"gitId":"J0shuaLeong"},"content":" * @throws IOException error","lastModifiedDate":"2023-10-21"},{"lineNumber":92,"author":{"gitId":"J0shuaLeong"},"content":" */","lastModifiedDate":"2023-10-20"},{"lineNumber":93,"author":{"gitId":"J0shuaLeong"},"content":" public void saveWorkouts(WorkoutList workoutList) throws IOException {","lastModifiedDate":"2023-10-22"},{"lineNumber":94,"author":{"gitId":"J0shuaLeong"},"content":" ArrayList\u003cWorkout\u003e workoutArr \u003d workoutList.getWorkoutList();","lastModifiedDate":"2023-10-22"},{"lineNumber":95,"author":{"gitId":"J0shuaLeong"},"content":" FileWriter file \u003d new FileWriter(workoutListFilePath);","lastModifiedDate":"2023-10-22"},{"lineNumber":96,"author":{"gitId":"J0shuaLeong"},"content":" for (Workout w : workoutArr) {","lastModifiedDate":"2023-10-22"},{"lineNumber":97,"author":{"gitId":"J0shuaLeong"},"content":" file.write(w.formatToFile() + \"\\n\");","lastModifiedDate":"2023-10-22"},{"lineNumber":98,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-22"},{"lineNumber":99,"author":{"gitId":"J0shuaLeong"},"content":" file.close();","lastModifiedDate":"2023-10-21"},{"lineNumber":100,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-20"},{"lineNumber":101,"author":{"gitId":"J0shuaLeong"},"content":"}","lastModifiedDate":"2023-10-20"}],"authorContributionMap":{"J0shuaLeong":101}},{"path":"src/test/java/fittrack/FitTrackTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack;","lastModifiedDate":"2023-10-09"},{"lineNumber":2,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"import static org.junit.jupiter.api.Assertions.assertTrue;","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":5,"author":{"gitId":"-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"class FitTrackTest {","lastModifiedDate":"2023-10-09"},{"lineNumber":8,"author":{"gitId":"-"},"content":" @Test","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":" public void sampleTest() {","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":" assertTrue(true);","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":" }","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":"}","lastModifiedDate":"2020-05-24"}],"authorContributionMap":{"ICubE-":2,"-":10}},{"path":"src/test/java/fittrack/command/EditProfileCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"J0shuaLeong"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.UserProfile;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"J0shuaLeong"},"content":"import fittrack.parser.PatternMatchFailException;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"J0shuaLeong"},"content":"import org.junit.jupiter.api.BeforeEach;","lastModifiedDate":"2023-10-17"},{"lineNumber":7,"author":{"gitId":"J0shuaLeong"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":8,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"J0shuaLeong"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"J0shuaLeong"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"J0shuaLeong"},"content":"public class EditProfileCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"J0shuaLeong"},"content":" private EditProfileCommand editProfileCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"J0shuaLeong"},"content":" private UserProfile userProfile;","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"J0shuaLeong"},"content":" @BeforeEach","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"J0shuaLeong"},"content":" public void setUp() {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"J0shuaLeong"},"content":" editProfileCommand \u003d new EditProfileCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":" userProfile \u003d new UserProfile();","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"J0shuaLeong"},"content":" editProfileCommand.setData(userProfile, null, null, null);","lastModifiedDate":"2023-10-22"},{"lineNumber":21,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"J0shuaLeong"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"J0shuaLeong"},"content":" public void setArgumentsInvalidArgumentsThrowsException() {","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"J0shuaLeong"},"content":" String invalidArgs \u003d \"invalid_arguments\";","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"J0shuaLeong"},"content":" CommandParser parser \u003d new CommandParser();","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"J0shuaLeong"},"content":" assertThrows(PatternMatchFailException.class, () -\u003e {","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"J0shuaLeong"},"content":" editProfileCommand.setArguments(invalidArgs, parser);","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"J0shuaLeong"},"content":" });","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"J0shuaLeong"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"J0shuaLeong"},"content":" public void getHelpReturnsCorrectHelpMessage() {","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"J0shuaLeong"},"content":" EditProfileCommand editProfileCommand \u003d new EditProfileCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"J0shuaLeong"},"content":" String expectedHelpMessage \u003d \"`editprofile` allows you to edit your profile.\" +","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" \"\\nType `editprofile h/\u003cHEIGHT\u003e w/\u003cWEIGHT\u003e l/\u003cCALORIE_LIMIT\u003e` to edit.\";","lastModifiedDate":"2023-10-18"},{"lineNumber":39,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"J0shuaLeong"},"content":" String actualHelpMessage \u003d editProfileCommand.getHelp();","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"J0shuaLeong"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"J0shuaLeong"},"content":" assertEquals(expectedHelpMessage, actualHelpMessage);","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"J0shuaLeong"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"J0shuaLeong"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"J0shuaLeong":43,"ICubE-":1}},{"path":"src/test/java/fittrack/command/HelpCommandTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.command;","lastModifiedDate":"2023-10-17"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.parser.CommandParser;","lastModifiedDate":"2023-10-17"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-17"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"import static fittrack.command.HelpCommand.USAGE;","lastModifiedDate":"2023-10-18"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"import static fittrack.command.InvalidCommand.MESSAGE_INVALID_COMMAND;","lastModifiedDate":"2023-10-18"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-17"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":"class HelpCommandTest {","lastModifiedDate":"2023-10-17"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":" void execute_help_pass() {","lastModifiedDate":"2023-10-17"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":" HelpCommand helpCommand \u003d new HelpCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":" helpCommand.setArguments(\"\", new CommandParser());","lastModifiedDate":"2023-10-17"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" CommandResult result \u003d helpCommand.execute();","lastModifiedDate":"2023-10-17"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" assertEquals(HelpCommand.HELP, result.getFeedback());","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":" void setArguments_emptyString_helpOfHelp() {","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" HelpCommand helpCommand \u003d new HelpCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" helpCommand.setArguments(\"\", new CommandParser());","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" assertEquals(HelpCommand.HELP, helpCommand.getHelpMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" void setArguments_help_helpOfHelp() {","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":" HelpCommand helpCommand \u003d new HelpCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" helpCommand.setArguments(\"help\", new CommandParser());","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" assertEquals(HelpCommand.HELP, helpCommand.getHelpMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" void setArguments_exit_helpOfExit() {","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" HelpCommand helpCommand \u003d new HelpCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":" helpCommand.setArguments(\"exit\", new CommandParser());","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" assertEquals(ExitCommand.HELP, helpCommand.getHelpMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"ICubE-"},"content":" void setArguments_foo_invalidCmdMsg() {","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"ICubE-"},"content":" HelpCommand helpCommand \u003d new HelpCommand();","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"ICubE-"},"content":" helpCommand.setArguments(\"foo\", new CommandParser());","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"ICubE-"},"content":" assertEquals(","lastModifiedDate":"2023-10-18"},{"lineNumber":46,"author":{"gitId":"ICubE-"},"content":" String.format(MESSAGE_INVALID_COMMAND, \"foo\") + \"\\n\" + USAGE, ","lastModifiedDate":"2023-10-18"},{"lineNumber":47,"author":{"gitId":"ICubE-"},"content":" helpCommand.getHelpMessage()","lastModifiedDate":"2023-10-18"},{"lineNumber":48,"author":{"gitId":"ICubE-"},"content":" );","lastModifiedDate":"2023-10-18"},{"lineNumber":49,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":50,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-17"}],"authorContributionMap":{"ICubE-":50}},{"path":"src/test/java/fittrack/parser/CommandParserTest.java","fileType":"test-code","lines":[{"lineNumber":1,"author":{"gitId":"ICubE-"},"content":"package fittrack.parser;","lastModifiedDate":"2023-10-16"},{"lineNumber":2,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":3,"author":{"gitId":"ICubE-"},"content":"import fittrack.UserProfile;","lastModifiedDate":"2023-10-16"},{"lineNumber":4,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.Command;","lastModifiedDate":"2023-10-16"},{"lineNumber":5,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.ExitCommand;","lastModifiedDate":"2023-10-17"},{"lineNumber":6,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.HelpCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":7,"author":{"gitId":"ICubE-"},"content":"import fittrack.command.InvalidCommand;","lastModifiedDate":"2023-10-16"},{"lineNumber":8,"author":{"gitId":"ICubE-"},"content":"import org.junit.jupiter.api.Test;","lastModifiedDate":"2023-10-16"},{"lineNumber":9,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":10,"author":{"gitId":"ICubE-"},"content":"import static org.junit.jupiter.api.Assertions.assertEquals;","lastModifiedDate":"2023-10-16"},{"lineNumber":11,"author":{"gitId":"ICubE-"},"content":"import static org.junit.jupiter.api.Assertions.assertInstanceOf;","lastModifiedDate":"2023-10-16"},{"lineNumber":12,"author":{"gitId":"ICubE-"},"content":"import static org.junit.jupiter.api.Assertions.assertThrows;","lastModifiedDate":"2023-10-16"},{"lineNumber":13,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":14,"author":{"gitId":"ICubE-"},"content":"class CommandParserTest {","lastModifiedDate":"2023-10-16"},{"lineNumber":15,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":16,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":17,"author":{"gitId":"ICubE-"},"content":" void parseCommand_emptyString_invalidCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":18,"author":{"gitId":"ICubE-"},"content":" Command command \u003d new CommandParser().parseCommand(\"\");","lastModifiedDate":"2023-10-17"},{"lineNumber":19,"author":{"gitId":"ICubE-"},"content":" assertInstanceOf(InvalidCommand.class, command);","lastModifiedDate":"2023-10-17"},{"lineNumber":20,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":21,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":22,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":23,"author":{"gitId":"ICubE-"},"content":" void parseCommand_help_helpCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":24,"author":{"gitId":"ICubE-"},"content":" Command command \u003d new CommandParser().parseCommand(\"help\");","lastModifiedDate":"2023-10-17"},{"lineNumber":25,"author":{"gitId":"ICubE-"},"content":" assertInstanceOf(HelpCommand.class, command);","lastModifiedDate":"2023-10-17"},{"lineNumber":26,"author":{"gitId":"ICubE-"},"content":" HelpCommand helpCommand \u003d (HelpCommand) command;","lastModifiedDate":"2023-10-17"},{"lineNumber":27,"author":{"gitId":"ICubE-"},"content":" assertEquals(HelpCommand.HELP, helpCommand.getHelpMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":28,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":29,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":30,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":31,"author":{"gitId":"ICubE-"},"content":" void parseCommand_helpExit_helpCommandExit() {","lastModifiedDate":"2023-10-17"},{"lineNumber":32,"author":{"gitId":"ICubE-"},"content":" Command command \u003d new CommandParser().parseCommand(\"help exit\");","lastModifiedDate":"2023-10-17"},{"lineNumber":33,"author":{"gitId":"ICubE-"},"content":" assertInstanceOf(HelpCommand.class, command);","lastModifiedDate":"2023-10-17"},{"lineNumber":34,"author":{"gitId":"ICubE-"},"content":" HelpCommand helpCommand \u003d (HelpCommand) command;","lastModifiedDate":"2023-10-17"},{"lineNumber":35,"author":{"gitId":"ICubE-"},"content":" assertEquals(ExitCommand.HELP, helpCommand.getHelpMessage());","lastModifiedDate":"2023-10-17"},{"lineNumber":36,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":37,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":38,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":39,"author":{"gitId":"ICubE-"},"content":" void parseCommand_exit_exitCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":40,"author":{"gitId":"ICubE-"},"content":" Command command \u003d new CommandParser().parseCommand(\"exit\");","lastModifiedDate":"2023-10-17"},{"lineNumber":41,"author":{"gitId":"ICubE-"},"content":" assertInstanceOf(ExitCommand.class, command);","lastModifiedDate":"2023-10-17"},{"lineNumber":42,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-17"},{"lineNumber":43,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-17"},{"lineNumber":44,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-17"},{"lineNumber":45,"author":{"gitId":"ICubE-"},"content":" void parseCommand_foo_invalidCommand() {","lastModifiedDate":"2023-10-17"},{"lineNumber":46,"author":{"gitId":"ICubE-"},"content":" Command command \u003d new CommandParser().parseCommand(\"foo\");","lastModifiedDate":"2023-10-17"},{"lineNumber":47,"author":{"gitId":"ICubE-"},"content":" assertInstanceOf(InvalidCommand.class, command);","lastModifiedDate":"2023-10-17"},{"lineNumber":48,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":49,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":50,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":51,"author":{"gitId":"ICubE-"},"content":" void getBlankCommand_help_helpCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":52,"author":{"gitId":"ICubE-"},"content":" Command blankCommand \u003d new CommandParser().getBlankCommand(\"help\");","lastModifiedDate":"2023-10-16"},{"lineNumber":53,"author":{"gitId":"ICubE-"},"content":" assertInstanceOf(HelpCommand.class, blankCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":54,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":55,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":56,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":57,"author":{"gitId":"ICubE-"},"content":" void getBlankCommand_foo_invalidCommand() {","lastModifiedDate":"2023-10-16"},{"lineNumber":58,"author":{"gitId":"ICubE-"},"content":" Command blankCommand \u003d new CommandParser().getBlankCommand(\"foo\");","lastModifiedDate":"2023-10-16"},{"lineNumber":59,"author":{"gitId":"ICubE-"},"content":" assertInstanceOf(InvalidCommand.class, blankCommand);","lastModifiedDate":"2023-10-16"},{"lineNumber":60,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":61,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":62,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":63,"author":{"gitId":"ICubE-"},"content":" void parseProfile_h180w80l2000_success() {","lastModifiedDate":"2023-10-17"},{"lineNumber":64,"author":{"gitId":"ICubE-"},"content":" try {","lastModifiedDate":"2023-10-16"},{"lineNumber":65,"author":{"gitId":"ICubE-"},"content":" UserProfile profile \u003d new CommandParser().parseProfile(\"h/180 w/80 l/2000\");","lastModifiedDate":"2023-10-16"},{"lineNumber":66,"author":{"gitId":"ICubE-"},"content":" assertEquals(180.0, profile.getHeight().value);","lastModifiedDate":"2023-10-21"},{"lineNumber":67,"author":{"gitId":"ICubE-"},"content":" assertEquals(80.0, profile.getWeight().value);","lastModifiedDate":"2023-10-21"},{"lineNumber":68,"author":{"gitId":"ICubE-"},"content":" assertEquals(2000.0, profile.getDailyCalorieLimit().value);","lastModifiedDate":"2023-10-21"},{"lineNumber":69,"author":{"gitId":"J0shuaLeong"},"content":" } catch (PatternMatchFailException | NegativeNumberException | NumberFormatException e) {","lastModifiedDate":"2023-10-20"},{"lineNumber":70,"author":{"gitId":"ICubE-"},"content":" throw new RuntimeException(e);","lastModifiedDate":"2023-10-16"},{"lineNumber":71,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":72,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":73,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":74,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":75,"author":{"gitId":"ICubE-"},"content":" void parseProfile_fail() {","lastModifiedDate":"2023-10-16"},{"lineNumber":76,"author":{"gitId":"ICubE-"},"content":" CommandParser parser \u003d new CommandParser();","lastModifiedDate":"2023-10-16"},{"lineNumber":77,"author":{"gitId":"ICubE-"},"content":" assertThrows(PatternMatchFailException.class, () -\u003e parser.parseProfile(\"h/ w/ l/\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":78,"author":{"gitId":"ICubE-"},"content":" assertThrows(PatternMatchFailException.class, () -\u003e parser.parseProfile(\"h/180 w/80 l/\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":79,"author":{"gitId":"ICubE-"},"content":" assertThrows(PatternMatchFailException.class, () -\u003e parser.parseProfile(\"h/ w/80 l/2000\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":80,"author":{"gitId":"ICubE-"},"content":" assertThrows(PatternMatchFailException.class, () -\u003e parser.parseProfile(\"h/180 80 2000\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":81,"author":{"gitId":"ICubE-"},"content":" assertThrows(PatternMatchFailException.class, () -\u003e parser.parseProfile(\"180 w/80 l/2000\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":82,"author":{"gitId":"ICubE-"},"content":" assertThrows(PatternMatchFailException.class, () -\u003e parser.parseProfile(\"180 80 2000\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":83,"author":{"gitId":"ICubE-"},"content":" assertThrows(NumberFormatException.class, () -\u003e parser.parseProfile(\"h/180 w/eighty l/2000\"));","lastModifiedDate":"2023-10-16"},{"lineNumber":84,"author":{"gitId":"J0shuaLeong"},"content":" assertThrows(NegativeNumberException.class, () -\u003e parser.parseProfile(\"h/-180 w/80 l/2000\"));","lastModifiedDate":"2023-10-20"},{"lineNumber":85,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":86,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":87,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":88,"author":{"gitId":"ICubE-"},"content":" void getFirstWord_helloWorld_hello() {","lastModifiedDate":"2023-10-16"},{"lineNumber":89,"author":{"gitId":"ICubE-"},"content":" String firstWord \u003d new CommandParser().getFirstWord(\"hello world\");","lastModifiedDate":"2023-10-16"},{"lineNumber":90,"author":{"gitId":"ICubE-"},"content":" assertEquals(\"hello\", firstWord);","lastModifiedDate":"2023-10-16"},{"lineNumber":91,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":92,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":93,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":94,"author":{"gitId":"ICubE-"},"content":" void getFirstWord_loremIpsum_lorem() {","lastModifiedDate":"2023-10-16"},{"lineNumber":95,"author":{"gitId":"ICubE-"},"content":" String firstWord \u003d new CommandParser().getFirstWord(","lastModifiedDate":"2023-10-16"},{"lineNumber":96,"author":{"gitId":"ICubE-"},"content":" \"Lorem\\nipsum\\ndolor sit amet, consectetur adipisicing elit, \\n\" +","lastModifiedDate":"2023-10-16"},{"lineNumber":97,"author":{"gitId":"ICubE-"},"content":" \"sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\"","lastModifiedDate":"2023-10-16"},{"lineNumber":98,"author":{"gitId":"ICubE-"},"content":" );","lastModifiedDate":"2023-10-16"},{"lineNumber":99,"author":{"gitId":"ICubE-"},"content":" assertEquals(\"Lorem\", firstWord);","lastModifiedDate":"2023-10-16"},{"lineNumber":100,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":101,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":102,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":103,"author":{"gitId":"ICubE-"},"content":" void getFirstWord_hi_hi() {","lastModifiedDate":"2023-10-16"},{"lineNumber":104,"author":{"gitId":"ICubE-"},"content":" String firstWord \u003d new CommandParser().getFirstWord(\"hi\");","lastModifiedDate":"2023-10-16"},{"lineNumber":105,"author":{"gitId":"ICubE-"},"content":" assertEquals(\"hi\", firstWord);","lastModifiedDate":"2023-10-16"},{"lineNumber":106,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":107,"author":{"gitId":"ICubE-"},"content":"","lastModifiedDate":"2023-10-16"},{"lineNumber":108,"author":{"gitId":"ICubE-"},"content":" @Test","lastModifiedDate":"2023-10-16"},{"lineNumber":109,"author":{"gitId":"ICubE-"},"content":" void getFirstWord_emptyString_fail() {","lastModifiedDate":"2023-10-16"},{"lineNumber":110,"author":{"gitId":"ICubE-"},"content":" assertThrows(","lastModifiedDate":"2023-10-16"},{"lineNumber":111,"author":{"gitId":"ICubE-"},"content":" AssertionError.class,","lastModifiedDate":"2023-10-16"},{"lineNumber":112,"author":{"gitId":"ICubE-"},"content":" () -\u003e new CommandParser().getFirstWord(\"\")","lastModifiedDate":"2023-10-16"},{"lineNumber":113,"author":{"gitId":"ICubE-"},"content":" );","lastModifiedDate":"2023-10-16"},{"lineNumber":114,"author":{"gitId":"ICubE-"},"content":" }","lastModifiedDate":"2023-10-16"},{"lineNumber":115,"author":{"gitId":"ICubE-"},"content":"}","lastModifiedDate":"2023-10-16"}],"authorContributionMap":{"J0shuaLeong":2,"ICubE-":113}},{"path":"text-ui-test/runtest.bat","fileType":"other","lines":[{"lineNumber":1,"author":{"gitId":"-"},"content":"@echo off","lastModifiedDate":"2020-05-24"},{"lineNumber":2,"author":{"gitId":"-"},"content":"setlocal enableextensions","lastModifiedDate":"2020-05-24"},{"lineNumber":3,"author":{"gitId":"-"},"content":"pushd %~dp0","lastModifiedDate":"2020-05-24"},{"lineNumber":4,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":5,"author":{"gitId":"-"},"content":"cd ..","lastModifiedDate":"2020-05-24"},{"lineNumber":6,"author":{"gitId":"-"},"content":"call gradlew clean shadowJar","lastModifiedDate":"2020-05-24"},{"lineNumber":7,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":8,"author":{"gitId":"-"},"content":"cd build\\libs","lastModifiedDate":"2020-05-24"},{"lineNumber":9,"author":{"gitId":"-"},"content":"for /f \"tokens\u003d*\" %%a in (","lastModifiedDate":"2020-05-24"},{"lineNumber":10,"author":{"gitId":"-"},"content":" \u0027dir /b *.jar\u0027","lastModifiedDate":"2020-05-24"},{"lineNumber":11,"author":{"gitId":"-"},"content":") do (","lastModifiedDate":"2020-05-24"},{"lineNumber":12,"author":{"gitId":"-"},"content":" set jarloc\u003d%%a","lastModifiedDate":"2020-05-24"},{"lineNumber":13,"author":{"gitId":"-"},"content":")","lastModifiedDate":"2020-05-25"},{"lineNumber":14,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":15,"author":{"gitId":"-"},"content":"java -jar %jarloc% \u003c ..\\..\\text-ui-test\\input.txt \u003e ..\\..\\text-ui-test\\ACTUAL.TXT","lastModifiedDate":"2020-05-24"},{"lineNumber":16,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-24"},{"lineNumber":17,"author":{"gitId":"-"},"content":"cd ..\\..\\text-ui-test","lastModifiedDate":"2020-05-24"},{"lineNumber":18,"author":{"gitId":"-"},"content":"","lastModifiedDate":"2020-05-25"},{"lineNumber":19,"author":{"gitId":"J0shuaLeong"},"content":"FC ACTUAL.TXT ACTUAL.TXT \u003eNUL \u0026\u0026 ECHO Test passed! || Echo Test failed!","lastModifiedDate":"2023-10-22"}],"authorContributionMap":{"J0shuaLeong":1,"-":18}}] diff --git a/AY2324S1-CS2113-W12-4_tp_master/commits.json b/AY2324S1-CS2113-W12-4_tp_master/commits.json index 2e02eef..461fc31 100644 --- a/AY2324S1-CS2113-W12-4_tp_master/commits.json +++ b/AY2324S1-CS2113-W12-4_tp_master/commits.json @@ -1 +1 @@ -{"authorDailyContributionsMap":{"NgLixuanNixon":[{"date":"2023-10-04","commitResults":[{"hash":"4ab6262ae774e0814318657e4c558d6cc3350673","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"101aed2384bcb8998fc22b98f9e0e60fe4db98a1","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"# Conflicts:\n#\tdocs/AboutUs.md\n","fileTypesAndContributionMap":{}},{"hash":"8ba23607fabe7e06789e5d3f3e43be80846d20d6","isMergeCommit":true,"messageTitle":"Merge pull request #4 from NgLixuanNixon/master","messageBody":"no message","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"ec330be865b21f5425e328b2b95a50096a58ef7d","isMergeCommit":false,"messageTitle":"addmeal, listmeals, deletemeal done","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":121,"deletions":37}}},{"hash":"bdaf6df718f2ee08800477660fa44aca22780007","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"789d019f030cdf0c9f77ca6e04fc367db4dc9bb8","isMergeCommit":false,"messageTitle":"fix gradle issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":19}}},{"hash":"e7337397dc7d27d57335a89b0f44b14e48720f8c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e6471b91b476d70e8a5c89cb8939312263fc6faf","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/NgLixuanNixon/tp","messageBody":"# Conflicts:\n#\tsrc/main/java/fittrack/FitTrack.java\n#\tsrc/main/java/fittrack/parser/CommandParser.java\n","fileTypesAndContributionMap":{}},{"hash":"148070b111d5739d1ae4eef3757b93a8a6208d19","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/NgLixuanNixon/tp","messageBody":"# Conflicts:\n#\tsrc/main/java/fittrack/command/AddMealCommand.java\n#\tsrc/main/java/fittrack/parser/CommandParser.java\n","fileTypesAndContributionMap":{}},{"hash":"5e9d81a5463296e9907bd247d4adaa3aa37a8ee0","isMergeCommit":true,"messageTitle":"Merge pull request #34 from NgLixuanNixon/master","messageBody":"addmeal, listmeals, deletemeal done","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"186f7cac7f6214f3378314e1e2ae9020ddc455ff","isMergeCommit":false,"messageTitle":"Handled errors for addmeal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":38,"deletions":12},"other":{"insertions":4,"deletions":0}}},{"hash":"1875500183df3f54394d853abb305ab29548ff33","isMergeCommit":false,"messageTitle":"fixed gradle issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"ea42ca57a9d429f302dc8ef2c2e77cb733c800d5","isMergeCommit":true,"messageTitle":"Merge pull request #57 from NgLixuanNixon/master","messageBody":"Handled errors for addmeal","fileTypesAndContributionMap":{}}]}],"J0shuaLeong":[{"date":"2023-10-04","commitResults":[{"hash":"876b14733ab2c2f66a734e06eb747a78c826321f","isMergeCommit":false,"messageTitle":"Testing merge conflicts","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"4525128b17846fdf989665421598f11f97f77cd5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"# Conflicts:\n#\tdocs/AboutUs.md\n","fileTypesAndContributionMap":{}},{"hash":"39225c42663245b93019510083b7e04ff9cb9da8","isMergeCommit":false,"messageTitle":"Testing merge conflicts (#1)","messageBody":"Co-authored-by: J0shuaLeong \u003cjoshualeong2607@gmail.com\u003e","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":2}}}]},{"date":"2023-10-06","commitResults":[{"hash":"00754d02077806296c6abe1ee2b28c81ece7c7d9","isMergeCommit":false,"messageTitle":"Added url of Joshua\u0027s github account","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"fb08a8ce2dce2800632c72c310afa1beb5ec9124","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"# Conflicts:\n#\tdocs/AboutUs.md\n","fileTypesAndContributionMap":{}},{"hash":"12ea145c28769e5788ab86fcfb3c0f1c12034e40","isMergeCommit":false,"messageTitle":"Add Github Url (#5)","messageBody":"* Testing merge conflicts\r\n\r\n* Added url of Joshua\u0027s github account\r\n\r\n---------\r\n\r\nCo-authored-by: J0shuaLeong \u003cjoshualeong2607@gmail.com\u003e","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"33a87b9b4c6074497792b6df777142aa50592755","isMergeCommit":false,"messageTitle":"Updated about us for Joshua","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":1}}},{"hash":"f7c473d3bc2615095964e35a8f29496f8e5ea9bf","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"56f586e798bf3b7040b68cfc62cfd8387b56cfa8","isMergeCommit":false,"messageTitle":"Update about us (#6)","messageBody":"* Testing merge conflicts\r\n\r\n* Added url of Joshua\u0027s github account\r\n\r\n* Updated about us for Joshua\r\n\r\n---------\r\n\r\nCo-authored-by: J0shuaLeong \u003cjoshualeong2607@gmail.com\u003e","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":1}}}]},{"date":"2023-10-07","commitResults":[{"hash":"fa123edc9ce51e0b964913e019da00cea03b471d","isMergeCommit":false,"messageTitle":"Resized profile image","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"a2d753035d1753279501aa0248b3b77f0938735a","isMergeCommit":false,"messageTitle":"Updated images (#7)","messageBody":"* Testing merge conflicts\r\n\r\n* Added url of Joshua\u0027s github account\r\n\r\n* Updated about us for Joshua\r\n\r\n* Resized profile image\r\n\r\n---------\r\n\r\nCo-authored-by: J0shuaLeong \u003cjoshualeong2607@gmail.com\u003e","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-10","commitResults":[{"hash":"0f8af349d9000c0d483fc71432c626a8a5cd53c4","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-13","commitResults":[{"hash":"7417ad91d5c6a9ed2dcae17834b0b2c29b1480cd","isMergeCommit":false,"messageTitle":"Edited user profile code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":1}}},{"hash":"2f065ea4330f28c3dbedeabefd61f4e27e182661","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2b84827c782d8ed7f562793b4e3a2b4f6685144f","isMergeCommit":true,"messageTitle":"Merge pull request #25 from J0shuaLeong/master","messageBody":"Edited User Profile Class","fileTypesAndContributionMap":{}},{"hash":"8ae7b2adcdadb81a53176e8f9d694bb5c184e183","isMergeCommit":false,"messageTitle":"Updated user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":43,"deletions":6}}},{"hash":"454a749d204a4ada42de8bb3d6b5304619c3fd44","isMergeCommit":true,"messageTitle":"Merge pull request #26 from J0shuaLeong/master","messageBody":"Updated User Guide","fileTypesAndContributionMap":{}},{"hash":"82b5ca3547dd04e7504726a7626be24e93dad331","isMergeCommit":false,"messageTitle":"Further additions to user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":64,"deletions":14}}},{"hash":"da100b852256464d51ef94689c4097026a0647c9","isMergeCommit":true,"messageTitle":"Merge pull request #27 from J0shuaLeong/master","messageBody":"Further additions to user guide","fileTypesAndContributionMap":{}},{"hash":"93a881b23789c2953bcb53d07363c8872b33e3f8","isMergeCommit":false,"messageTitle":"Completed main structure and format of user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":118,"deletions":13}}},{"hash":"5ce5512fc25f3d09aa446a2b188d3ca82406e1f6","isMergeCommit":true,"messageTitle":"Merge pull request #28 from J0shuaLeong/master","messageBody":"Completed main structure and format of user guide","fileTypesAndContributionMap":{}},{"hash":"3b7cdfcf3a0bd433e566308880b1b536b6cd2026","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp into branch-UserProfile","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f0f13d10d640d13101e2f1856c08b6eff21b40aa","isMergeCommit":false,"messageTitle":"Added printing of line, welcome message and message for user profile","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":2}}},{"hash":"bf5445e71efffb2df1bd18a67a7c94cbf589db4c","isMergeCommit":false,"messageTitle":"Removed unused getters and setters","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":26,"deletions":2}}},{"hash":"0b368b322b9776bb5b7a48d27ef2982113f83c3f","isMergeCommit":false,"messageTitle":"Edited goodbye message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":27}}},{"hash":"a5aae6762a20a4f039faea626b08261235769644","isMergeCommit":false,"messageTitle":"Minor changes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"3ed3a85f8b3e9fd519f1b2da097b676be7005c8d","isMergeCommit":true,"messageTitle":"Merge pull request #29 from J0shuaLeong/branch-UserProfile","messageBody":"Branch user profile","fileTypesAndContributionMap":{}},{"hash":"20a8b62b077408e51d2aa8145ec1235a72f9e604","isMergeCommit":false,"messageTitle":"Fixing workflow error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}}]},{"date":"2023-10-16","commitResults":[{"hash":"9cbade9d68afcdcd1485f5c976478d740c9d6551","isMergeCommit":true,"messageTitle":"Merge pull request #30 from J0shuaLeong/master","messageBody":"Fixing workflow error","fileTypesAndContributionMap":{}},{"hash":"d10fa6c2254138a4ce1655a6df9c7446fa3e066f","isMergeCommit":false,"messageTitle":"Fixing CI workflow","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"fceae9db5b092c63bea986127528c1df28f2eec5","isMergeCommit":false,"messageTitle":"Removed unnecessary code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"413811f1a922bab7b122948af8a900f36277c9c0","isMergeCommit":false,"messageTitle":"Removed line to print to output","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":6}}},{"hash":"3217bc45225ed0a6dbf21a49effbf136dc90ebce","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"# Conflicts:\n#\ttext-ui-test/EXPECTED.TXT\n#\ttext-ui-test/input.txt\n","fileTypesAndContributionMap":{}},{"hash":"a6cbb52ff61092af10a8a82ba54fd9a625338222","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"# Conflicts:\n#\tsrc/main/java/fittrack/FitTrack.java\n","fileTypesAndContributionMap":{}},{"hash":"68701621fc7242184a5703cb67ea2b408253b6b2","isMergeCommit":true,"messageTitle":"Merge pull request #31 from J0shuaLeong/master","messageBody":"Trying to fix CI workflow error","fileTypesAndContributionMap":{}},{"hash":"83fce9b72f7c482d32bdd4c4b28ed6cc9a998032","isMergeCommit":false,"messageTitle":"Clean up","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4}}},{"hash":"4cf5b0ccc6395d1d1a2a57444b5c0ccfe62741a4","isMergeCommit":false,"messageTitle":"Added edit profile feature","messageBody":"#15\n","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":19}}},{"hash":"2a243f70f8a1897300feb6bc4c97371ae9f1cafc","isMergeCommit":false,"messageTitle":"Updated documentation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"b16834a8fde70c58e05b8a8d4178e854f56d90d7","isMergeCommit":true,"messageTitle":"Merge pull request #35 from J0shuaLeong/branch-EditProfile","messageBody":"Edit profile feature","fileTypesAndContributionMap":{}},{"hash":"08569d9cd674eb4b423a2dbd29f081eca671fe03","isMergeCommit":false,"messageTitle":"Added FitTrack logo","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":5}}},{"hash":"4569e643fd8f9bb7f4633c8a20ffb723f2fe79cb","isMergeCommit":false,"messageTitle":"Removed unused import","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":3}}},{"hash":"5deadd1af4dd3bcd3055fca3446108755fee8ad8","isMergeCommit":true,"messageTitle":"Merge pull request #36 from J0shuaLeong/branch-EditProfile","messageBody":"Added Fit Track Logo","fileTypesAndContributionMap":{}},{"hash":"639919d1f2318714b93d32da32373782a4ed3807","isMergeCommit":false,"messageTitle":"Add view profile feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":32,"deletions":16}}},{"hash":"8906d09a4a41207e7ad50b996ae33cda14a799a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp into branch-ViewProfile","messageBody":"# Conflicts:\n#\tsrc/main/java/fittrack/command/AddWorkoutCommand.java\n#\tsrc/main/java/fittrack/parser/CommandParser.java\n","fileTypesAndContributionMap":{}},{"hash":"2a0f21679cac0cf6d5f79a5c12da75095bbf91db","isMergeCommit":true,"messageTitle":"Merge pull request #38 from J0shuaLeong/branch-ViewProfile","messageBody":"Added view profile feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"ef4a1cebdb53f2de0b5c69181883de2e5f3c749c","isMergeCommit":false,"messageTitle":"JUnitTest for editProfileCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0},"test-code":{"insertions":16,"deletions":0}}},{"hash":"d430314e091083e4c451021ed932543a62127bd9","isMergeCommit":true,"messageTitle":"Merge pull request #44 from J0shuaLeong/branch-JUnitTest","messageBody":"JUnitTest for editProfileCommand","fileTypesAndContributionMap":{}},{"hash":"d8fd6b04266046a5f2113852565395d3f09c8ef3","isMergeCommit":false,"messageTitle":"JUnitTest for edit profile command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":33,"deletions":5}}},{"hash":"58fa61303f9455d00f8d2e0f080c7fb8a8ce4389","isMergeCommit":true,"messageTitle":"Merge pull request #45 from J0shuaLeong/branch-JUnitTest","messageBody":"JUnitTest for edit profile command","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"7e532ea9c50b8ff39776ea764b8cf6a4acba6c8e","isMergeCommit":false,"messageTitle":"Updated the user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":36,"deletions":98}}},{"hash":"85d24b4844f20bae7fecba9922e39669f0b6109a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5213c31f70df024522b7da37d56fa95d25feaa5a","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"4065ee5a0200d6ce21181b6d80960f1997205777","isMergeCommit":true,"messageTitle":"Merge pull request #56 from J0shuaLeong/master","messageBody":"Add assertions","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"e00319ba7d8f82da9738f1130e1485d138192862","isMergeCommit":false,"messageTitle":"Updated the user guide and rearranged commands to make it more organised","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":62,"deletions":38}}},{"hash":"d6681002268d7d326d8f4cb463553144be39cdd0","isMergeCommit":true,"messageTitle":"Merge pull request #73 from J0shuaLeong/master","messageBody":"Updated the user guide ","fileTypesAndContributionMap":{}},{"hash":"5efe97c31994e2883acbf74937f5cc4997fb2b93","isMergeCommit":false,"messageTitle":"Added viewprofile command to userguide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":21,"deletions":0}}},{"hash":"e7c50f21c4e88697f618cda81ba2e0a8866dd414","isMergeCommit":true,"messageTitle":"Merge pull request #74 from J0shuaLeong/branch-TextUiTest","messageBody":"Text Ui Test","fileTypesAndContributionMap":{}},{"hash":"ed895baf5c29f3e721f5065900a58bc5fb0ee4a4","isMergeCommit":false,"messageTitle":"Added assertion for profile settings","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":1}}},{"hash":"2c6484d65f14b9b9ca429de5478d7550d5c1cd84","isMergeCommit":true,"messageTitle":"Merge pull request #75 from J0shuaLeong/master","messageBody":"Added assertion for profile settings","fileTypesAndContributionMap":{}},{"hash":"556ab420e4b8c7f6cc7c400369923ed53fbdf306","isMergeCommit":false,"messageTitle":"Added feature to calculate current BMI","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":1}}},{"hash":"ff8698ac8c421d2e8767e68b54691bcb7f3c94b7","isMergeCommit":false,"messageTitle":"Removed unused import","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"a5c2b040cc9e2beae319d5e605418d22cff4d755","isMergeCommit":true,"messageTitle":"Merge pull request #77 from J0shuaLeong/branch-BMI","messageBody":"Added BMI feature","fileTypesAndContributionMap":{}},{"hash":"3d75b9c3290307dca6c1c4e5b9df90ad8302c4a5","isMergeCommit":false,"messageTitle":"Handled first profile input more smoothly","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":6}}},{"hash":"c6e11f47e68fe1d7e6a2cf4a3c023fafaf924a02","isMergeCommit":false,"messageTitle":"Added a print line for ui output design","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":1}}},{"hash":"5c437ef26485ed613fa5b92103004c12f019de1a","isMergeCommit":true,"messageTitle":"Merge pull request #78 from J0shuaLeong/master","messageBody":"Handle first profile input","fileTypesAndContributionMap":{}},{"hash":"a9f101be209fb8f924477d89e928916b47732190","isMergeCommit":false,"messageTitle":"Shifted BMI calculation to userprofile class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":7}}},{"hash":"6fa888e2eb367f249419f1c6b5549d1db7cdf319","isMergeCommit":false,"messageTitle":"Text ui test and gradle amendments","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"5683a596a40975b4d370a79f2101d3d5256da042","isMergeCommit":true,"messageTitle":"Merge pull request #80 from J0shuaLeong/branch-BMI-2","messageBody":"BMI calculation in UserProfile class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"ecad50d116a2c548cdc76e3d1867b38b840dcfa5","isMergeCommit":false,"messageTitle":"Updated user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":15,"deletions":0}}},{"hash":"acfe196133ec8ed48af9ecda2e68cfab09a4c484","isMergeCommit":false,"messageTitle":"Handle profile setting exception for negative numbers","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":16},"test-code":{"insertions":2,"deletions":1}}},{"hash":"dab456085aa1aca7f9a2f7c1827b6a6b4c23c9da","isMergeCommit":true,"messageTitle":"Merge pull request #81 from J0shuaLeong/branch-Exceptions","messageBody":"Exceptions for user profile","fileTypesAndContributionMap":{}},{"hash":"f88a0d31f0b60ae6f6c820f59708c67145830173","isMergeCommit":false,"messageTitle":"Updated user guide feature list to include bmi","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}},{"hash":"c5b35df1dcf02955de2586ce94b9ea050b5d30bb","isMergeCommit":false,"messageTitle":"Added save command (to be implemented)","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":1}}},{"hash":"84c24e7176ee3051f4c1c4480aac3a9537cf8376","isMergeCommit":false,"messageTitle":"Setup code for storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":0}}},{"hash":"c9b591228ae9effda0abdc3a2964de2102551d65","isMergeCommit":true,"messageTitle":"Merge pull request #83 from J0shuaLeong/master","messageBody":"Added save command\r\nSetup storage class for storing of all data","fileTypesAndContributionMap":{}},{"hash":"2719d5ccb50b3e9d03e818a0697533e42160646d","isMergeCommit":false,"messageTitle":"Refactor height, weight and calories to use its own class in data package Updated JUnitTest Updated text ui test Updated storage class for saving profile","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":65,"deletions":28},"test-code":{"insertions":3,"deletions":3}}},{"hash":"17f75854f23110b3f4022e566a09b86a0688f223","isMergeCommit":true,"messageTitle":"Merge pull request #86 from J0shuaLeong/master","messageBody":"Refactor height, weight and calories to use its own class in data package","fileTypesAndContributionMap":{}}]},{"date":"2023-10-21","commitResults":[{"hash":"458e331feceb3a60af8c019c86152cba0de8747b","isMergeCommit":false,"messageTitle":"Close file writer in storage and updated documentation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":1}}},{"hash":"b7a2ddc35a30020f454d5f22d3f4398206ea866f","isMergeCommit":true,"messageTitle":"Merge pull request #87 from J0shuaLeong/master","messageBody":"Close file writer in storage and updated documentation","fileTypesAndContributionMap":{}},{"hash":"db05dce629cccac103a5cda76f125bf4af19080c","isMergeCommit":true,"messageTitle":"Merge pull request #88 from ICubE-/abstract-data-structures","messageBody":"Update Height, Weight, and Calories","fileTypesAndContributionMap":{}},{"hash":"4b310d8f7f4adaf82df1acb54855e78f33024a8a","isMergeCommit":false,"messageTitle":"Updated delete workout to show the name of workout deleted","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":3}}},{"hash":"ec6cb056b6124c0dbd9b1b0b3186ed26bff7356b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"# Conflicts:\n#\tsrc/main/java/fittrack/command/DeleteWorkoutCommand.java\n#\ttext-ui-test/EXPECTED.TXT\n#\ttext-ui-test/input.txt\n","fileTypesAndContributionMap":{}},{"hash":"81a4486685e3596d7c49c0f7f373ce2a6dc7db21","isMergeCommit":false,"messageTitle":"Resolved merge conflicts","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":5}}},{"hash":"8a696e38738867e03ff49e1d64db5b80c965a387","isMergeCommit":true,"messageTitle":"Merge pull request #91 from J0shuaLeong/master","messageBody":"Updated text ui test inputs","fileTypesAndContributionMap":{}},{"hash":"703476348da31939b581dfe0fadbfb05226fc3a2","isMergeCommit":false,"messageTitle":"Maintain style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":7}}},{"hash":"ee228168b1199d92ec7caaaf62e44493e1d2e620","isMergeCommit":true,"messageTitle":"Merge pull request #92 from J0shuaLeong/master","messageBody":"Maintain style","fileTypesAndContributionMap":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"f5cff8ea74620e59d55496aaa240a6a9f9c0004b","isMergeCommit":false,"messageTitle":"Add saving meal list to file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":37,"deletions":6},"test-code":{"insertions":1,"deletions":1}}},{"hash":"a1cc375836a2055c6146df23c6fc133a672ffd4f","isMergeCommit":true,"messageTitle":"Merge pull request #94 from J0shuaLeong/branch-Storage","messageBody":"Add feature to save meal list to file","fileTypesAndContributionMap":{}},{"hash":"3e776623c514a3ed42cdd3af22ccad45cabac4d8","isMergeCommit":false,"messageTitle":"Add feature to save profile data and workout list contents into storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":74,"deletions":27}}},{"hash":"7e5e2e7b50b7760c269dea232d9fd4e34d5e8aac","isMergeCommit":false,"messageTitle":"Debugging error for runtest.bat","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"b1aa6b89cf382b3022470cbcd73dacab30a98e6b","isMergeCommit":true,"messageTitle":"Merge pull request #95 from J0shuaLeong/branch-Storage","messageBody":"Add storage feature for profile and workout list","fileTypesAndContributionMap":{}},{"hash":"a16720c3da30241da07e90d544b9ae31612ee5c6","isMergeCommit":false,"messageTitle":"Add auto save when user exits","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":7}}},{"hash":"b34d330f01f5dc6f7a6a9781545bcd45b16b8dfd","isMergeCommit":false,"messageTitle":"Updated text ui test","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"24ccaf48e41c51feb5240f2ba5b4a0ab8cb6c876","isMergeCommit":false,"messageTitle":"check","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"52dc2a821185dea87f487c54fb4b8a01a8a25e4c","isMergeCommit":true,"messageTitle":"Merge pull request #96 from J0shuaLeong/branch-Storage","messageBody":"Auto save when user exits","fileTypesAndContributionMap":{}}]}],"ICubE-":[{"date":"2023-10-04","commitResults":[{"hash":"abbffb5b236ae12b40cbc1d1b417c696eb1895cb","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"23e7c820a25b9502c982950501d8a63f4426d090","isMergeCommit":true,"messageTitle":"Resolve merge conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"39e108362a8dae6e9420224e6a55b0ee160dbae5","isMergeCommit":true,"messageTitle":"Merge pull request #3 from ICubE-/master","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-09","commitResults":[{"hash":"7c693bb7c412eb7a6cfc6d7f099d7bb94aae2aeb","isMergeCommit":false,"messageTitle":"Construct main structure","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":51,"deletions":21},"other":{"insertions":2,"deletions":2}}},{"hash":"fb340aa0ea5ed0cd1c6dde8b051cbbcaa792194e","isMergeCommit":false,"messageTitle":"Fix style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":7}}},{"hash":"8912dea13964567d796fa4bbc76d55588b1ec207","isMergeCommit":false,"messageTitle":"Fix test","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"86c0f2188bcea12f5a76d997b017234465006224","isMergeCommit":true,"messageTitle":"Merge pull request #19 from ICubE-/construct-main-structure","messageBody":"Construct main structure","fileTypesAndContributionMap":{}},{"hash":"f8d2bbcd00c0d11ae2629994771c4c164eaf0316","isMergeCommit":false,"messageTitle":"Add parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":242,"deletions":6}}},{"hash":"bd9b6f1918fe1e779ba23341f6d95e2bb2c92395","isMergeCommit":true,"messageTitle":"Merge pull request #21 from ICubE-/add-command-line-parser","messageBody":"Add parser","fileTypesAndContributionMap":{}}]},{"date":"2023-10-10","commitResults":[{"hash":"9839af36423c550dbbb9e9b81a0c434c7508b92a","isMergeCommit":false,"messageTitle":"Add parser feature Implement help","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":317,"deletions":10}}},{"hash":"9fcf9cfd45f0fe46041507e01ec9a5fd53943e14","isMergeCommit":true,"messageTitle":"Merge pull request #23 from ICubE-/add-command-line-parser","messageBody":"Add parser feature\r\nImplement help","fileTypesAndContributionMap":{}}]},{"date":"2023-10-11","commitResults":[{"hash":"bfcf45955781ddbb8a86b033e7cff341b25c9140","isMergeCommit":false,"messageTitle":"Rename class names and remove duplicate","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":33},"other":{"insertions":2,"deletions":2}}},{"hash":"ea9ccf44a2a24c25748df6e398f69fe40d6c4f8b","isMergeCommit":true,"messageTitle":"Merge pull request #24 from ICubE-/master","messageBody":"Rename class names and remove duplicate","fileTypesAndContributionMap":{}}]},{"date":"2023-10-13","commitResults":[{"hash":"06fe2465cbc89fa15ed477cb2452d868f0a33704","isMergeCommit":false,"messageTitle":"Fix description and usage of help command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":2}}},{"hash":"9dfb3871fa50f66d9187b82ce7a0ae9b50c99fb4","isMergeCommit":false,"messageTitle":"Add viewmeal command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":0}}}]},{"date":"2023-10-16","commitResults":[{"hash":"c88e6f63bb1d0ff05c1724791e14526d3494784c","isMergeCommit":false,"messageTitle":"Add JUnit test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":7},"test-code":{"insertions":81,"deletions":0}}},{"hash":"a240c422c06c2291bb2559f146a58e728cba2c2a","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into add-command-line-parser","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a5bd1b439c8c4bc034afc3dd91d70732fa935d75","isMergeCommit":false,"messageTitle":"Resolve merge conflict","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":6}}},{"hash":"d2ee3d611b3371e01643eb09253c9d8feb550a05","isMergeCommit":false,"messageTitle":"Fix text-ui-test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"1f61f5bad510d7516359d62922dc690a577a4f06","isMergeCommit":true,"messageTitle":"Merge pull request #32 from ICubE-/add-command-line-parser","messageBody":"Add JUnit test","fileTypesAndContributionMap":{}},{"hash":"fbd34947a89c6ded5d4267d99a4e275e6ada0ead","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into implement-help-viewmeal","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"351d250a2faa2c16de83319e35857dd064936390","isMergeCommit":true,"messageTitle":"Merge pull request #33 from ICubE-/implement-help-viewmeal","messageBody":"Implement help command","fileTypesAndContributionMap":{}},{"hash":"62b7bf6fe234f4d4094f23d707861a3a4b0191ab","isMergeCommit":false,"messageTitle":"Fix compile error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":15}}},{"hash":"32592d9af6c70dd4ed6e2b69af8f7b34391cc720","isMergeCommit":false,"messageTitle":"Maintain code style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":15}}},{"hash":"e118470f8473f608124ce6000f004effaf006a5e","isMergeCommit":false,"messageTitle":"Modify code structure","messageBody":"Change term \u0027work\u0027 -\u003e \u0027workout\u0027\nRemove duplicate: ListMealsCommand\nStandardize terms: \u0027check\u0027, \u0027list\u0027 -\u003e \u0027view\u0027\nRefactor UserProfile to have daily calorie surplus limit\n","fileTypesAndContributionMap":{"functional-code":{"insertions":144,"deletions":140},"other":{"insertions":15,"deletions":14},"test-code":{"insertions":12,"deletions":10}}},{"hash":"02d392d09491b3e5f7a52856e793e652c33eea96","isMergeCommit":true,"messageTitle":"Resolve conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fae647fca619bf452727fd19e3035e3eb42f9099","isMergeCommit":true,"messageTitle":"Resolve conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d72196bc2be0e437983aa15885fbfc8b55b8cb97","isMergeCommit":true,"messageTitle":"Merge pull request #37 from ICubE-/master","messageBody":"Modify code structure","fileTypesAndContributionMap":{}},{"hash":"6850ccb23a15923447639e53c1f1b2f6780c88f7","isMergeCommit":false,"messageTitle":"Maintain code style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"2cfb9f88724ef74608e9576c5a33066cbd0e09e8","isMergeCommit":true,"messageTitle":"Merge pull request #39 from ICubE-/master","messageBody":"Maintain code style","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"10fb9a4437597dc560def7c12337be63888862fb","isMergeCommit":false,"messageTitle":"Update command words","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"5e5d7311f419a2c99fbada6c3dacf6de1be27a17","isMergeCommit":false,"messageTitle":"Remove redundant commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":75}}},{"hash":"ad1c7208fc8949224ac4b3dc7ff20ff89558d7f9","isMergeCommit":false,"messageTitle":"Update command words","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"7837767b11a9ad4528707336675ac3e303c74730","isMergeCommit":false,"messageTitle":"Refactor CommandParser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":6}}},{"hash":"5c4f2a2d9bfa034d6d40cd0afa40053b009f00d0","isMergeCommit":false,"messageTitle":"Change HELPs\u0027 access modifier to public","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":6}}},{"hash":"1b4e3a00c5d88652694c1cd68596266c73a99edb","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":2},"test-code":{"insertions":79,"deletions":2}}},{"hash":"d6034fc3e0b020759d5180cded42404f812c586a","isMergeCommit":false,"messageTitle":"Fix style","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":2}}},{"hash":"bcd5ccd469ec5377ed534e8af92c77ef74194470","isMergeCommit":true,"messageTitle":"Merge pull request #43 from ICubE-/add-junit-test","messageBody":"Add JUnit tests","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"9cf6ea6e1a47cf7fc45795a45085363aec71ec87","isMergeCommit":false,"messageTitle":"Update build.gradle","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"2782e54c7fad18887b8b2a26a9efa7f21558d3c0","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"149e1bee352449e010f1e6204e24aff50922c98f","isMergeCommit":true,"messageTitle":"Merge pull request #48 from ICubE-/master","messageBody":"Update build.gradle","fileTypesAndContributionMap":{}},{"hash":"d4c97f5af0b2cd527f11496afb3f53b6d3a24d8d","isMergeCommit":true,"messageTitle":"Merge pull request #49 from marklin2234/delete-workout","messageBody":"add delete","fileTypesAndContributionMap":{}},{"hash":"0f2f80d367518e4a6a47698c6f5eb5911a0f5dd4","isMergeCommit":false,"messageTitle":"Maintain code style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":11}}},{"hash":"1cc2586c833d13392b19940d770b64902105b0e5","isMergeCommit":false,"messageTitle":"Fix to pass test","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}},{"hash":"e8479cedc7a63b13b2f2d69d21ef2b32e213c207","isMergeCommit":true,"messageTitle":"Merge pull request #50 from ICubE-/master","messageBody":"Maintain code style","fileTypesAndContributionMap":{}},{"hash":"0ee1a31d3dae37c0c542a75d8b39336b732dcce8","isMergeCommit":false,"messageTitle":"Update references","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":0}}},{"hash":"ea20895fc3136aa81a7043643a1438335c3a8913","isMergeCommit":true,"messageTitle":"Merge pull request #52 from ICubE-/master","messageBody":"Update references","fileTypesAndContributionMap":{}},{"hash":"755ae59d569ed581cb7a7589633df9a6abc5c4c4","isMergeCommit":false,"messageTitle":"Update DeleteWorkoutCommand.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"450a8ef7c72bf3762f8a886de536cffa85c3d926","isMergeCommit":false,"messageTitle":"Update build.gradle","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":0}}},{"hash":"e75d9fd7d4f272c1d6aa870b3f28ee0f7762045d","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c144ba92e31d51962de4635273f21e5631c1bad1","isMergeCommit":true,"messageTitle":"Merge pull request #53 from ICubE-/master","messageBody":"Fix minor thingys","fileTypesAndContributionMap":{}},{"hash":"c05ef090dd1e85d3330d3cbaf66c7c2e546b7d3d","isMergeCommit":true,"messageTitle":"Merge pull request #55 from J0shuaLeong/master","messageBody":"Updated user guide","tags":["v1.0"],"fileTypesAndContributionMap":{}},{"hash":"c6056187018df3a34001c08348ea1c390cc7f24a","isMergeCommit":false,"messageTitle":"Fix bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":2},"other":{"insertions":0,"deletions":4}}},{"hash":"66a1cf4bb08160563cbd785a9a17b09557ee0549","isMergeCommit":false,"messageTitle":"Maintain style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":48,"deletions":27}}},{"hash":"3fe9b2b6f2198fc983932124f885e6a600d86e9d","isMergeCommit":true,"messageTitle":"Merge pull request #1 from ICubE-/maintain-code-style","messageBody":"Maintain style","fileTypesAndContributionMap":{}},{"hash":"fb527c6e2c5c84d2aa0eea59c352cbae444ee66b","isMergeCommit":true,"messageTitle":"Merge pull request #61 from ICubE-/fix-bug-and-maintain-style","messageBody":"Fix bug and maintain style","fileTypesAndContributionMap":{}},{"hash":"6e37cfe9bec197bf4c59044132c674c199392b8d","isMergeCommit":false,"messageTitle":"Fix bug in help","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"d43f391a2582f98832ed78aed16ad90a6afb4b29","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into handle-invalid-command-smoother","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2da0c01a747ba7a2b5222f91f8e141649c9b6083","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into fix-bug-and-maintain-style","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"411dc1394f74477f81785916c0c777621a5c87bd","isMergeCommit":false,"messageTitle":"Handle invalid command smoother","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":15},"test-code":{"insertions":1,"deletions":1}}},{"hash":"25c60717b15629cf088112dfd2068e198239b7c0","isMergeCommit":false,"messageTitle":"Fix test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"test-code":{"insertions":5,"deletions":1}}},{"hash":"0fc286ffb1b01e71d63f9731d1dd2a3cea8f729f","isMergeCommit":true,"messageTitle":"Merge pull request #64 from ICubE-/handle-invalid-command-smoother","messageBody":"Handle invalid command smoother","fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"f92708e8ea0065f577101f9fe4198f72d8899992","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into fix-bug-and-maintain-style","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"55d1d70c77de24e39dea837b58bef176442c9f28","isMergeCommit":false,"messageTitle":"Maintain style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":13}}},{"hash":"31dbc9878713b4976046d7e54a5fbac65687a934","isMergeCommit":false,"messageTitle":"Maintain style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":9}}},{"hash":"00bd5cbe31d22e577277f35fce893d5fbe6da682","isMergeCommit":true,"messageTitle":"Merge pull request #84 from ICubE-/fix-bug-and-maintain-style","messageBody":"Maintain style","fileTypesAndContributionMap":{}},{"hash":"9b057d59046459249901985061f6c80461d898f5","isMergeCommit":false,"messageTitle":"Abstract data","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":66,"deletions":10}}},{"hash":"eecbc699fa82f683ea9c0e482220fa0db37f353c","isMergeCommit":false,"messageTitle":"Maintain style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"ba3ed4d394d4b37e1b8c1e44cdb21d497b3834ad","isMergeCommit":false,"messageTitle":"Update Height, Weight, Calories","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":60,"deletions":0}}},{"hash":"6b55deec90c28acef909a6db9c7d19f66e2d9254","isMergeCommit":false,"messageTitle":"Update Height, Weight, Calories","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":6}}},{"hash":"746fe8aed4792002f43283fc26e536ed1d574972","isMergeCommit":false,"messageTitle":"Add date","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":52,"deletions":1}}},{"hash":"4085a2e2f733300b10cc1d533138a0e68a5cda54","isMergeCommit":true,"messageTitle":"Merge pull request #85 from ICubE-/abstract-data-structures","messageBody":"Abstract data structures","fileTypesAndContributionMap":{}}]},{"date":"2023-10-21","commitResults":[{"hash":"f81add2d28ed21454df1a3940c603c5d0aa5d29e","isMergeCommit":false,"messageTitle":"Update Height, Weight, and Calories","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":30,"deletions":52},"test-code":{"insertions":3,"deletions":3}}},{"hash":"94c1534c0b6acda6686b5dcd39fd2a54f5db1097","isMergeCommit":false,"messageTitle":"Add Date field in Meal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":16}}},{"hash":"4907b7bf244ab895de10c0ad1dfc7dfb50815cb7","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into add-date-to-commands","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"df1286c133376aec1c6e12528db08bbbe84ab4b6","isMergeCommit":false,"messageTitle":"Fix regex","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"d15923d35b33a73b31233f77ae09f772c9e1b100","isMergeCommit":false,"messageTitle":"Add Date field in Workout","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":17}}},{"hash":"f5f484307b2233d7a02d897842c394470019e927","isMergeCommit":false,"messageTitle":"Add assertion","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"68630df58a0d05e89e7abaa34b97e54543cc35ea","isMergeCommit":false,"messageTitle":"Make commands not to use static","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":17,"deletions":13}}},{"hash":"b456fd5eee8676ae38af86858d32c45dd6b65f2b","isMergeCommit":false,"messageTitle":"Maintain style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":6}}},{"hash":"4990a15269b620ae56289963bcf8f9a6c140ec04","isMergeCommit":true,"messageTitle":"Merge pull request #89 from ICubE-/add-date-to-commands","messageBody":"Add date to commands","fileTypesAndContributionMap":{}},{"hash":"62d893c4a09eeecfc6f643861de595fb79428ae7","isMergeCommit":false,"messageTitle":"Restructure packages","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":6},"other":{"insertions":8,"deletions":14}}},{"hash":"c9d9a7645338add77591a1331f4ad4d3e6356a68","isMergeCommit":true,"messageTitle":"Merge pull request #90 from ICubE-/abstract-data-structures","messageBody":"Restructure packages","fileTypesAndContributionMap":{}}]}],"marklin2234":[{"date":"2023-10-04","commitResults":[{"hash":"9d5c2b2aeb519efd81570d45afba1fd7efd61325","isMergeCommit":false,"messageTitle":"change name (#2)","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}}]},{"date":"2023-10-18","commitResults":[{"hash":"a7981fdf23fa49c4f7b677d5b5dfda2fb99225b4","isMergeCommit":false,"messageTitle":"add delete","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":2}}},{"hash":"97268deb0ffd66af5bd78208322db50e4b338b40","isMergeCommit":false,"messageTitle":"fix delete workout (#51)","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":3}}}]},{"date":"2023-10-22","commitResults":[{"hash":"02dd916c55538bb56569fbe906abb50c72240344","isMergeCommit":false,"messageTitle":"delete workout error handling (#93)","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":5}}}]}],"farissirraj":[{"date":"2023-10-04","commitResults":[{"hash":"d29c533ec8490161881211184e028eb258c44809","isMergeCommit":false,"messageTitle":"Change name in About Us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}}]},{"date":"2023-10-09","commitResults":[{"hash":"7bb04d887d4ece7439d62030cfa67a5d840825c7","isMergeCommit":false,"messageTitle":"Create class for checking calorie surplus limit command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":0}}},{"hash":"a212cb420bd3cf786e68bbddb94452a5d41867af","isMergeCommit":false,"messageTitle":"Create class for checking the height","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":0}}},{"hash":"5d4b5515c143fe1c0f60dd65b5e86c6930cb7c12","isMergeCommit":false,"messageTitle":"Create class for checking the weight","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":0}}},{"hash":"6042ca31a30101f604c269182bfe03db3c1d73f8","isMergeCommit":false,"messageTitle":"Create class for listing the workout","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":0}}},{"hash":"7e623f8cf9bc78fc3ebdae9068637c23022448a5","isMergeCommit":false,"messageTitle":"Create class for setting the daily calorie limit","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":0}}},{"hash":"040b81c6dceccbbf71d81692fcf9d7e04571af43","isMergeCommit":false,"messageTitle":"Update Command Parser Class with the new command class constructor calls","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":11}}},{"hash":"26808bf357e853bc3f770f7ca8f9e01e92c45ed0","isMergeCommit":true,"messageTitle":"Merge pull request #22 from farissirraj/BasicCommands","messageBody":"Skeletal Implementation of Basic Commands","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"f6f43556d8ee795f2c788631c0ad56d066ffd4ab","isMergeCommit":false,"messageTitle":"Import relevant packages","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"66e239354d0fa35518963f00c3db3ef9b4c72c63","isMergeCommit":false,"messageTitle":"Define description, usage and help messages/instructions for the addworkout command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"ef61fc817505941ca5059d5c7411cf668677435b","isMergeCommit":false,"messageTitle":"Add functionality to add the new workout to the workoutList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"3fbb1cc4ecdb002841125829a5fbf83cd0ef1f58","isMergeCommit":false,"messageTitle":"Add functionality to parse the calories from the user input","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"5f1f4a32e4a4df65930abd3b5c64efab86e054b6","isMergeCommit":false,"messageTitle":"Add functionality to return help messages as needed - AddWorkoutCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"dbc107ac3824cf1f605c127925a60b80dba7f07d","isMergeCommit":false,"messageTitle":"Add addworkout and viewWorkout to the list of command words","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"ae01b88887c2b68e3826bf0740fd5198d8d5617a","isMergeCommit":false,"messageTitle":"Add help messages for the ViewWorkoutsCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":1}}},{"hash":"24cc96e773a935bd9ebda08fe082a0d53a728214","isMergeCommit":false,"messageTitle":"Add help message callback for the viewWorkoutsCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"9cb261295501ef2d7b9c96f94d5099a0b2693824","isMergeCommit":false,"messageTitle":"Add functionality to list the workouts in the list of workouts","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":1}}},{"hash":"553acb6d792a924d93406b0538e728ff56900390","isMergeCommit":false,"messageTitle":"Create a new class for the list of workouts","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":32,"deletions":0}}}]},{"date":"2023-10-18","commitResults":[{"hash":"7af2404cab7f15393ba74ab874b00b870f7de78d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into WorkoutOperations","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9f0a6024504c35da5ff544452bb8f3a395799510","isMergeCommit":false,"messageTitle":"Create Workout Class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":0}}},{"hash":"01ca5f7bea8bc3d49389886c0830acd9fb1466e4","isMergeCommit":false,"messageTitle":"Add assertion","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"8d0d8034a12f6a0a58ed437757c367680b0e6ac4","isMergeCommit":false,"messageTitle":"Fix indentation issue","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"14b877efe5d0e6cc0b54b309d1b7eefeedcb8411","isMergeCommit":false,"messageTitle":"Reduce the number of charecters per line","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"6e0506c527d74f6dddbe78421f5fe81bc81e8582","isMergeCommit":true,"messageTitle":"Merge pull request #47 from farissirraj/WorkoutOperations","messageBody":"Workout Operations","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"NgLixuanNixon":{"docs":2,"functional-code":79,"test-code":0},"J0shuaLeong":{"docs":210,"functional-code":344,"test-code":45,"other":1},"ICubE-":{"docs":1,"functional-code":912,"test-code":166,"other":3},"marklin2234":{"docs":1,"functional-code":30,"test-code":0},"farissirraj":{"docs":1,"functional-code":69,"test-code":0}},"authorContributionVariance":{"NgLixuanNixon":1470.8451,"J0shuaLeong":8135.6772,"ICubE-":17915.6,"marklin2234":45.496353,"farissirraj":357.88354},"authorDisplayNameMap":{"NgLixuanNixon":"CS2113-W12-4 NG L..IXON","J0shuaLeong":"CS2113-W12-4 LEON..SHUA","ICubE-":"CS2113-W12-4 YEON..JEHO","marklin2234":"CS2113-W12-4 LIN ..ZHAO","farissirraj":"CS2113-W12-4 FARI..RRAJ"}} +{"authorDailyContributionsMap":{"NgLixuanNixon":[{"date":"2023-10-04","commitResults":[{"hash":"4ab6262ae774e0814318657e4c558d6cc3350673","isMergeCommit":false,"messageTitle":"no message","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"101aed2384bcb8998fc22b98f9e0e60fe4db98a1","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"# Conflicts:\n#\tdocs/AboutUs.md\n","fileTypesAndContributionMap":{}},{"hash":"8ba23607fabe7e06789e5d3f3e43be80846d20d6","isMergeCommit":true,"messageTitle":"Merge pull request #4 from NgLixuanNixon/master","messageBody":"no message","fileTypesAndContributionMap":{}}]},{"date":"2023-10-16","commitResults":[{"hash":"ec330be865b21f5425e328b2b95a50096a58ef7d","isMergeCommit":false,"messageTitle":"addmeal, listmeals, deletemeal done","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":121,"deletions":37}}},{"hash":"bdaf6df718f2ee08800477660fa44aca22780007","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"789d019f030cdf0c9f77ca6e04fc367db4dc9bb8","isMergeCommit":false,"messageTitle":"fix gradle issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":34,"deletions":19}}},{"hash":"e7337397dc7d27d57335a89b0f44b14e48720f8c","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"e6471b91b476d70e8a5c89cb8939312263fc6faf","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/NgLixuanNixon/tp","messageBody":"# Conflicts:\n#\tsrc/main/java/fittrack/FitTrack.java\n#\tsrc/main/java/fittrack/parser/CommandParser.java\n","fileTypesAndContributionMap":{}},{"hash":"148070b111d5739d1ae4eef3757b93a8a6208d19","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/NgLixuanNixon/tp","messageBody":"# Conflicts:\n#\tsrc/main/java/fittrack/command/AddMealCommand.java\n#\tsrc/main/java/fittrack/parser/CommandParser.java\n","fileTypesAndContributionMap":{}},{"hash":"5e9d81a5463296e9907bd247d4adaa3aa37a8ee0","isMergeCommit":true,"messageTitle":"Merge pull request #34 from NgLixuanNixon/master","messageBody":"addmeal, listmeals, deletemeal done","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"186f7cac7f6214f3378314e1e2ae9020ddc455ff","isMergeCommit":false,"messageTitle":"Handled errors for addmeal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":38,"deletions":12},"other":{"insertions":4,"deletions":0}}},{"hash":"1875500183df3f54394d853abb305ab29548ff33","isMergeCommit":false,"messageTitle":"fixed gradle issues","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"ea42ca57a9d429f302dc8ef2c2e77cb733c800d5","isMergeCommit":true,"messageTitle":"Merge pull request #57 from NgLixuanNixon/master","messageBody":"Handled errors for addmeal","fileTypesAndContributionMap":{}}]}],"J0shuaLeong":[{"date":"2023-10-04","commitResults":[{"hash":"876b14733ab2c2f66a734e06eb747a78c826321f","isMergeCommit":false,"messageTitle":"Testing merge conflicts","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"4525128b17846fdf989665421598f11f97f77cd5","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"# Conflicts:\n#\tdocs/AboutUs.md\n","fileTypesAndContributionMap":{}},{"hash":"39225c42663245b93019510083b7e04ff9cb9da8","isMergeCommit":false,"messageTitle":"Testing merge conflicts (#1)","messageBody":"Co-authored-by: J0shuaLeong \u003cjoshualeong2607@gmail.com\u003e","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":2}}}]},{"date":"2023-10-06","commitResults":[{"hash":"00754d02077806296c6abe1ee2b28c81ece7c7d9","isMergeCommit":false,"messageTitle":"Added url of Joshua\u0027s github account","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"fb08a8ce2dce2800632c72c310afa1beb5ec9124","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"# Conflicts:\n#\tdocs/AboutUs.md\n","fileTypesAndContributionMap":{}},{"hash":"12ea145c28769e5788ab86fcfb3c0f1c12034e40","isMergeCommit":false,"messageTitle":"Add Github Url (#5)","messageBody":"* Testing merge conflicts\r\n\r\n* Added url of Joshua\u0027s github account\r\n\r\n---------\r\n\r\nCo-authored-by: J0shuaLeong \u003cjoshualeong2607@gmail.com\u003e","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"33a87b9b4c6074497792b6df777142aa50592755","isMergeCommit":false,"messageTitle":"Updated about us for Joshua","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":1}}},{"hash":"f7c473d3bc2615095964e35a8f29496f8e5ea9bf","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into master","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"56f586e798bf3b7040b68cfc62cfd8387b56cfa8","isMergeCommit":false,"messageTitle":"Update about us (#6)","messageBody":"* Testing merge conflicts\r\n\r\n* Added url of Joshua\u0027s github account\r\n\r\n* Updated about us for Joshua\r\n\r\n---------\r\n\r\nCo-authored-by: J0shuaLeong \u003cjoshualeong2607@gmail.com\u003e","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":1}}}]},{"date":"2023-10-07","commitResults":[{"hash":"fa123edc9ce51e0b964913e019da00cea03b471d","isMergeCommit":false,"messageTitle":"Resized profile image","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}},{"hash":"a2d753035d1753279501aa0248b3b77f0938735a","isMergeCommit":false,"messageTitle":"Updated images (#7)","messageBody":"* Testing merge conflicts\r\n\r\n* Added url of Joshua\u0027s github account\r\n\r\n* Updated about us for Joshua\r\n\r\n* Resized profile image\r\n\r\n---------\r\n\r\nCo-authored-by: J0shuaLeong \u003cjoshualeong2607@gmail.com\u003e","fileTypesAndContributionMap":{"docs":{"insertions":1,"deletions":1}}}]},{"date":"2023-10-10","commitResults":[{"hash":"0f8af349d9000c0d483fc71432c626a8a5cd53c4","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"","fileTypesAndContributionMap":{}}]},{"date":"2023-10-13","commitResults":[{"hash":"7417ad91d5c6a9ed2dcae17834b0b2c29b1480cd","isMergeCommit":false,"messageTitle":"Edited user profile code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":1}}},{"hash":"2f065ea4330f28c3dbedeabefd61f4e27e182661","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2b84827c782d8ed7f562793b4e3a2b4f6685144f","isMergeCommit":true,"messageTitle":"Merge pull request #25 from J0shuaLeong/master","messageBody":"Edited User Profile Class","fileTypesAndContributionMap":{}},{"hash":"8ae7b2adcdadb81a53176e8f9d694bb5c184e183","isMergeCommit":false,"messageTitle":"Updated user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":43,"deletions":6}}},{"hash":"454a749d204a4ada42de8bb3d6b5304619c3fd44","isMergeCommit":true,"messageTitle":"Merge pull request #26 from J0shuaLeong/master","messageBody":"Updated User Guide","fileTypesAndContributionMap":{}},{"hash":"82b5ca3547dd04e7504726a7626be24e93dad331","isMergeCommit":false,"messageTitle":"Further additions to user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":64,"deletions":14}}},{"hash":"da100b852256464d51ef94689c4097026a0647c9","isMergeCommit":true,"messageTitle":"Merge pull request #27 from J0shuaLeong/master","messageBody":"Further additions to user guide","fileTypesAndContributionMap":{}},{"hash":"93a881b23789c2953bcb53d07363c8872b33e3f8","isMergeCommit":false,"messageTitle":"Completed main structure and format of user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":118,"deletions":13}}},{"hash":"5ce5512fc25f3d09aa446a2b188d3ca82406e1f6","isMergeCommit":true,"messageTitle":"Merge pull request #28 from J0shuaLeong/master","messageBody":"Completed main structure and format of user guide","fileTypesAndContributionMap":{}},{"hash":"3b7cdfcf3a0bd433e566308880b1b536b6cd2026","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp into branch-UserProfile","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"f0f13d10d640d13101e2f1856c08b6eff21b40aa","isMergeCommit":false,"messageTitle":"Added printing of line, welcome message and message for user profile","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":2}}},{"hash":"bf5445e71efffb2df1bd18a67a7c94cbf589db4c","isMergeCommit":false,"messageTitle":"Removed unused getters and setters","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":26,"deletions":2}}},{"hash":"0b368b322b9776bb5b7a48d27ef2982113f83c3f","isMergeCommit":false,"messageTitle":"Edited goodbye message","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":27}}},{"hash":"a5aae6762a20a4f039faea626b08261235769644","isMergeCommit":false,"messageTitle":"Minor changes","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"3ed3a85f8b3e9fd519f1b2da097b676be7005c8d","isMergeCommit":true,"messageTitle":"Merge pull request #29 from J0shuaLeong/branch-UserProfile","messageBody":"Branch user profile","fileTypesAndContributionMap":{}},{"hash":"20a8b62b077408e51d2aa8145ec1235a72f9e604","isMergeCommit":false,"messageTitle":"Fixing workflow error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}}]},{"date":"2023-10-16","commitResults":[{"hash":"9cbade9d68afcdcd1485f5c976478d740c9d6551","isMergeCommit":true,"messageTitle":"Merge pull request #30 from J0shuaLeong/master","messageBody":"Fixing workflow error","fileTypesAndContributionMap":{}},{"hash":"d10fa6c2254138a4ce1655a6df9c7446fa3e066f","isMergeCommit":false,"messageTitle":"Fixing CI workflow","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"fceae9db5b092c63bea986127528c1df28f2eec5","isMergeCommit":false,"messageTitle":"Removed unnecessary code","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"413811f1a922bab7b122948af8a900f36277c9c0","isMergeCommit":false,"messageTitle":"Removed line to print to output","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":6}}},{"hash":"3217bc45225ed0a6dbf21a49effbf136dc90ebce","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"# Conflicts:\n#\ttext-ui-test/EXPECTED.TXT\n#\ttext-ui-test/input.txt\n","fileTypesAndContributionMap":{}},{"hash":"a6cbb52ff61092af10a8a82ba54fd9a625338222","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"# Conflicts:\n#\tsrc/main/java/fittrack/FitTrack.java\n","fileTypesAndContributionMap":{}},{"hash":"68701621fc7242184a5703cb67ea2b408253b6b2","isMergeCommit":true,"messageTitle":"Merge pull request #31 from J0shuaLeong/master","messageBody":"Trying to fix CI workflow error","fileTypesAndContributionMap":{}},{"hash":"83fce9b72f7c482d32bdd4c4b28ed6cc9a998032","isMergeCommit":false,"messageTitle":"Clean up","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":4}}},{"hash":"4cf5b0ccc6395d1d1a2a57444b5c0ccfe62741a4","isMergeCommit":false,"messageTitle":"Added edit profile feature","messageBody":"#15\n","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":19}}},{"hash":"2a243f70f8a1897300feb6bc4c97371ae9f1cafc","isMergeCommit":false,"messageTitle":"Updated documentation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"b16834a8fde70c58e05b8a8d4178e854f56d90d7","isMergeCommit":true,"messageTitle":"Merge pull request #35 from J0shuaLeong/branch-EditProfile","messageBody":"Edit profile feature","fileTypesAndContributionMap":{}},{"hash":"08569d9cd674eb4b423a2dbd29f081eca671fe03","isMergeCommit":false,"messageTitle":"Added FitTrack logo","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":5}}},{"hash":"4569e643fd8f9bb7f4633c8a20ffb723f2fe79cb","isMergeCommit":false,"messageTitle":"Removed unused import","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":3}}},{"hash":"5deadd1af4dd3bcd3055fca3446108755fee8ad8","isMergeCommit":true,"messageTitle":"Merge pull request #36 from J0shuaLeong/branch-EditProfile","messageBody":"Added Fit Track Logo","fileTypesAndContributionMap":{}},{"hash":"639919d1f2318714b93d32da32373782a4ed3807","isMergeCommit":false,"messageTitle":"Add view profile feature","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":32,"deletions":16}}},{"hash":"8906d09a4a41207e7ad50b996ae33cda14a799a2","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp into branch-ViewProfile","messageBody":"# Conflicts:\n#\tsrc/main/java/fittrack/command/AddWorkoutCommand.java\n#\tsrc/main/java/fittrack/parser/CommandParser.java\n","fileTypesAndContributionMap":{}},{"hash":"2a0f21679cac0cf6d5f79a5c12da75095bbf91db","isMergeCommit":true,"messageTitle":"Merge pull request #38 from J0shuaLeong/branch-ViewProfile","messageBody":"Added view profile feature","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"ef4a1cebdb53f2de0b5c69181883de2e5f3c749c","isMergeCommit":false,"messageTitle":"JUnitTest for editProfileCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":0},"test-code":{"insertions":16,"deletions":0}}},{"hash":"d430314e091083e4c451021ed932543a62127bd9","isMergeCommit":true,"messageTitle":"Merge pull request #44 from J0shuaLeong/branch-JUnitTest","messageBody":"JUnitTest for editProfileCommand","fileTypesAndContributionMap":{}},{"hash":"d8fd6b04266046a5f2113852565395d3f09c8ef3","isMergeCommit":false,"messageTitle":"JUnitTest for edit profile command","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":33,"deletions":5}}},{"hash":"58fa61303f9455d00f8d2e0f080c7fb8a8ce4389","isMergeCommit":true,"messageTitle":"Merge pull request #45 from J0shuaLeong/branch-JUnitTest","messageBody":"JUnitTest for edit profile command","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"7e532ea9c50b8ff39776ea764b8cf6a4acba6c8e","isMergeCommit":false,"messageTitle":"Updated the user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":36,"deletions":98}}},{"hash":"85d24b4844f20bae7fecba9922e39669f0b6109a","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"5213c31f70df024522b7da37d56fa95d25feaa5a","isMergeCommit":false,"messageTitle":"Add assertions","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"4065ee5a0200d6ce21181b6d80960f1997205777","isMergeCommit":true,"messageTitle":"Merge pull request #56 from J0shuaLeong/master","messageBody":"Add assertions","fileTypesAndContributionMap":{}}]},{"date":"2023-10-19","commitResults":[{"hash":"e00319ba7d8f82da9738f1130e1485d138192862","isMergeCommit":false,"messageTitle":"Updated the user guide and rearranged commands to make it more organised","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":62,"deletions":38}}},{"hash":"d6681002268d7d326d8f4cb463553144be39cdd0","isMergeCommit":true,"messageTitle":"Merge pull request #73 from J0shuaLeong/master","messageBody":"Updated the user guide ","fileTypesAndContributionMap":{}},{"hash":"5efe97c31994e2883acbf74937f5cc4997fb2b93","isMergeCommit":false,"messageTitle":"Added viewprofile command to userguide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":21,"deletions":0}}},{"hash":"e7c50f21c4e88697f618cda81ba2e0a8866dd414","isMergeCommit":true,"messageTitle":"Merge pull request #74 from J0shuaLeong/branch-TextUiTest","messageBody":"Text Ui Test","fileTypesAndContributionMap":{}},{"hash":"ed895baf5c29f3e721f5065900a58bc5fb0ee4a4","isMergeCommit":false,"messageTitle":"Added assertion for profile settings","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":1}}},{"hash":"2c6484d65f14b9b9ca429de5478d7550d5c1cd84","isMergeCommit":true,"messageTitle":"Merge pull request #75 from J0shuaLeong/master","messageBody":"Added assertion for profile settings","fileTypesAndContributionMap":{}},{"hash":"556ab420e4b8c7f6cc7c400369923ed53fbdf306","isMergeCommit":false,"messageTitle":"Added feature to calculate current BMI","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":1}}},{"hash":"ff8698ac8c421d2e8767e68b54691bcb7f3c94b7","isMergeCommit":false,"messageTitle":"Removed unused import","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"a5c2b040cc9e2beae319d5e605418d22cff4d755","isMergeCommit":true,"messageTitle":"Merge pull request #77 from J0shuaLeong/branch-BMI","messageBody":"Added BMI feature","fileTypesAndContributionMap":{}},{"hash":"3d75b9c3290307dca6c1c4e5b9df90ad8302c4a5","isMergeCommit":false,"messageTitle":"Handled first profile input more smoothly","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":6}}},{"hash":"c6e11f47e68fe1d7e6a2cf4a3c023fafaf924a02","isMergeCommit":false,"messageTitle":"Added a print line for ui output design","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":1}}},{"hash":"5c437ef26485ed613fa5b92103004c12f019de1a","isMergeCommit":true,"messageTitle":"Merge pull request #78 from J0shuaLeong/master","messageBody":"Handle first profile input","fileTypesAndContributionMap":{}},{"hash":"a9f101be209fb8f924477d89e928916b47732190","isMergeCommit":false,"messageTitle":"Shifted BMI calculation to userprofile class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":19,"deletions":7}}},{"hash":"6fa888e2eb367f249419f1c6b5549d1db7cdf319","isMergeCommit":false,"messageTitle":"Text ui test and gradle amendments","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"5683a596a40975b4d370a79f2101d3d5256da042","isMergeCommit":true,"messageTitle":"Merge pull request #80 from J0shuaLeong/branch-BMI-2","messageBody":"BMI calculation in UserProfile class","fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"ecad50d116a2c548cdc76e3d1867b38b840dcfa5","isMergeCommit":false,"messageTitle":"Updated user guide","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":15,"deletions":0}}},{"hash":"acfe196133ec8ed48af9ecda2e68cfab09a4c484","isMergeCommit":false,"messageTitle":"Handle profile setting exception for negative numbers","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":23,"deletions":16},"test-code":{"insertions":2,"deletions":1}}},{"hash":"dab456085aa1aca7f9a2f7c1827b6a6b4c23c9da","isMergeCommit":true,"messageTitle":"Merge pull request #81 from J0shuaLeong/branch-Exceptions","messageBody":"Exceptions for user profile","fileTypesAndContributionMap":{}},{"hash":"f88a0d31f0b60ae6f6c820f59708c67145830173","isMergeCommit":false,"messageTitle":"Updated user guide feature list to include bmi","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}},{"hash":"c5b35df1dcf02955de2586ce94b9ea050b5d30bb","isMergeCommit":false,"messageTitle":"Added save command (to be implemented)","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":1}}},{"hash":"84c24e7176ee3051f4c1c4480aac3a9537cf8376","isMergeCommit":false,"messageTitle":"Setup code for storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":36,"deletions":0}}},{"hash":"c9b591228ae9effda0abdc3a2964de2102551d65","isMergeCommit":true,"messageTitle":"Merge pull request #83 from J0shuaLeong/master","messageBody":"Added save command\r\nSetup storage class for storing of all data","fileTypesAndContributionMap":{}},{"hash":"2719d5ccb50b3e9d03e818a0697533e42160646d","isMergeCommit":false,"messageTitle":"Refactor height, weight and calories to use its own class in data package Updated JUnitTest Updated text ui test Updated storage class for saving profile","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":65,"deletions":28},"test-code":{"insertions":3,"deletions":3}}},{"hash":"17f75854f23110b3f4022e566a09b86a0688f223","isMergeCommit":true,"messageTitle":"Merge pull request #86 from J0shuaLeong/master","messageBody":"Refactor height, weight and calories to use its own class in data package","fileTypesAndContributionMap":{}}]},{"date":"2023-10-21","commitResults":[{"hash":"458e331feceb3a60af8c019c86152cba0de8747b","isMergeCommit":false,"messageTitle":"Close file writer in storage and updated documentation","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":1}}},{"hash":"b7a2ddc35a30020f454d5f22d3f4398206ea866f","isMergeCommit":true,"messageTitle":"Merge pull request #87 from J0shuaLeong/master","messageBody":"Close file writer in storage and updated documentation","fileTypesAndContributionMap":{}},{"hash":"db05dce629cccac103a5cda76f125bf4af19080c","isMergeCommit":true,"messageTitle":"Merge pull request #88 from ICubE-/abstract-data-structures","messageBody":"Update Height, Weight, and Calories","fileTypesAndContributionMap":{}},{"hash":"4b310d8f7f4adaf82df1acb54855e78f33024a8a","isMergeCommit":false,"messageTitle":"Updated delete workout to show the name of workout deleted","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":3}}},{"hash":"ec6cb056b6124c0dbd9b1b0b3186ed26bff7356b","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 of https://github.com/AY2324S1-CS2113-W12-4/tp","messageBody":"# Conflicts:\n#\tsrc/main/java/fittrack/command/DeleteWorkoutCommand.java\n#\ttext-ui-test/EXPECTED.TXT\n#\ttext-ui-test/input.txt\n","fileTypesAndContributionMap":{}},{"hash":"81a4486685e3596d7c49c0f7f373ce2a6dc7db21","isMergeCommit":false,"messageTitle":"Resolved merge conflicts","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":5}}},{"hash":"8a696e38738867e03ff49e1d64db5b80c965a387","isMergeCommit":true,"messageTitle":"Merge pull request #91 from J0shuaLeong/master","messageBody":"Updated text ui test inputs","fileTypesAndContributionMap":{}},{"hash":"703476348da31939b581dfe0fadbfb05226fc3a2","isMergeCommit":false,"messageTitle":"Maintain style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":7}}},{"hash":"ee228168b1199d92ec7caaaf62e44493e1d2e620","isMergeCommit":true,"messageTitle":"Merge pull request #92 from J0shuaLeong/master","messageBody":"Maintain style","fileTypesAndContributionMap":{}}]},{"date":"2023-10-22","commitResults":[{"hash":"f5cff8ea74620e59d55496aaa240a6a9f9c0004b","isMergeCommit":false,"messageTitle":"Add saving meal list to file","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":37,"deletions":6},"test-code":{"insertions":1,"deletions":1}}},{"hash":"a1cc375836a2055c6146df23c6fc133a672ffd4f","isMergeCommit":true,"messageTitle":"Merge pull request #94 from J0shuaLeong/branch-Storage","messageBody":"Add feature to save meal list to file","fileTypesAndContributionMap":{}},{"hash":"3e776623c514a3ed42cdd3af22ccad45cabac4d8","isMergeCommit":false,"messageTitle":"Add feature to save profile data and workout list contents into storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":74,"deletions":27}}},{"hash":"7e5e2e7b50b7760c269dea232d9fd4e34d5e8aac","isMergeCommit":false,"messageTitle":"Debugging error for runtest.bat","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"b1aa6b89cf382b3022470cbcd73dacab30a98e6b","isMergeCommit":true,"messageTitle":"Merge pull request #95 from J0shuaLeong/branch-Storage","messageBody":"Add storage feature for profile and workout list","fileTypesAndContributionMap":{}},{"hash":"a16720c3da30241da07e90d544b9ae31612ee5c6","isMergeCommit":false,"messageTitle":"Add auto save when user exits","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":7}}},{"hash":"b34d330f01f5dc6f7a6a9781545bcd45b16b8dfd","isMergeCommit":false,"messageTitle":"Updated text ui test","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"24ccaf48e41c51feb5240f2ba5b4a0ab8cb6c876","isMergeCommit":false,"messageTitle":"check","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"52dc2a821185dea87f487c54fb4b8a01a8a25e4c","isMergeCommit":true,"messageTitle":"Merge pull request #96 from J0shuaLeong/branch-Storage","messageBody":"Auto save when user exits","fileTypesAndContributionMap":{}},{"hash":"8be621475e6551920d484b41f2cf1c01074e8669","isMergeCommit":false,"messageTitle":"Fixed delete workout","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":0},"other":{"insertions":1,"deletions":1}}},{"hash":"6b67beacf70740302dddcdd1f3a07acda9803a5a","isMergeCommit":false,"messageTitle":"Fix delete workout exception","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"other":{"insertions":1,"deletions":1}}},{"hash":"482ab155ecc1cb2cccce2edd4b69cd22a581405a","isMergeCommit":true,"messageTitle":"Merge pull request #98 from J0shuaLeong/branch-Storage","messageBody":"Fixed delete workout","fileTypesAndContributionMap":{}},{"hash":"cb293ae5393a0080cb35667dbadbb3cdeab35999","isMergeCommit":false,"messageTitle":"Updated the user guide with save command","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":17,"deletions":0}}},{"hash":"dc90e1d07448021f51ecefd25813709793ac7a78","isMergeCommit":false,"messageTitle":"Change message for save command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"2e5b6c8982e18c60966ab92bee9eb074a82a706c","isMergeCommit":false,"messageTitle":"Updated todo comment for load storage","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"2a416e4da689d8d38c9bd4b87715bd580d88b473","isMergeCommit":false,"messageTitle":"Debugging runtest.bat test fail error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":7},"other":{"insertions":1,"deletions":1}}},{"hash":"a8083556fc9fd51c2dfa4b738014f30eebfbaffa","isMergeCommit":false,"messageTitle":"CI workflow test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"262b02c90cbdbca3403d2471cb200a71b1723a0e","isMergeCommit":false,"messageTitle":"Revert code back","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":1},"other":{"insertions":1,"deletions":1}}},{"hash":"325445b9af833a3c55662bd4515794e8bde2c141","isMergeCommit":true,"messageTitle":"Merge pull request #100 from J0shuaLeong/master","messageBody":"Code clean up","fileTypesAndContributionMap":{}}]}],"ICubE-":[{"date":"2023-10-04","commitResults":[{"hash":"abbffb5b236ae12b40cbc1d1b417c696eb1895cb","isMergeCommit":false,"messageTitle":"Update AboutUs.md","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}},{"hash":"23e7c820a25b9502c982950501d8a63f4426d090","isMergeCommit":true,"messageTitle":"Resolve merge conflict","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"39e108362a8dae6e9420224e6a55b0ee160dbae5","isMergeCommit":true,"messageTitle":"Merge pull request #3 from ICubE-/master","messageBody":"Update AboutUs.md","fileTypesAndContributionMap":{}}]},{"date":"2023-10-09","commitResults":[{"hash":"7c693bb7c412eb7a6cfc6d7f099d7bb94aae2aeb","isMergeCommit":false,"messageTitle":"Construct main structure","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":51,"deletions":21},"other":{"insertions":2,"deletions":2}}},{"hash":"fb340aa0ea5ed0cd1c6dde8b051cbbcaa792194e","isMergeCommit":false,"messageTitle":"Fix style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":7}}},{"hash":"8912dea13964567d796fa4bbc76d55588b1ec207","isMergeCommit":false,"messageTitle":"Fix test","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"86c0f2188bcea12f5a76d997b017234465006224","isMergeCommit":true,"messageTitle":"Merge pull request #19 from ICubE-/construct-main-structure","messageBody":"Construct main structure","fileTypesAndContributionMap":{}},{"hash":"f8d2bbcd00c0d11ae2629994771c4c164eaf0316","isMergeCommit":false,"messageTitle":"Add parser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":242,"deletions":6}}},{"hash":"bd9b6f1918fe1e779ba23341f6d95e2bb2c92395","isMergeCommit":true,"messageTitle":"Merge pull request #21 from ICubE-/add-command-line-parser","messageBody":"Add parser","fileTypesAndContributionMap":{}}]},{"date":"2023-10-10","commitResults":[{"hash":"9839af36423c550dbbb9e9b81a0c434c7508b92a","isMergeCommit":false,"messageTitle":"Add parser feature Implement help","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":317,"deletions":10}}},{"hash":"9fcf9cfd45f0fe46041507e01ec9a5fd53943e14","isMergeCommit":true,"messageTitle":"Merge pull request #23 from ICubE-/add-command-line-parser","messageBody":"Add parser feature\r\nImplement help","fileTypesAndContributionMap":{}}]},{"date":"2023-10-11","commitResults":[{"hash":"bfcf45955781ddbb8a86b033e7cff341b25c9140","isMergeCommit":false,"messageTitle":"Rename class names and remove duplicate","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":33},"other":{"insertions":2,"deletions":2}}},{"hash":"ea9ccf44a2a24c25748df6e398f69fe40d6c4f8b","isMergeCommit":true,"messageTitle":"Merge pull request #24 from ICubE-/master","messageBody":"Rename class names and remove duplicate","fileTypesAndContributionMap":{}}]},{"date":"2023-10-13","commitResults":[{"hash":"06fe2465cbc89fa15ed477cb2452d868f0a33704","isMergeCommit":false,"messageTitle":"Fix description and usage of help command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":2}}},{"hash":"9dfb3871fa50f66d9187b82ce7a0ae9b50c99fb4","isMergeCommit":false,"messageTitle":"Add viewmeal command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":0}}}]},{"date":"2023-10-16","commitResults":[{"hash":"c88e6f63bb1d0ff05c1724791e14526d3494784c","isMergeCommit":false,"messageTitle":"Add JUnit test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":9,"deletions":7},"test-code":{"insertions":81,"deletions":0}}},{"hash":"a240c422c06c2291bb2559f146a58e728cba2c2a","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into add-command-line-parser","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"a5bd1b439c8c4bc034afc3dd91d70732fa935d75","isMergeCommit":false,"messageTitle":"Resolve merge conflict","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":5,"deletions":6}}},{"hash":"d2ee3d611b3371e01643eb09253c9d8feb550a05","isMergeCommit":false,"messageTitle":"Fix text-ui-test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"1f61f5bad510d7516359d62922dc690a577a4f06","isMergeCommit":true,"messageTitle":"Merge pull request #32 from ICubE-/add-command-line-parser","messageBody":"Add JUnit test","fileTypesAndContributionMap":{}},{"hash":"fbd34947a89c6ded5d4267d99a4e275e6ada0ead","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into implement-help-viewmeal","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"351d250a2faa2c16de83319e35857dd064936390","isMergeCommit":true,"messageTitle":"Merge pull request #33 from ICubE-/implement-help-viewmeal","messageBody":"Implement help command","fileTypesAndContributionMap":{}},{"hash":"62b7bf6fe234f4d4094f23d707861a3a4b0191ab","isMergeCommit":false,"messageTitle":"Fix compile error","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":15,"deletions":15}}},{"hash":"32592d9af6c70dd4ed6e2b69af8f7b34391cc720","isMergeCommit":false,"messageTitle":"Maintain code style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":15}}},{"hash":"e118470f8473f608124ce6000f004effaf006a5e","isMergeCommit":false,"messageTitle":"Modify code structure","messageBody":"Change term \u0027work\u0027 -\u003e \u0027workout\u0027\nRemove duplicate: ListMealsCommand\nStandardize terms: \u0027check\u0027, \u0027list\u0027 -\u003e \u0027view\u0027\nRefactor UserProfile to have daily calorie surplus limit\n","fileTypesAndContributionMap":{"functional-code":{"insertions":144,"deletions":140},"other":{"insertions":15,"deletions":14},"test-code":{"insertions":12,"deletions":10}}},{"hash":"02d392d09491b3e5f7a52856e793e652c33eea96","isMergeCommit":true,"messageTitle":"Resolve conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"fae647fca619bf452727fd19e3035e3eb42f9099","isMergeCommit":true,"messageTitle":"Resolve conflicts","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"d72196bc2be0e437983aa15885fbfc8b55b8cb97","isMergeCommit":true,"messageTitle":"Merge pull request #37 from ICubE-/master","messageBody":"Modify code structure","fileTypesAndContributionMap":{}},{"hash":"6850ccb23a15923447639e53c1f1b2f6780c88f7","isMergeCommit":false,"messageTitle":"Maintain code style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":3,"deletions":2}}},{"hash":"2cfb9f88724ef74608e9576c5a33066cbd0e09e8","isMergeCommit":true,"messageTitle":"Merge pull request #39 from ICubE-/master","messageBody":"Maintain code style","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"10fb9a4437597dc560def7c12337be63888862fb","isMergeCommit":false,"messageTitle":"Update command words","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"5e5d7311f419a2c99fbada6c3dacf6de1be27a17","isMergeCommit":false,"messageTitle":"Remove redundant commands","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":75}}},{"hash":"ad1c7208fc8949224ac4b3dc7ff20ff89558d7f9","isMergeCommit":false,"messageTitle":"Update command words","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"7837767b11a9ad4528707336675ac3e303c74730","isMergeCommit":false,"messageTitle":"Refactor CommandParser","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":6}}},{"hash":"5c4f2a2d9bfa034d6d40cd0afa40053b009f00d0","isMergeCommit":false,"messageTitle":"Change HELPs\u0027 access modifier to public","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":6}}},{"hash":"1b4e3a00c5d88652694c1cd68596266c73a99edb","isMergeCommit":false,"messageTitle":"Add JUnit tests","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":7,"deletions":2},"test-code":{"insertions":79,"deletions":2}}},{"hash":"d6034fc3e0b020759d5180cded42404f812c586a","isMergeCommit":false,"messageTitle":"Fix style","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":2,"deletions":2}}},{"hash":"bcd5ccd469ec5377ed534e8af92c77ef74194470","isMergeCommit":true,"messageTitle":"Merge pull request #43 from ICubE-/add-junit-test","messageBody":"Add JUnit tests","fileTypesAndContributionMap":{}}]},{"date":"2023-10-18","commitResults":[{"hash":"9cf6ea6e1a47cf7fc45795a45085363aec71ec87","isMergeCommit":false,"messageTitle":"Update build.gradle","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":1}}},{"hash":"2782e54c7fad18887b8b2a26a9efa7f21558d3c0","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"149e1bee352449e010f1e6204e24aff50922c98f","isMergeCommit":true,"messageTitle":"Merge pull request #48 from ICubE-/master","messageBody":"Update build.gradle","fileTypesAndContributionMap":{}},{"hash":"d4c97f5af0b2cd527f11496afb3f53b6d3a24d8d","isMergeCommit":true,"messageTitle":"Merge pull request #49 from marklin2234/delete-workout","messageBody":"add delete","fileTypesAndContributionMap":{}},{"hash":"0f2f80d367518e4a6a47698c6f5eb5911a0f5dd4","isMergeCommit":false,"messageTitle":"Maintain code style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":16,"deletions":11}}},{"hash":"1cc2586c833d13392b19940d770b64902105b0e5","isMergeCommit":false,"messageTitle":"Fix to pass test","messageBody":"","fileTypesAndContributionMap":{"test-code":{"insertions":1,"deletions":1}}},{"hash":"e8479cedc7a63b13b2f2d69d21ef2b32e213c207","isMergeCommit":true,"messageTitle":"Merge pull request #50 from ICubE-/master","messageBody":"Maintain code style","fileTypesAndContributionMap":{}},{"hash":"0ee1a31d3dae37c0c542a75d8b39336b732dcce8","isMergeCommit":false,"messageTitle":"Update references","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":0}}},{"hash":"ea20895fc3136aa81a7043643a1438335c3a8913","isMergeCommit":true,"messageTitle":"Merge pull request #52 from ICubE-/master","messageBody":"Update references","fileTypesAndContributionMap":{}},{"hash":"755ae59d569ed581cb7a7589633df9a6abc5c4c4","isMergeCommit":false,"messageTitle":"Update DeleteWorkoutCommand.java","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"450a8ef7c72bf3762f8a886de536cffa85c3d926","isMergeCommit":false,"messageTitle":"Update build.gradle","messageBody":"","fileTypesAndContributionMap":{"other":{"insertions":1,"deletions":0}}},{"hash":"e75d9fd7d4f272c1d6aa870b3f28ee0f7762045d","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"c144ba92e31d51962de4635273f21e5631c1bad1","isMergeCommit":true,"messageTitle":"Merge pull request #53 from ICubE-/master","messageBody":"Fix minor thingys","fileTypesAndContributionMap":{}},{"hash":"c05ef090dd1e85d3330d3cbaf66c7c2e546b7d3d","isMergeCommit":true,"messageTitle":"Merge pull request #55 from J0shuaLeong/master","messageBody":"Updated user guide","tags":["v1.0"],"fileTypesAndContributionMap":{}},{"hash":"c6056187018df3a34001c08348ea1c390cc7f24a","isMergeCommit":false,"messageTitle":"Fix bug","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":2},"other":{"insertions":0,"deletions":4}}},{"hash":"66a1cf4bb08160563cbd785a9a17b09557ee0549","isMergeCommit":false,"messageTitle":"Maintain style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":48,"deletions":27}}},{"hash":"3fe9b2b6f2198fc983932124f885e6a600d86e9d","isMergeCommit":true,"messageTitle":"Merge pull request #1 from ICubE-/maintain-code-style","messageBody":"Maintain style","fileTypesAndContributionMap":{}},{"hash":"fb527c6e2c5c84d2aa0eea59c352cbae444ee66b","isMergeCommit":true,"messageTitle":"Merge pull request #61 from ICubE-/fix-bug-and-maintain-style","messageBody":"Fix bug and maintain style","fileTypesAndContributionMap":{}},{"hash":"6e37cfe9bec197bf4c59044132c674c199392b8d","isMergeCommit":false,"messageTitle":"Fix bug in help","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"d43f391a2582f98832ed78aed16ad90a6afb4b29","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into handle-invalid-command-smoother","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"2da0c01a747ba7a2b5222f91f8e141649c9b6083","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into fix-bug-and-maintain-style","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"411dc1394f74477f81785916c0c777621a5c87bd","isMergeCommit":false,"messageTitle":"Handle invalid command smoother","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":15},"test-code":{"insertions":1,"deletions":1}}},{"hash":"25c60717b15629cf088112dfd2068e198239b7c0","isMergeCommit":false,"messageTitle":"Fix test","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1},"test-code":{"insertions":5,"deletions":1}}},{"hash":"0fc286ffb1b01e71d63f9731d1dd2a3cea8f729f","isMergeCommit":true,"messageTitle":"Merge pull request #64 from ICubE-/handle-invalid-command-smoother","messageBody":"Handle invalid command smoother","fileTypesAndContributionMap":{}}]},{"date":"2023-10-20","commitResults":[{"hash":"f92708e8ea0065f577101f9fe4198f72d8899992","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into fix-bug-and-maintain-style","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"55d1d70c77de24e39dea837b58bef176442c9f28","isMergeCommit":false,"messageTitle":"Maintain style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":13}}},{"hash":"31dbc9878713b4976046d7e54a5fbac65687a934","isMergeCommit":false,"messageTitle":"Maintain style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":9}}},{"hash":"00bd5cbe31d22e577277f35fce893d5fbe6da682","isMergeCommit":true,"messageTitle":"Merge pull request #84 from ICubE-/fix-bug-and-maintain-style","messageBody":"Maintain style","fileTypesAndContributionMap":{}},{"hash":"9b057d59046459249901985061f6c80461d898f5","isMergeCommit":false,"messageTitle":"Abstract data","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":66,"deletions":10}}},{"hash":"eecbc699fa82f683ea9c0e482220fa0db37f353c","isMergeCommit":false,"messageTitle":"Maintain style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":1}}},{"hash":"ba3ed4d394d4b37e1b8c1e44cdb21d497b3834ad","isMergeCommit":false,"messageTitle":"Update Height, Weight, Calories","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":60,"deletions":0}}},{"hash":"6b55deec90c28acef909a6db9c7d19f66e2d9254","isMergeCommit":false,"messageTitle":"Update Height, Weight, Calories","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":18,"deletions":6}}},{"hash":"746fe8aed4792002f43283fc26e536ed1d574972","isMergeCommit":false,"messageTitle":"Add date","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":52,"deletions":1}}},{"hash":"4085a2e2f733300b10cc1d533138a0e68a5cda54","isMergeCommit":true,"messageTitle":"Merge pull request #85 from ICubE-/abstract-data-structures","messageBody":"Abstract data structures","fileTypesAndContributionMap":{}}]},{"date":"2023-10-21","commitResults":[{"hash":"f81add2d28ed21454df1a3940c603c5d0aa5d29e","isMergeCommit":false,"messageTitle":"Update Height, Weight, and Calories","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":30,"deletions":52},"test-code":{"insertions":3,"deletions":3}}},{"hash":"94c1534c0b6acda6686b5dcd39fd2a54f5db1097","isMergeCommit":false,"messageTitle":"Add Date field in Meal","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":29,"deletions":16}}},{"hash":"4907b7bf244ab895de10c0ad1dfc7dfb50815cb7","isMergeCommit":true,"messageTitle":"Merge remote-tracking branch \u0027upstream/master\u0027 into add-date-to-commands","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"df1286c133376aec1c6e12528db08bbbe84ab4b6","isMergeCommit":false,"messageTitle":"Fix regex","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"d15923d35b33a73b31233f77ae09f772c9e1b100","isMergeCommit":false,"messageTitle":"Add Date field in Workout","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":27,"deletions":17}}},{"hash":"f5f484307b2233d7a02d897842c394470019e927","isMergeCommit":false,"messageTitle":"Add assertion","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"68630df58a0d05e89e7abaa34b97e54543cc35ea","isMergeCommit":false,"messageTitle":"Make commands not to use static","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":17,"deletions":13}}},{"hash":"b456fd5eee8676ae38af86858d32c45dd6b65f2b","isMergeCommit":false,"messageTitle":"Maintain style","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":0,"deletions":6}}},{"hash":"4990a15269b620ae56289963bcf8f9a6c140ec04","isMergeCommit":true,"messageTitle":"Merge pull request #89 from ICubE-/add-date-to-commands","messageBody":"Add date to commands","fileTypesAndContributionMap":{}},{"hash":"62d893c4a09eeecfc6f643861de595fb79428ae7","isMergeCommit":false,"messageTitle":"Restructure packages","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":6},"other":{"insertions":8,"deletions":14}}},{"hash":"c9d9a7645338add77591a1331f4ad4d3e6356a68","isMergeCommit":true,"messageTitle":"Merge pull request #90 from ICubE-/abstract-data-structures","messageBody":"Restructure packages","fileTypesAndContributionMap":{}}]}],"marklin2234":[{"date":"2023-10-04","commitResults":[{"hash":"9d5c2b2aeb519efd81570d45afba1fd7efd61325","isMergeCommit":false,"messageTitle":"change name (#2)","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":2,"deletions":1}}}]},{"date":"2023-10-18","commitResults":[{"hash":"a7981fdf23fa49c4f7b677d5b5dfda2fb99225b4","isMergeCommit":false,"messageTitle":"add delete","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":8,"deletions":2}}},{"hash":"97268deb0ffd66af5bd78208322db50e4b338b40","isMergeCommit":false,"messageTitle":"fix delete workout (#51)","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":3}}}]},{"date":"2023-10-22","commitResults":[{"hash":"02dd916c55538bb56569fbe906abb50c72240344","isMergeCommit":false,"messageTitle":"delete workout error handling (#93)","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":31,"deletions":5}}}]}],"farissirraj":[{"date":"2023-10-04","commitResults":[{"hash":"d29c533ec8490161881211184e028eb258c44809","isMergeCommit":false,"messageTitle":"Change name in About Us","messageBody":"","fileTypesAndContributionMap":{"docs":{"insertions":7,"deletions":7}}}]},{"date":"2023-10-09","commitResults":[{"hash":"7bb04d887d4ece7439d62030cfa67a5d840825c7","isMergeCommit":false,"messageTitle":"Create class for checking calorie surplus limit command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":0}}},{"hash":"a212cb420bd3cf786e68bbddb94452a5d41867af","isMergeCommit":false,"messageTitle":"Create class for checking the height","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":0}}},{"hash":"5d4b5515c143fe1c0f60dd65b5e86c6930cb7c12","isMergeCommit":false,"messageTitle":"Create class for checking the weight","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":0}}},{"hash":"6042ca31a30101f604c269182bfe03db3c1d73f8","isMergeCommit":false,"messageTitle":"Create class for listing the workout","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":0}}},{"hash":"7e623f8cf9bc78fc3ebdae9068637c23022448a5","isMergeCommit":false,"messageTitle":"Create class for setting the daily calorie limit","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":0}}},{"hash":"040b81c6dceccbbf71d81692fcf9d7e04571af43","isMergeCommit":false,"messageTitle":"Update Command Parser Class with the new command class constructor calls","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":11,"deletions":11}}},{"hash":"26808bf357e853bc3f770f7ca8f9e01e92c45ed0","isMergeCommit":true,"messageTitle":"Merge pull request #22 from farissirraj/BasicCommands","messageBody":"Skeletal Implementation of Basic Commands","fileTypesAndContributionMap":{}}]},{"date":"2023-10-17","commitResults":[{"hash":"f6f43556d8ee795f2c788631c0ad56d066ffd4ab","isMergeCommit":false,"messageTitle":"Import relevant packages","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":0}}},{"hash":"66e239354d0fa35518963f00c3db3ef9b4c72c63","isMergeCommit":false,"messageTitle":"Define description, usage and help messages/instructions for the addworkout command","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":6,"deletions":0}}},{"hash":"ef61fc817505941ca5059d5c7411cf668677435b","isMergeCommit":false,"messageTitle":"Add functionality to add the new workout to the workoutList","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"3fbb1cc4ecdb002841125829a5fbf83cd0ef1f58","isMergeCommit":false,"messageTitle":"Add functionality to parse the calories from the user input","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":1}}},{"hash":"5f1f4a32e4a4df65930abd3b5c64efab86e054b6","isMergeCommit":false,"messageTitle":"Add functionality to return help messages as needed - AddWorkoutCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"dbc107ac3824cf1f605c127925a60b80dba7f07d","isMergeCommit":false,"messageTitle":"Add addworkout and viewWorkout to the list of command words","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"ae01b88887c2b68e3826bf0740fd5198d8d5617a","isMergeCommit":false,"messageTitle":"Add help messages for the ViewWorkoutsCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":10,"deletions":1}}},{"hash":"24cc96e773a935bd9ebda08fe082a0d53a728214","isMergeCommit":false,"messageTitle":"Add help message callback for the viewWorkoutsCommand","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"9cb261295501ef2d7b9c96f94d5099a0b2693824","isMergeCommit":false,"messageTitle":"Add functionality to list the workouts in the list of workouts","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":4,"deletions":1}}},{"hash":"553acb6d792a924d93406b0538e728ff56900390","isMergeCommit":false,"messageTitle":"Create a new class for the list of workouts","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":32,"deletions":0}}}]},{"date":"2023-10-18","commitResults":[{"hash":"7af2404cab7f15393ba74ab874b00b870f7de78d","isMergeCommit":true,"messageTitle":"Merge branch \u0027master\u0027 into WorkoutOperations","messageBody":"","fileTypesAndContributionMap":{}},{"hash":"9f0a6024504c35da5ff544452bb8f3a395799510","isMergeCommit":false,"messageTitle":"Create Workout Class","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":25,"deletions":0}}},{"hash":"01ca5f7bea8bc3d49389886c0830acd9fb1466e4","isMergeCommit":false,"messageTitle":"Add assertion","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":0}}},{"hash":"8d0d8034a12f6a0a58ed437757c367680b0e6ac4","isMergeCommit":false,"messageTitle":"Fix indentation issue","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":1,"deletions":1}}},{"hash":"14b877efe5d0e6cc0b54b309d1b7eefeedcb8411","isMergeCommit":false,"messageTitle":"Reduce the number of charecters per line","messageBody":"","fileTypesAndContributionMap":{"functional-code":{"insertions":2,"deletions":2}}},{"hash":"6e0506c527d74f6dddbe78421f5fe81bc81e8582","isMergeCommit":true,"messageTitle":"Merge pull request #47 from farissirraj/WorkoutOperations","messageBody":"Workout Operations","fileTypesAndContributionMap":{}}]}]},"authorFileTypeContributionMap":{"NgLixuanNixon":{"docs":2,"functional-code":79,"test-code":0},"J0shuaLeong":{"docs":226,"functional-code":347,"test-code":45,"other":1},"ICubE-":{"docs":1,"functional-code":912,"test-code":166,"other":3},"marklin2234":{"docs":1,"functional-code":30,"test-code":0},"farissirraj":{"docs":1,"functional-code":69,"test-code":0}},"authorContributionVariance":{"NgLixuanNixon":1470.8451,"J0shuaLeong":8649.51,"ICubE-":17915.6,"marklin2234":45.496353,"farissirraj":357.88354},"authorDisplayNameMap":{"NgLixuanNixon":"CS2113-W12-4 NG L..IXON","J0shuaLeong":"CS2113-W12-4 LEON..SHUA","ICubE-":"CS2113-W12-4 YEON..JEHO","marklin2234":"CS2113-W12-4 LIN ..ZHAO","farissirraj":"CS2113-W12-4 FARI..RRAJ"}} diff --git a/archive.zip b/archive.zip index 190267d3ed09a869ba5aafb19d51c255e0b47e26..2d88c04db99097e329d999f665ab24e717a920b1 100644 GIT binary patch delta 354328 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

#4~?D3!sgS*hOR=7tP$u=1#7>!w) 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 i05^9>M{`$C9y>Q@CmnSR%s&8T1)u&F?sjj}N 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�B?Z?fUMrT2CdbEnS$2hO>pMlJqOCPq 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

Vf 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¬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